首先,簡單介紹一下FSP。瑞薩的Flexibility Software Package(FSP)是一種嵌入式軟件和開發工具包,提供了集成的軟件平臺,幫助開發者快速設計、開發和部署嵌入式系統。FSP提供了一系列軟件組件、設備驅動程序、操作系統抽象層和中間件,以及與瑞薩微控制器相配套的開發工具。通過使用FSP,開發者可以減少開發時間和成本,快速構建高度可靠、高性能的嵌入式系統。
通過FSP的圖形化界面可以設置RA CANFD Lite模塊的引腳和功能,使用FSP生成的函數可以執行CANFD Lite模塊的初始化,發送&接收數據,這樣可以加快項目完成,縮短用戶開發時間。
而使用FSP如何設置RA CANFD Lite功能,將從以下幾個方面進行說明:
添加CANFD Lite模塊
在e2 studio雙擊工程中的configuraion.xml文件,在Stacks選項卡中,點擊New Stack,選擇CANFD Lite (r_canfdlite)。
設置時鐘
CANFD時鐘默認為禁用狀態。選擇Clocks選項卡,將CANFDCLK設置為40MHz:
● 將PLL(鎖相環)分頻器改為Div / 2
● 將PLL乘法器改為Mul x16.0
● 將CANFDCLK改為Src: PLL
● 將CANFDCLK分頻器改為Div /4
設置引腳
選擇Pins Tab,點擊CANFD0,Pin Group Selection選擇Mixed的情況下,Operation Mode選擇Enabled,CRX0自動選擇P102、CTX0自動選擇P103,也可以通過右側的下拉箭頭根據用戶需要選擇其他可用引腳。
設置CANFD Lite模塊屬性
切回Stacks選項卡,選擇CANFD lite,轉至Properties窗口(確保當前為FSP配置透視圖的情況下,點擊右上方:
打開Properties窗口。
或者通過Window→Show View→Other
搜索找到Properties窗口
4.1 設置標稱比特率(Nominal Rate)和FD數據比特率(FD Data Rate)
可以選擇自動生成比特率或者手動設置比特率
請注意,如果選擇自動生成比特率,“Use manual settings”一項需要設置為No。
4.2 修改AFL數量
由于RA6E2只有Channel 0,所以需要將“Channel 1 Rule Count”一項改為0。
另外,RA6E2的CANFD Lite模塊最多允許32個AFL條目。
4.3 設置使用的TX Mailbox 0(TX MB0)
例如通過TX Mailbox 0(TX MB0)發送數據,則勾選“TX MB0”一項。
4.4 設置發送優先級
發送優先級有可以選擇CAN ID優先(Message ID)或者消息緩沖區編號優先(Buffer Number)。
4.5 設置接收MB的數量和大小
4.6 設置接收FIFO的中斷模式、中斷閾值、大小和深度
請注意,RX MB和FIFO位于有限的RAM區域中,所以在設置RX MB和FIFO時,大小和深度的最大值取決于可用的RAM區域。從FSP v4.3.0開始,如果超出CANFD RAM區域,FSP會提示錯誤。
4.7 設置Callback函數名和優先級
4.8 設置通道和全局錯誤中斷,根據用戶實際需要進行勾選
5
添加AFL
RA CANFD使用AFL條目來過濾接收到的消息,AFL 的主要參數如下:
點擊查看大圖
例如想接收到以下要求的數據,那么在hal_entry.c文件中hal_entry()函數前需要復制以下const來設置AFL:
● Classical CAN Bus
● Standard ID (11 bits)
● RX MB 0 (to receive messages IDs 0x40 or 0x41)
const canfd_afl_entry_t p_canfd0_afl[CANFD_CFG_AFL_CH0_RULE_NUM] = { { .id = { .id = 0x40, .frame_type = CAN_FRAME_TYPE_DATA, .id_mode = CAN_ID_MODE_STANDARD, }, .mask = { .mask_id = 0x7FE, .mask_frame_type = 0, .mask_id_mode = 1, }, .destination = { .minimum_dlc = CANFD_MINIMUM_DLC_0, .rx_buffer = CANFD_RX_MB_0, }, }, };
CANFD相關API
點擊查看大圖
用戶代碼中添加初始化函數、發送函數、接收函數和Callback函數
7.1 添加幾個變量聲明和一個宏定義
/* Flags to be set in Callback function */ bool b_canfd_tx_complete = false; bool b_canfd_rx_complete = false; bool b_canfd_err_status = false; /* CANFD RX and TX variables */ can_frame_t g_can_tx_frame; can_frame_t g_can_rx_frame; can_frame_t g_can_rx_frame_fifo; uint8_t tx_data[64]; #define DATA_LENGTH (8)
7.2 添加初始化函數
/* Initialize CANFD Lite driver*/ R_CANFD_Open(&g_canfd0_ctrl, &g_canfd0_cfg);
7.3 添加發送函數
for( uint16_t i = 0; i < DATA_LENGTH; i++) { tx_data[i] = (uint8_t) (i + 1); } memcpy((uint8_t*)&g_can_tx_frame.data[0], (uint8_t*)&tx_data[0], DATA_LENGTH); g_can_tx_frame.id = 0x60; g_can_tx_frame.id_mode = CAN_ID_MODE_STANDARD; g_can_tx_frame.type = CAN_FRAME_TYPE_DATA; g_can_tx_frame.data_length_code = 64;//8; g_can_tx_frame.options = CANFD_FRAME_OPTION_FD | CANFD_FRAME_OPTION_BRS;//0; g_can_tx_frame.options = 0; /* Write some data to the transmit frame */ R_CANFD_Write(&g_canfd0_ctrl, 0, &g_can_tx_frame);
7.4 當使用RX MB接收數據時,添加以下代碼
/* Get the status information for CAN transmission */ R_CANFD_InfoGet(&g_canfd0_ctrl, &can_rx_info); /* Check if the data is received in FIFO */ if((can_rx_info.rx_mb_status & (1<<0)) == (1<<0)) { /* Read the input frame received */ R_CANFD_Read(&g_canfd0_ctrl, 0, &g_can_rx_frame); }
7.5 添加Callback函數
/* Callback function */ void canfd0_callback(can_callback_args_t *p_args) { /* TODO: add your own code here */ switch (p_args->event) { case CAN_EVENT_TX_COMPLETE: { b_canfd_tx_complete = true; //set flag bit break; } case CAN_EVENT_RX_COMPLETE: // Currently driver don't support this. This is unreachable code for now. { b_canfd_rx_complete = true; memcpy(&g_can_rx_frame, &p_args->frame, sizeof(can_frame_t)); break; } case CAN_EVENT_ERR_WARNING: //error warning event case CAN_EVENT_ERR_PASSIVE: //error passive event case CAN_EVENT_ERR_BUS_OFF: //error Bus Off event case CAN_EVENT_BUS_RECOVERY: //Bus recovery error event case CAN_EVENT_MAILBOX_MESSAGE_LOST: //overwrite/overrun error event case CAN_EVENT_ERR_BUS_LOCK: // Bus lock detected (32 consecutive dominant bits). case CAN_EVENT_ERR_CHANNEL: // Channel error has occurred. case CAN_EVENT_TX_ABORTED: // Transmit abort event. case CAN_EVENT_ERR_GLOBAL: // Global error has occurred. case CAN_EVENT_FIFO_MESSAGE_LOST: // Transmit FIFO is empty. case CAN_EVENT_TX_FIFO_EMPTY: // Transmit FIFO is empty. { b_canfd_err_status = true; //set flag bit break; } } }
通過以上內容,我們可以看到,瑞薩的FSP為嵌入式系統開發者提供了一種快速、靈活和可靠的軟件開發平臺,幫助使用者快速將創意轉化為端產品,并滿足不同市場的需求。
-
mcu
+關注
關注
146文章
17123瀏覽量
350982 -
FSP
+關注
關注
0文章
34瀏覽量
7131 -
CANFD
+關注
關注
0文章
57瀏覽量
4938
發布評論請先 登錄
相關推薦
評論