在瑞薩RA系列MCU產(chǎn)品中,目前RA4E2、RA4T1、RA6E2、RA6T2和RA6T3搭載了CANFD Lite(硬件手冊中成為CANFD_B)模塊,相關的詳細IP介紹,請參見之前的文章
本篇將為您介紹如何使用FSP配置CANFD Lite模塊,請注意與RA6M5搭載的CANFD模塊的配置略有區(qū)別,這里不詳細講述。
首先,簡單介紹一下FSP。瑞薩的Flexibility Software Package(FSP)是一種嵌入式軟件和開發(fā)工具包,提供了集成的軟件平臺,幫助開發(fā)者快速設計、開發(fā)和部署嵌入式系統(tǒng)。FSP提供了一系列軟件組件、設備驅(qū)動程序、操作系統(tǒng)抽象層和中間件,以及與瑞薩微控制器相配套的開發(fā)工具。通過使用FSP,開發(fā)者可以減少開發(fā)時間和成本,快速構建高度可靠、高性能的嵌入式系統(tǒng)。
FSP具有以下特點和優(yōu)勢:
靈活性和可擴展性:FSP支持瑞薩廣泛的微控制器產(chǎn)品系列,使開發(fā)者能夠選擇適合其需求的合適解決方案。
高度集成的軟件平臺:FSP提供了一整套軟件組件,包括設備驅(qū)動程序、操作系統(tǒng)抽象層和中間件,簡化了系統(tǒng)開發(fā)流程。
快速上手和開發(fā):FSP提供了豐富的示例代碼、開發(fā)工具和文檔,使開發(fā)者能夠快速開始開發(fā)工作,并加速產(chǎn)品上市時間。
兼容性和維護性:FSP基于開放標準,并與瑞薩的先進開發(fā)工具集成,可以輕松集成第三方軟件和工具,同時享受瑞薩長期的技術支持和維護。
通過FSP的圖形化界面可以設置RA CANFD Lite模塊的引腳和功能,使用FSP生成的函數(shù)可以執(zhí)行CANFD Lite模塊的初始化,發(fā)送&接收數(shù)據(jù),這樣可以加快項目完成,縮短用戶開發(fā)時間。
而使用FSP如何設置RA CANFD Lite功能,將從以下幾個方面進行說明:
1添加CANFD Lite模塊
在e2 studio雙擊工程中的configuraion.xml文件,在Stacks選項卡中,點擊New Stack,選擇CANFD Lite (r_canfdlite)。
2設置時鐘
CANFD時鐘默認為禁用狀態(tài)。選擇Clocks選項卡,將CANFDCLK設置為40MHz:
將PLL(鎖相環(huán))分頻器改為Div / 2
將PLL乘法器改為Mul x16.0
將CANFDCLK改為Src: PLL
將CANFDCLK分頻器改為Div /4
3設置引腳
選擇Pins Tab,點擊CANFD0,Pin Group Selection選擇Mixed的情況下,Operation Mode選擇Enabled,CRX0自動選擇P102、CTX0自動選擇P103,也可以通過右側(cè)的下拉箭頭根據(jù)用戶需要選擇其他可用引腳。
4設置CANFD Lite模塊屬性
切回Stacks選項卡,選擇CANFD lite,轉(zhuǎn)至Properties窗口(確保當前為FSP配置透視圖的情況下,點擊右上方:
打開Properties窗口。
或者通過Window→Show View→Other
搜索找到Properties窗口
4.1 設置標稱比特率(Nominal Rate)和FD數(shù)據(jù)比特率(FD Data Rate)
可以選擇自動生成比特率或者手動設置比特率
請注意,如果選擇自動生成比特率,“Use manual settings”一項需要設置為No。
4.2 修改AFL數(shù)量
由于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)發(fā)送數(shù)據(jù),則勾選“TX MB0”一項。
4.4 設置發(fā)送優(yōu)先級
發(fā)送優(yōu)先級有可以選擇CAN ID優(yōu)先(Message ID)或者消息緩沖區(qū)編號優(yōu)先(Buffer Number)。
4.5 設置接收MB的數(shù)量和大小
4.6 設置接收FIFO的中斷模式、中斷閾值、大小和深度
請注意,RX MB和FIFO位于有限的RAM區(qū)域中,所以在設置RX MB和FIFO時,大小和深度的最大值取決于可用的RAM區(qū)域。從FSP v4.3.0開始,如果超出CANFD RAM區(qū)域,F(xiàn)SP會提示錯誤。
4.7 設置Callback函數(shù)名和優(yōu)先級
4.8 設置通道和全局錯誤中斷,根據(jù)用戶實際需要進行勾選
5添加AFL
RA CANFD使用AFL條目來過濾接收到的消息,AFL 的主要參數(shù)如下:
點擊查看大圖
例如想接收到以下要求的數(shù)據(jù),那么在hal_entry.c文件中hal_entry()函數(shù)前需要復制以下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, }, }, };
6CANFD相關API
點擊查看大圖
7用戶代碼中添加初始化函數(shù)、發(fā)送函數(shù)、接收函數(shù)和Callback函數(shù)
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 添加初始化函數(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 當使用RX MB接收數(shù)據(jù)時,添加以下代碼
左右滑動查看更多
/* 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ù)
左右滑動查看更多
使用FIFO接收時,需要在Callback中讀取接收到的數(shù)據(jù)。
/* 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)品,并滿足不同市場的需求。
審核編輯:湯梓紅
-
微控制器
+關注
關注
48文章
7542瀏覽量
151311 -
mcu
+關注
關注
146文章
17123瀏覽量
350975 -
嵌入式系統(tǒng)
+關注
關注
41文章
3587瀏覽量
129433 -
瑞薩
+關注
關注
35文章
22308瀏覽量
86238 -
FSP
+關注
關注
0文章
34瀏覽量
7131
原文標題:RA MCU CANFD在FSP中的配置詳解
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論