在瑞萨RA系列MCU产品中,目前RA4E2、RA4T1、RA6E2、RA6T2和RA6T3搭载了CANFD Lite(硬件手册中成为CANFD_B)模块,相关的详细IP介绍,请参见之前的文章<RA MCU CAN和CANFD IP介绍>
本篇将为您介绍如何使用FSP配置CANFD Lite模块,请注意与RA6M5搭载的CANFD模块的配置略有区别,这里不详细讲述。
首先,简单介绍一下FSP。瑞萨的Flexibility Software Package(FSP)是一种嵌入式软件和开发工具包,提供了集成的软件平台,帮助开发者快速设计、开发和部署嵌入式系统。FSP提供了一系列软件组件、设备驱动程序、操作系统抽象层和中间件,以及与瑞萨微控制器相配套的开发工具。通过使用FSP,开发者可以减少开发时间和成本,快速构建高度可靠、高性能的嵌入式系统。
FSP具有以下特点和优势:
● 灵活性和可扩展性:FSP支持瑞萨广泛的微控制器产品系列,使开发者能够选择适合其需求的合适解决方案。
● 高度集成的软件平台:FSP提供了一整套软件组件,包括设备驱动程序、操作系统抽象层和中间件,简化了系统开发流程。
● 快速上手和开发:FSP提供了丰富的示例代码、开发工具和文档,使开发者能够快速开始开发工作,并加速产品上市时间。
● 兼容性和维护性:FSP基于开放标准,并与瑞萨的先进开发工具集成,可以轻松集成第三方软件和工具,同时享受瑞萨长期的技术支持和维护。
通过FSP的图形化界面可以设置RA CANFD Lite模块的引脚和功能,使用FSP生成的函数可以执行CANFD Lite模块的初始化,发送&接收数据,这样可以加快项目完成,缩短用户开发时间。
而使用FSP如何设置RA CANFD Lite功能,将从以下几个方面进行说明:
1、添加CANFD Lite模块
在e2 studio双击工程中的configuraion.xml文件,在Stacks选项卡中,点击New Stack,选择CANFD Lite (r_canfdlite)。
![1698029560542101.png 1.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029560542101.png)
2、设置时钟
CANFD时钟默认为禁用状态。选择Clocks选项卡,将CANFDCLK设置为40MHz:
● 将PLL(锁相环)分频器改为Div / 2
● 将PLL乘法器改为Mul x16.0
● 将CANFDCLK改为Src: PLL
● 将CANFDCLK分频器改为Div /4
![1698029574872479.png 2.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029574872479.png)
3、设置引脚
选择Pins Tab,点击CANFD0,Pin Group Selection选择Mixed的情况下,Operation Mode选择Enabled,CRX0自动选择P102、CTX0自动选择P103,也可以通过右侧的下拉箭头根据用户需要选择其他可用引脚。
![1698029591717233.png 3.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029591717233.png)
4、设置CANFD Lite模块属性
切回Stacks选项卡,选择CANFD lite,转至Properties窗口(确保当前为FSP配置透视图的情况下,点击右上方:
![1698029613399483.png 4.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029613399483.png)
打开Properties窗口。
或者通过Window→Show View→Other
![1698029621685745.png 5.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029621685745.png)
搜索找到Properties窗口
![1698029630937534.png 6.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029630937534.png)
4.1 设置标称比特率(Nominal Rate)和FD数据比特率(FD Data Rate)
可以选择自动生成比特率或者手动设置比特率
请注意,如果选择自动生成比特率,“Use manual settings”一项需要设置为No。
![1698029659109209.png 7.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029659109209.png)
4.2 修改AFL数量
由于RA6E2只有Channel 0,所以需要将“Channel 1 Rule Count”一项改为0。
另外,RA6E2的CANFD Lite模块最多允许32个AFL条目。
![1698029684136195.png 8.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029684136195.png)
4.3 设置使用的TX Mailbox 0(TX MB0)
例如通过TX Mailbox 0(TX MB0)发送数据,则勾选“TX MB0”一项。
![1698029697893964.png 9.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029697893964.png)
4.4 设置发送优先级
发送优先级有可以选择CAN ID优先(Message ID)或者消息缓冲区编号优先(Buffer Number)。
![1698029706770545.png 10.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029706770545.png)
4.5 设置接收MB的数量和大小
![1698029720115966.png 11.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029720115966.png)
4.6 设置接收FIFO的中断模式、中断阈值、大小和深度
![1698029732142604.png 12.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029732142604.png)
请注意,RX MB和FIFO位于有限的RAM区域中,所以在设置RX MB和FIFO时,大小和深度的最大值取决于可用的RAM区域。从FSP v4.3.0开始,如果超出CANFD RAM区域,FSP会提示错误。
4.7 设置Callback函数名和优先级
![1698029745344805.png 13.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029745344805.png)
4.8 设置通道和全局错误中断,根据用户实际需要进行勾选
![1698029752742563.png 14.png](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029752742563.png)
5、添加AFL
RA CANFD使用AFL条目来过滤接收到的消息,AFL 的主要参数如下:
![1698029766703770.jpg 15.jpg](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029766703770.jpg)
例如想接收到以下要求的数据,那么在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, }, },};
6、CANFD相关API
![1698029820547158.jpg 16.jpg](https://cdn.eetrend.com/files/ueditor/593/upload/image/20231023/1698029820547158.jpg)
7、用户代码中添加初始化函数、发送函数、接收函数和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函数
使用FIFO接收时,需要在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为嵌入式系统开发者提供了一种快速、灵活和可靠的软件开发平台,帮助使用者快速将创意转化为端产品,并满足不同市场的需求。
来源:瑞萨嵌入式小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。