基于WinCE環(huán)境的CAN適配卡驅動(dòng)程序的設計與實(shí)現
如果CAN接收到一個(gè)報文,該報文通過(guò)驗收濾波器驗收并放入接收FIFO,則產(chǎn)生一個(gè)接收中斷。中斷服務(wù)程序接收到這個(gè)中斷后,將這個(gè)接收到的報文傳送到由驅動(dòng)程序維護的報文存儲區中,并置位命令寄存器的釋放緩存區標志RRB。CAN_Read函數并不等待來(lái)自CAN控制器的接收報文成功中斷,而是讀取保存在由驅動(dòng)程序維護的報文存儲區中的報文。CAN_Read函數的流程圖如圖4所示。
圖4 CAN_Read函數的流程圖
3.3中斷服務(wù)線(xiàn)程模塊的實(shí)現
在CAN適配卡的SJA1000控制器中,報文的發(fā)送與接受是采用中斷方式來(lái)完成的。以報文的中斷發(fā)送為例,在向CAN數據寄存器中寫(xiě)入報文并且向命令寄存器寫(xiě)入發(fā)送命令后,系統通過(guò)調用WaitForSingleObject函數將當前的發(fā)送線(xiàn)程掛起在某個(gè)事件的任務(wù)隊列中,觸發(fā)該事件將會(huì )使系統調度掛起在該事件的任務(wù)隊列中的任務(wù)繼續執行,而該事件只有在CAN控制器產(chǎn)生發(fā)送成功中斷后在中斷服務(wù)線(xiàn)程中觸發(fā)。中斷服務(wù)線(xiàn)程程序流程圖如圖5所示。
圖5 中斷服務(wù)線(xiàn)程程序流程圖
驅動(dòng)程序中的另外兩個(gè)模塊主要由CAN_Close 、CAN_IoControl函數來(lái)完成,前者主要負責在關(guān)閉CAN句柄時(shí)資源的回收任務(wù),后者主要用于設置CAN的工作參數,如波特率,報文格式等,在此不作過(guò)多介紹。
4 結束語(yǔ)
本文的CAN適配卡驅動(dòng)程序的開(kāi)發(fā)環(huán)境:上位機是普通的PC機,下位機的操作系統是WinCE,硬件是深圳藍天工控有限公司的嵌入式PC/104總線(xiàn)主板PCM3568。驅動(dòng)程序已經(jīng)過(guò)測試、驗收。CAN適配卡驅動(dòng)程序運行可靠、通信穩定。產(chǎn)品已經(jīng)被多個(gè)產(chǎn)家應用于實(shí)際的工業(yè)控制領(lǐng)域。
參考文獻
[1] 李蒙 Windows CE驅動(dòng)程序開(kāi)發(fā)[J] 計算機工程與設計,2004
[2] 徐平 WindowsCE.Net下CAN卡的驅動(dòng)程序設計[J] 單片機及嵌入式系統應用 2004-12
[3] 鄔寬明.CAN總線(xiàn)原理和應用系統設計[M]. 北京航空航天大學(xué)出版社,1996
[4] 繞運濤 現場(chǎng)總線(xiàn)CAN原理與應用技術(shù)[M] 北京航空航天大學(xué)出版社,2002
[5] 孫光武 現場(chǎng)總線(xiàn)適配器的軟硬件設計[J] 電子技術(shù)應用 1999.8
評論