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