基于CAN總線(xiàn)的嵌入式車(chē)燈監控系統設計
3.1.1 CAN節點(diǎn)初始化
系統的主要任務(wù)是實(shí)現上位機與下位機之間的通訊,將下位機節點(diǎn)采集到的電壓電流參數上傳至上位機并顯示給用戶(hù),實(shí)時(shí)反映車(chē)燈的工作狀況。因此CAN通訊任務(wù)具有最高級別的優(yōu)先級。在任務(wù)taskican中,首先完成CAN節點(diǎn)的初始化,包括端口初始化、設定波特率、設置驗收濾波等,初始化通過(guò)調用Stellaris外設驅動(dòng)庫中的相應函數來(lái)完成。函數SysCtlPeripheralEnable()和GPIOPinTvpeCAN()可完成CAN模塊外設的端口初始化,CANSetBitTiming()可以設定波特率,本設計中的通訊波特率設定為1 MB/s,并且總線(xiàn)上的節點(diǎn)都設置成相同的波特率,canAcceptFilterSet()可完成驗收濾波設置。完成CAN節點(diǎn)的初始化之后,在任務(wù)taskican中每10 ms調用一次iCAN調度函數ICAN_Sche dul(),完成一次數據收發(fā)工作,同時(shí)將下位機節點(diǎn)采集的電壓電流值上傳至上位機并刷新顯示。
3.1.2 基于iCAN協(xié)議的消息處理
iCAN協(xié)議,即工業(yè)CAN-bus應用層協(xié)議。是由我國自主研發(fā)的基于CAN總線(xiàn)的高層應用協(xié)議,詳細的定義了CAN報文中ID以及數據的分配和應用,建立了一個(gè)統一的設備模型,定義了設備的I/O資源和訪(fǎng)問(wèn)規則,采用“基于連接,面向節點(diǎn)”的通訊方式,既支持主從方式通訊模式,又支持事件觸發(fā)通訊模式。系統中,上位機主節點(diǎn)的ID為0x01,下位機各節點(diǎn)的ID可以根據具體情況設定,范圍為0x00-0x3F。
節點(diǎn)中,數據的發(fā)送和接收是由微處理器集成的CAN控制器自動(dòng)完成。為滿(mǎn)足實(shí)時(shí)性的要求,數據的接收操作采用中斷方式。由于下位機節點(diǎn)數量較多,數據的發(fā)送接收量比較大,為了保證不丟失數據,這里設計了兩個(gè)深度為40字節的CAN報文緩沖區,分別用作發(fā)送和接收緩存。對緩沖區的操作,由函數canCirBufRead和函數canCirBufWrite來(lái)完成。而對于CAN消息的發(fā)送和接收由函數ICANTxMsgObjSend、canFr ameSend和ICANRxMsgObjExplain來(lái)完成。
CAN消息的發(fā)送接收流程圖如圖5所示。數據的發(fā)送調用函數ICANTxMsgObiSend,其中先按照iCAN協(xié)議規定的格式填寫(xiě)報文的ID和數據段,然后查詢(xún)緩沖區的狀態(tài),如果發(fā)送緩沖區未滿(mǎn),則調用canCirBufWrite將整合后的數據寫(xiě)入發(fā)送緩沖區,最后調用函數canFrameSend將數據發(fā)送到CAN總線(xiàn)上。本文引用地址:http://dyxdggzs.com/article/148494.htm
接收采用中斷方式,當有中斷產(chǎn)生,即收到一幀數據,此時(shí)首先查詢(xún)接收緩沖區的狀態(tài),如果未滿(mǎn),則調用函數canCirBufWrite將接收到的數據寫(xiě)入接收緩沖區。
評論