摘要
本篇筆記主要記錄基于恩智浦MPC5744P的CAN驅動開發和測試,接口設計,封裝為BSP驅動,為之后實現CAN的高層通信打下基礎。。
準備工作
安裝S32DS for PA, 因為我們在S32DS下開發MPC5744P。
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
+關注
關注
57文章
2770瀏覽量
464389 -
通信
+關注
關注
18文章
6072瀏覽量
136431 -
封裝
+關注
關注
127文章
7997瀏覽量
143412
原文標題:用這種結構做CAN通信數據封裝太爽了
文章出處:【微信號:InterruptISR,微信公眾號:嵌入式程序員】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
恩智浦半導體6.25億美元收購TTTech Auto
恩智浦eIQ Time Series Studio 工具使用全攻略
![<b class='flag-5'>恩</b>智<b class='flag-5'>浦</b>eIQ Time Series Studio 工具使用全攻略](https://file1.elecfans.com/web3/M00/01/F7/wKgZPGdaP8GAdNVjAAAehAsyGKk659.png)
使用恩智浦無線FRDM開發板實現創新無線解決方案
![使用<b class='flag-5'>恩</b>智<b class='flag-5'>浦</b>無線FRDM<b class='flag-5'>開發</b>板實現創新無線解決方案](https://file1.elecfans.com/web3/M00/00/03/wKgZO2dFmJSAS8rLAAAQK__5NIo201.jpg)
恩智浦發布首個UWB無線BMS解決方案
恩智浦和采埃孚合作開發基于SiC的電動汽車牽引逆變器解決方案
【龍芯2K0300蜂鳥板試用】CAN接口驅動板設計、CANFD測試、CAN C++程序驅動測試
恩智浦在杭州召開汽車生態技術峰會,推出全新S32 CoreRide開放平臺
《恩智浦FRDM-MCXN947開發實踐指南》上線啦
![《<b class='flag-5'>恩</b>智<b class='flag-5'>浦</b>FRDM-MCXN947<b class='flag-5'>開發</b>實踐指南》上線啦](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
評論