摘要
本篇笔记主要记录基于恩智浦MPC5744P的CAN驱动开发和测试,接口设计,封装为BSP驱动,为之后实现CAN的高层通信打下基础。。
准备工作
安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。
安装S32DS 的SDK, 我们使用最新版3.0.3
CAN
恩智浦的MPC5744P控制器局域网络CAN,跟我们之前使用的恩智浦Kinetis KV, 等系列的flexCAN结构基本是一样的,MPC5744P不仅仅支持经典CAN,还支持CANFD。
从系统框图也可以看出,总体包含消息缓冲RAM,发送仲裁,接收匹配,和协议引擎。要正常与其他CAN设备通信,必须外接收发器。关于MPC5744P的 flexCAN模块的特性可以参考收据手册,这里不在赘述。有四种工作模式,正常模式,监听模式,回环模式,和禁止模式。CAN外设的寄存器比较多,需要多参考查阅手册。
消息缓冲区结构
恩智浦不管是ARM系列还是PA系列架构的片子, flexCAN模块的消息缓冲机制基本都是一样的。这个结构非常重要,是CAN消息数据处理的基础,SDK底层这部分的处理代码就是按照这个结构。自己实现代码也必须是按照这个结构去实现。
更多CAN详细的介绍请参考官方收据手册。
驱动实现
良好的驱动封装,可以方便应用开发,并且可以容易移植到其他项目,代码重用率高,所以数据和接口是你不得不考虑的问题,怎么样方便的实现,还要通用易用。
数据封装
首先根据MPC5744P的CAN外设结构,我们来封装数据结构体,方便后面软件实现开发,可以新建bsp_can.c和bsp_can.h, 在头文件中封装结构体定义。

在.c文件中定义封装一些变量,这些变量数组也是通用,在多款产品中都采用,大家也可以参照。

可以实现多个CAN口驱动。如果只有一个CAN口,将CAN_PORTS宏定义为1,几个就定义为几。
这个封装大家可以记着,我在多款器件上都是这么封装的,之前在NXP的KE06, KEA, KV46, K64等系列,在ST的F103, F446, H743等等CAN通信都采用这种封装BSP驱动。
初始化
参考官方的例程,根据自己的硬件去实现,做相应修改。我们一般发送接收要采用中断或者DMA实现,这里以中断方式实现,根据实际可能还需要添加滤波,配置缓冲等。

中断回调函数
最主要的就是通信传输回调函数的实现,MPC5744P的回调函数参数有事件,所以可以根据事件来判断是接收还是发送。
责任编辑:haq
-
CAN
+关注
关注
58文章
3010浏览量
471453 -
通信
+关注
关注
18文章
6316浏览量
139564 -
封装
+关注
关注
128文章
9139浏览量
147888
原文标题:用这种结构做CAN通信数据封装太爽了
文章出处:【微信号:InterruptISR,微信公众号:嵌入式程序员】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
恩智浦MCX E系列5V MCU发布
米尔诚邀您参加2025恩智浦NXP峰会
MPC5744P C55闪存驱动程序,间歇擦除怎么解决?
《恩智浦FRDM-MCXA156开发实践指南》上线啦
恩智浦智能家电创新方案一文看尽 恩智浦智能家电技术日给你答案
罗德与施瓦茨与恩智浦合作展示UWB雷达目标模拟测试系统
恩智浦为无线连接SoC开发的统一WiFi驱动程序多芯片多接口驱动(MXM)
恩智浦推出FRDM i.MX 93开发板
恩智浦发布新版MCUXpresso SDK
恩智浦宣布收购NPU厂商Kinara
恩智浦开启中国战略新篇章
恩智浦半导体6.25亿美元收购TTTech Auto
恩智浦eIQ Time Series Studio 工具使用全攻略

基于恩智浦MPC5744P的CAN驱动开发和测试
评论