摘要
本篇筆記主要記錄基于恩智浦MPC5744P的CAN驅(qū)動開發(fā)和測試,接口設(shè)計(jì),封裝為BSP驅(qū)動,為之后實(shí)現(xiàn)CAN的高層通信打下基礎(chǔ)。。
準(zhǔn)備工作
安裝S32DS for PA, 因?yàn)槲覀冊赟32DS下開發(fā)MPC5744P。
安裝S32DS 的SDK, 我們使用最新版3.0.3
CAN
恩智浦的MPC5744P控制器局域網(wǎng)絡(luò)CAN,跟我們之前使用的恩智浦Kinetis KV, 等系列的flexCAN結(jié)構(gòu)基本是一樣的,MPC5744P不僅僅支持經(jīng)典CAN,還支持CANFD。
從系統(tǒng)框圖也可以看出,總體包含消息緩沖RAM,發(fā)送仲裁,接收匹配,和協(xié)議引擎。要正常與其他CAN設(shè)備通信,必須外接收發(fā)器。關(guān)于MPC5744P的 flexCAN模塊的特性可以參考收據(jù)手冊,這里不在贅述。有四種工作模式,正常模式,監(jiān)聽模式,回環(huán)模式,和禁止模式。CAN外設(shè)的寄存器比較多,需要多參考查閱手冊。
消息緩沖區(qū)結(jié)構(gòu)
恩智浦不管是ARM系列還是PA系列架構(gòu)的片子, flexCAN模塊的消息緩沖機(jī)制基本都是一樣的。這個(gè)結(jié)構(gòu)非常重要,是CAN消息數(shù)據(jù)處理的基礎(chǔ),SDK底層這部分的處理代碼就是按照這個(gè)結(jié)構(gòu)。自己實(shí)現(xiàn)代碼也必須是按照這個(gè)結(jié)構(gòu)去實(shí)現(xiàn)。
更多CAN詳細(xì)的介紹請參考官方收據(jù)手冊。
驅(qū)動實(shí)現(xiàn)
良好的驅(qū)動封裝,可以方便應(yīng)用開發(fā),并且可以容易移植到其他項(xiàng)目,代碼重用率高,所以數(shù)據(jù)和接口是你不得不考慮的問題,怎么樣方便的實(shí)現(xiàn),還要通用易用。
數(shù)據(jù)封裝
首先根據(jù)MPC5744P的CAN外設(shè)結(jié)構(gòu),我們來封裝數(shù)據(jù)結(jié)構(gòu)體,方便后面軟件實(shí)現(xiàn)開發(fā),可以新建bsp_can.c和bsp_can.h, 在頭文件中封裝結(jié)構(gòu)體定義。
在.c文件中定義封裝一些變量,這些變量數(shù)組也是通用,在多款產(chǎn)品中都采用,大家也可以參照。
可以實(shí)現(xiàn)多個(gè)CAN口驅(qū)動。如果只有一個(gè)CAN口,將CAN_PORTS宏定義為1,幾個(gè)就定義為幾。
這個(gè)封裝大家可以記著,我在多款器件上都是這么封裝的,之前在NXP的KE06, KEA, KV46, K64等系列,在ST的F103, F446, H743等等CAN通信都采用這種封裝BSP驅(qū)動。
初始化
參考官方的例程,根據(jù)自己的硬件去實(shí)現(xiàn),做相應(yīng)修改。我們一般發(fā)送接收要采用中斷或者DMA實(shí)現(xiàn),這里以中斷方式實(shí)現(xiàn),根據(jù)實(shí)際可能還需要添加濾波,配置緩沖等。
中斷回調(diào)函數(shù)
最主要的就是通信傳輸回調(diào)函數(shù)的實(shí)現(xiàn),MPC5744P的回調(diào)函數(shù)參數(shù)有事件,所以可以根據(jù)事件來判斷是接收還是發(fā)送。
責(zé)任編輯:haq
-
CAN
+關(guān)注
關(guān)注
57文章
2828瀏覽量
466151 -
通信
+關(guān)注
關(guān)注
18文章
6140瀏覽量
137132 -
封裝
+關(guān)注
關(guān)注
128文章
8354瀏覽量
144392
原文標(biāo)題:用這種結(jié)構(gòu)做CAN通信數(shù)據(jù)封裝太爽了
文章出處:【微信號:InterruptISR,微信公眾號:嵌入式程序員】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
MPC5744P C55閃存驅(qū)動程序,間歇擦除怎么解決?
《恩智浦FRDM-MCXA156開發(fā)實(shí)踐指南》上線啦

恩智浦智能家電創(chuàng)新方案一文看盡 恩智浦智能家電技術(shù)日給你答案

羅德與施瓦茨與恩智浦合作展示UWB雷達(dá)目標(biāo)模擬測試系統(tǒng)
恩智浦為無線連接SoC開發(fā)的統(tǒng)一WiFi驅(qū)動程序多芯片多接口驅(qū)動(MXM)

恩智浦宣布收購NPU廠商Kinara
恩智浦開啟中國戰(zhàn)略新篇章
恩智浦半導(dǎo)體6.25億美元收購TTTech Auto
使用恩智浦無線FRDM開發(fā)板實(shí)現(xiàn)創(chuàng)新無線解決方案

恩智浦發(fā)布首個(gè)UWB無線BMS解決方案
基于恩智浦MCX N系列MCU的應(yīng)用示例
恩智浦和采埃孚合作開發(fā)基于SiC的電動汽車牽引逆變器解決方案
【龍芯2K0300蜂鳥板試用】CAN接口驅(qū)動板設(shè)計(jì)、CANFD測試、CAN C++程序驅(qū)動測試
恩智浦在杭州召開汽車生態(tài)技術(shù)峰會,推出全新S32 CoreRide開放平臺
《恩智浦FRDM-MCXN947開發(fā)實(shí)踐指南》上線啦

評論