首先,簡單介紹一下FSP。瑞薩的Flexibility Software Package(FSP)是一種嵌入式軟件和開發(fā)工具包,提供了集成的軟件平臺,幫助開發(fā)者快速設(shè)計(jì)、開發(fā)和部署嵌入式系統(tǒng)。FSP提供了一系列軟件組件、設(shè)備驅(qū)動程序、操作系統(tǒng)抽象層和中間件,以及與瑞薩微控制器相配套的開發(fā)工具。通過使用FSP,開發(fā)者可以減少開發(fā)時(shí)間和成本,快速構(gòu)建高度可靠、高性能的嵌入式系統(tǒng)。
通過FSP的圖形化界面可以設(shè)置RA CANFD Lite模塊的引腳和功能,使用FSP生成的函數(shù)可以執(zhí)行CANFD Lite模塊的初始化,發(fā)送&接收數(shù)據(jù),這樣可以加快項(xiàng)目完成,縮短用戶開發(fā)時(shí)間。
而使用FSP如何設(shè)置RA CANFD Lite功能,將從以下幾個(gè)方面進(jìn)行說明:
添加CANFD Lite模塊
在e2 studio雙擊工程中的configuraion.xml文件,在Stacks選項(xiàng)卡中,點(diǎn)擊New Stack,選擇CANFD Lite (r_canfdlite)。
設(shè)置時(shí)鐘
CANFD時(shí)鐘默認(rèn)為禁用狀態(tài)。選擇Clocks選項(xiàng)卡,將CANFDCLK設(shè)置為40MHz:
● 將PLL(鎖相環(huán))分頻器改為Div / 2
● 將PLL乘法器改為Mul x16.0
● 將CANFDCLK改為Src: PLL
● 將CANFDCLK分頻器改為Div /4
設(shè)置引腳
選擇Pins Tab,點(diǎn)擊CANFD0,Pin Group Selection選擇Mixed的情況下,Operation Mode選擇Enabled,CRX0自動選擇P102、CTX0自動選擇P103,也可以通過右側(cè)的下拉箭頭根據(jù)用戶需要選擇其他可用引腳。
設(shè)置CANFD Lite模塊屬性
切回Stacks選項(xiàng)卡,選擇CANFD lite,轉(zhuǎn)至Properties窗口(確保當(dāng)前為FSP配置透視圖的情況下,點(diǎn)擊右上方:
打開Properties窗口。
或者通過Window→Show View→Other
搜索找到Properties窗口
4.1 設(shè)置標(biāo)稱比特率(Nominal Rate)和FD數(shù)據(jù)比特率(FD Data Rate)
可以選擇自動生成比特率或者手動設(shè)置比特率
請注意,如果選擇自動生成比特率,“Use manual settings”一項(xiàng)需要設(shè)置為No。
4.2 修改AFL數(shù)量
由于RA6E2只有Channel 0,所以需要將“Channel 1 Rule Count”一項(xiàng)改為0。
另外,RA6E2的CANFD Lite模塊最多允許32個(gè)AFL條目。
4.3 設(shè)置使用的TX Mailbox 0(TX MB0)
例如通過TX Mailbox 0(TX MB0)發(fā)送數(shù)據(jù),則勾選“TX MB0”一項(xiàng)。
4.4 設(shè)置發(fā)送優(yōu)先級
發(fā)送優(yōu)先級有可以選擇CAN ID優(yōu)先(Message ID)或者消息緩沖區(qū)編號優(yōu)先(Buffer Number)。
4.5 設(shè)置接收MB的數(shù)量和大小
4.6 設(shè)置接收FIFO的中斷模式、中斷閾值、大小和深度
請注意,RX MB和FIFO位于有限的RAM區(qū)域中,所以在設(shè)置RX MB和FIFO時(shí),大小和深度的最大值取決于可用的RAM區(qū)域。從FSP v4.3.0開始,如果超出CANFD RAM區(qū)域,F(xiàn)SP會提示錯(cuò)誤。
4.7 設(shè)置Callback函數(shù)名和優(yōu)先級
4.8 設(shè)置通道和全局錯(cuò)誤中斷,根據(jù)用戶實(shí)際需要進(jìn)行勾選
5
添加AFL
RA CANFD使用AFL條目來過濾接收到的消息,AFL 的主要參數(shù)如下:
點(diǎn)擊查看大圖
例如想接收到以下要求的數(shù)據(jù),那么在hal_entry.c文件中hal_entry()函數(shù)前需要復(fù)制以下const來設(shè)置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相關(guān)API
點(diǎn)擊查看大圖
用戶代碼中添加初始化函數(shù)、發(fā)送函數(shù)、接收函數(shù)和Callback函數(shù)
7.1 添加幾個(gè)變量聲明和一個(gè)宏定義
/* 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 添加初始化函數(shù)
/* Initialize CANFD Lite driver*/ R_CANFD_Open(&g_canfd0_ctrl, &g_canfd0_cfg);
7.3 添加發(fā)送函數(shù)
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 當(dāng)使用RX MB接收數(shù)據(jù)時(shí),添加以下代碼
/* 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函數(shù)
/* 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; } } }
通過以上內(nèi)容,我們可以看到,瑞薩的FSP為嵌入式系統(tǒng)開發(fā)者提供了一種快速、靈活和可靠的軟件開發(fā)平臺,幫助使用者快速將創(chuàng)意轉(zhuǎn)化為端產(chǎn)品,并滿足不同市場的需求。
-
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351186 -
FSP
+關(guān)注
關(guān)注
0文章
34瀏覽量
7141 -
CANFD
+關(guān)注
關(guān)注
0文章
58瀏覽量
4945
發(fā)布評論請先 登錄
相關(guān)推薦
評論