【简介】
在之前的帖子(【S32K3XX】FlexCAN RAM 资源分配整理)介绍过S32K3 的CAN IP 的RAM 资源介绍,文中有介绍过发送CAN报文要使用 CAN IP 内部的mailbox 资源,每个mailbox 映射到了IP的一段内存,该内存在IP 内部是使用 Message buffer structure 结构来配置管理收发CAN 报文,CAN 的收发是基于MB 来完成的:

对应的数据结构如下:


该 MB struct 数据管理方式采用固定的8字节的header + payload 的方式payload 的大小可支持8/16/32/64字节的模式。其中Header 的CODE 字段用于管理MB 的状态机,CPU 可以读取该信息获取当前的MB的状态信息。

本次试验我们来验证MB 作为发送资源使用时CODE 的状态管理,开始前我们先看下发送状态下MB 的状态定义如下。

基于(【S32K3XX】FlexCAN 模块配置使用) 工程的基础上Debug 查看MB的状态信息。
本地 debug 查看 Mailbox 31 的CODE 状态,在调用RTD 的 FlexCAN_Ip_Send 函数前查看对应状态为1000b 对应INACTIVE状态。

FlexCAN_Ip_Send 发送完成后断开 CAN 线 读取MB 的状态信息为1100b 发送DATA状态。

CAN 消息发送完成后改状态有重新切换为1000b INACTIVE.

我要赚赏金
