μC/OSII的CAN驅(qū)動程序設計

摘要: 實時性是衡量CAN現(xiàn)場總線系統(tǒng)性能的一個重要標準。本文提出一種采用μC/OSII操作系統(tǒng)和ICAN協(xié)議,在應用層面上提高CAN總線系統(tǒng)實時性的驅(qū)動程序設計方案,并以分層的方式逐層闡述CAN驅(qū)動程序的設計過程。

關(guān)鍵詞: CAN總線; μC/OSII; 實時性; 驅(qū)動程序

CAN Driver Design Based on μC/OSII※

Cheng Jin,Shi Guoliang

(College of Electronic and Information,Soochow University,Suzhou 215006,China)

Abstract: Realtime performance is an important measuring standard for the performance of CAN field bus system. A CAN driver design is proposed to improve the realtime performance of CAN bus system at the application level by using μC/OSII and ICAN protocol. The design process of CAN driver is introduced by a layered approach.

Key words: CAN bus; μC/OSII; realtime performance; driver

引言

CAN總線是德國Bosch公司于1983年針對汽車應用而開發(fā)的,一種能有效支持分布式控制和實時控制的串行通信網(wǎng)絡,屬于現(xiàn)場總線的范疇。其通信距離與波特率有關(guān),最大通信距離可達10 km,最大通信波特率可達1 Mbps。CAN總線仲裁采用11位(CAN2.0A協(xié)議)和29位(CAN2.0B協(xié)議)標志,以及非破壞性仲裁總線結(jié)構(gòu)機制,可以確定數(shù)據(jù)塊的優(yōu)先級,保證在網(wǎng)絡節(jié)點沖突時最高優(yōu)先級節(jié)點不需要沖突等待。CAN總線上的任何節(jié)點均可在任意時刻,主動向網(wǎng)絡上其他節(jié)點發(fā)送信息而不分主次,從而實現(xiàn)各節(jié)點之間的自由通信。目前,CAN總線協(xié)議已被國際標準化組織認證,技術(shù)比較成熟,已廣泛應用于汽車、工業(yè)、高速網(wǎng)絡和低價位多路連線等領(lǐng)域中。

μC/OSII是Jean J.Labrosse開發(fā)的一種小型嵌入式操作系統(tǒng)。它實質(zhì)上是基于優(yōu)先級的可剝奪型內(nèi)核,系統(tǒng)中的所有任務都有一個唯一的優(yōu)先級別,適合應用于實時性要求較強的場合。本文采用μC/OSII來設計CAN的驅(qū)動程序,以滿足系統(tǒng)的實時要求。

1 CAN節(jié)點的硬件設計

圖1 CAN節(jié)點基本結(jié)構(gòu)

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

采用NXP公司的LPC2368作為CAN節(jié)點的主控制器。LPC2368是一款基于ARM7TDMIS內(nèi)核的RISC處理器,包含2個兼容CAN2.0B規(guī)范的CAN控制器。每個CAN控制器擁有雙重接收緩沖器和三態(tài)發(fā)送緩沖器,具有快速的硬件實現(xiàn)的搜索算法,可以支持大量的CAN標識符。

LPC2368是一款3.3 V器件,雖然其對應的CAN收發(fā)器接口引腳能夠承受5 V電壓,但為了讓CAN節(jié)點能夠更穩(wěn)定地運行,這里采用TI公司的3.3 V CAN收發(fā)器SN65HVD230D與之配合使用。憑借高輸入阻抗特性,SN65HVD230D可以在一條總線上支持多達120個CAN節(jié)點,并且能夠和5 V的CAN收發(fā)器良好地兼容。本文重點介紹CAN驅(qū)動程序的設計方法。

2 CAN驅(qū)動程序設計總體思想

圖2 驅(qū)動程序分層結(jié)構(gòu)

為了使軟件可移植性強、易于維護,采用分層的方法編寫CAN驅(qū)動程序。驅(qū)動程序分層結(jié)構(gòu)如圖2所示。圖中,雙向箭頭表示實時操作系統(tǒng)μC/OSII與CAN驅(qū)動程序之間的數(shù)據(jù)交換,單向箭頭表示上層軟件對下層軟件的調(diào)用。

3 CAN設備控制層和CAN接口控制層

CAN設備控制層的主要任務是:初始化主控制器與CAN控制器之間的連接配置,復位CAN控制器,建立主控制器和CAN控制器之間的通信函數(shù)。由于LPC2368內(nèi)部集成了CAN控制器,CPU可以通過內(nèi)部APB總線接口對CAN控制器的所有寄存器進行訪問,所以不再需要編寫設備控制驅(qū)動層程序,已經(jīng)完全由硬件實現(xiàn)了。

CAN接口控制層主要任務是:實現(xiàn)CAN控制器的各種功能,如設置控制模式、發(fā)送數(shù)據(jù)、釋放接收緩沖區(qū)、配置驗收濾波器等。這些操作都是通過讀寫CAN控制器的內(nèi)部相關(guān)寄存器來實現(xiàn)的。

CAN控制器初始化程序(在應用層中實現(xiàn),內(nèi)部調(diào)用的函數(shù)也都是在該層中編寫的)如下:

voidCAN20B_Init() {

  #ifCAN1_EN > 0

  while((CAN1MOD & CAN_MOD_RM)!=1)

  CAN1_MOD_RM ();//進入復位模式

  CAN1_BTR ();//配置總線定時寄存器

  ID_RAM ();//配置驗收濾波器

  while((CAN2MOD & CAN_MOD_NM)!=1)

  CAN1_MOD_NM_SET();//進入正常模式

  CAN1_INT_EN ();//中斷使能寄存器設置

  #endif

}

為了使程序更加簡潔、可讀性更強,可以通過宏定義的形式進行編寫。例如:

#define CAN_MOD_RM () CAN1MOD |= 1

CAN1MOD是CAN控制器的模式寄存器,最低位置1可使CAN控制器進入復位模式。這種模式下,可以對控制器的所有寄存器進行寫操作。其他對CAN控制器內(nèi)部寄存器的操作可以參照LPC2368的技術(shù)手冊。

作者:成進,施國梁 蘇州大學 來源:單片機與嵌入式系統(tǒng)


微信掃描分享本文到朋友圈
掃碼關(guān)注5G通信官方公眾號,免費領(lǐng)取以下5G精品資料
  • 1、回復“YD5GAI”免費領(lǐng)取《中國移動:5G網(wǎng)絡AI應用典型場景技術(shù)解決方案白皮書
  • 2、回復“5G6G”免費領(lǐng)取《5G_6G毫米波測試技術(shù)白皮書-2022_03-21
  • 3、回復“YD6G”免費領(lǐng)取《中國移動:6G至簡無線接入網(wǎng)白皮書
  • 4、回復“LTBPS”免費領(lǐng)取《《中國聯(lián)通5G終端白皮書》
  • 5、回復“ZGDX”免費領(lǐng)取《中國電信5GNTN技術(shù)白皮書
  • 6、回復“TXSB”免費領(lǐng)取《通信設備安裝工程施工工藝圖解
  • 7、回復“YDSL”免費領(lǐng)取《中國移動算力并網(wǎng)白皮書
  • 8、回復“5GX3”免費領(lǐng)取《R1623501-g605G的系統(tǒng)架構(gòu)1
  • 本周熱點本月熱點

     

      最熱通信招聘

      最新招聘信息