<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > μC/OS-II的CAN驅動(dòng)程序設計

μC/OS-II的CAN驅動(dòng)程序設計

作者: 時(shí)間:2010-09-26 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:實(shí)時(shí)性是衡量現場(chǎng)總線(xiàn)系統性能的一個(gè)重要標準。本文提出一種采用μC/操作系統和I-協(xié)議,在應用層面上提高總線(xiàn)系統實(shí)時(shí)性的方案,并以分層的方式逐層闡述CAN程序的設計過(guò)程。
關(guān)鍵詞:CAN總線(xiàn);μC/;實(shí)時(shí)性;程序

本文引用地址:http://dyxdggzs.com/article/197619.htm

引言
CAN總線(xiàn)是德國B(niǎo)osch公司于1983年針對汽車(chē)應用而開(kāi)發(fā)的,一種能有效支持分布式控制和實(shí)時(shí)控制的串行通信網(wǎng)絡(luò ),屬于現場(chǎng)總線(xiàn)的范疇。其通信距離與波特率有關(guān),最大通信距離可達10 km,最大通信波特率可達1 Mbps。CAN總線(xiàn)仲裁采用1l位(CAN2.OA協(xié)議)和29位(CAN 2.OB協(xié)議)標志,以及非破壞性仲裁總線(xiàn)結構機制,可以確定數據塊的優(yōu)先級,保證在網(wǎng)絡(luò )節點(diǎn)沖突時(shí)最高優(yōu)先級節點(diǎn)不需要沖突等待。CAN總線(xiàn)上的任何節點(diǎn)均可在任意時(shí)刻,主動(dòng)向網(wǎng)絡(luò )上其他節點(diǎn)發(fā)送信息而不分主次,從而實(shí)現各節點(diǎn)之間的自由通信。目前,CAN總線(xiàn)協(xié)議已被國際標準化組織認證,技術(shù)比較成熟,已廣泛應用于汽車(chē)、工業(yè)、高速網(wǎng)絡(luò )和低價(jià)位多路連線(xiàn)等領(lǐng)域中。
μC/是Jean J.Labrosse開(kāi)發(fā)的一種小型嵌入式操作系統。它實(shí)質(zhì)上是基于優(yōu)先級的可剝奪型內核,系統中的所有任務(wù)都有一個(gè)唯一的優(yōu)先級別,適合應用于實(shí)時(shí)性要求較強的場(chǎng)合。本文采用μC/OS-II來(lái)設計CAN的驅動(dòng)程序,以滿(mǎn)足系統的實(shí)時(shí)要求。

1 CAN節點(diǎn)的硬件設計
CAN節點(diǎn)是分布在CAN網(wǎng)絡(luò )中進(jìn)行相互通信的基本單元,主要由主控制器、CAN控制器和CAN收發(fā)器組成。本設計中,節點(diǎn)的基本結構如圖1所示。在CAN網(wǎng)絡(luò )中,ECU(Electronic Control Unit)是指一個(gè)具有完整功能的CAN節點(diǎn)。

5a.jpg


采用NXP公司的LPC2368作為CAN節點(diǎn)的主控制器。LPC2368是一款基于A(yíng)RM7TDMI-S內核的RISC處理器,包含2個(gè)兼容CAN2.0B規范的CAN控制器。每個(gè)CAN控制器擁有雙重接收緩沖器和三態(tài)發(fā)送緩沖器,具有快速的硬件實(shí)現的搜索算法,可以支持大量的CAN標識符。
LPC2368是一款3.3 V器件,雖然其對應的CAN收發(fā)器接口引腳能夠承受5 V電壓,但為了讓CAN節點(diǎn)能夠更穩定地運行,這里采用TI公司的3.3 V CAN收發(fā)器SN65HVD230D與之配合使用。憑借高輸入阻抗特性,SN65HVD230D可以在一條總線(xiàn)上支持多達120個(gè)CAN節點(diǎn),并且能夠和5V的CAN收發(fā)器良好地兼容。本文重點(diǎn)介紹CAN驅動(dòng)程序的設計方法。

2 CAN驅動(dòng)總體思想
為了使軟件可移植性強、易于維護,采用分層的方法編寫(xiě)CAN驅動(dòng)程序。驅動(dòng)程序分層結構如圖2所示。圖中,雙向箭頭表示實(shí)時(shí)操作系統μC/OS-II與CAN驅動(dòng)程序之間的數據交換,單向箭頭表示上層軟件對下層軟件的調用。

5b.jpg

3 CAN設備控制層和CAN接口控制層
CAN設備控制層的主要任務(wù)是:初始化主控制器與CAN控制器之間的連接配置,復位CAN控制器,建立主控制器和CAN控制器之間的通信函數。由于LPC2368內部集成了CAN控制器,CPU可以通過(guò)內部APB總線(xiàn)接口對CAN控制器的所有寄存器進(jìn)行訪(fǎng)問(wèn),所以不再需要編寫(xiě)設備控制驅動(dòng)層程序,已經(jīng)完全由硬件實(shí)現了。
CAN接口控制層主要任務(wù)是:實(shí)現CAN控制器的各種功能,如設置控制模式、發(fā)送數據、釋放接收緩沖區、配置驗收濾波器等。這些操作都是通過(guò)讀寫(xiě)CAN控制器的內部相關(guān)寄存器來(lái)實(shí)現的。
CAN控制器初始化程序(在應用層中實(shí)現,內部調用的函數也都是在該層中編寫(xiě)的)如下:

5c.jpg

為了使程序更加簡(jiǎn)潔、可讀性更強,可以通過(guò)宏定義的形式進(jìn)行編寫(xiě)。例如:
#define CAN_MOD_RM()CANlMOD |=1
CANlMOD是CAN控制器的模式寄存器,最低位置1可使CAN控制器進(jìn)入復位模式。這種模式下,可以對控制器的所有寄存器進(jìn)行寫(xiě)操作。其他對CAN控制器內部寄存器的操作可以參照LPC2368的技術(shù)手冊。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: OS-II CAN 驅動(dòng) 程序設計

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>