CAN總線與以太網(wǎng)互連的嵌入式網(wǎng)關(guān)設(shè)計
2 通信模塊軟件設(shè)計
2.1 SJA1000(圖3)
圖3 RTL8019AS 的初始化流程圖
SJA1000驅(qū)動程序是由初始化、發(fā)送接收部分組成。
2.1.1 初始化
SJA1000在系統(tǒng)上電、硬件復(fù)位或主控制器發(fā)出復(fù)位命令后需要進行初始化,CAN初始化子程序通過對CAN控制器中相應(yīng)的寄存器寫入配置控制字來確定CAN控制器的波特率、發(fā)送通道、接收通道、標識符碼和標識符屏蔽碼等相關(guān)信息。進入初始化程序時必須初始化的寄存器有:通用控制寄存器CANGCON、位定時寄存器CANBT 143、以及15個報文對象郵箱中的報文對象控制寄存器CANc0NCH、報文對象狀態(tài)寄存器CANST CH、標識符寄存器
CANIDT1~4、標識符屏蔽寄存器CANIDMl~4和報文數(shù)據(jù)寄存器CANMSG等。要注意的是,位定時寄存器CANBTI~3僅能在復(fù)位期間訪問,因此,在對這些寄存器初始化前,必須確保系統(tǒng)進入復(fù)位狀態(tài)。
2.1.2 發(fā)送與接收
本設(shè)計采用中斷方式發(fā)送和接收數(shù)據(jù),SJA1000芯片有一個報文發(fā)送緩沖區(qū)和兩個報文接收緩沖區(qū)用于CAN報文傳送,接收子程序負責(zé)節(jié)點報文的接收,在接收中斷處理程序中,先從接收緩沖區(qū)讀取要接收的報文,然后發(fā)送一個請求信號以啟動協(xié)議轉(zhuǎn)換和發(fā)送。發(fā)送子程序負責(zé)將以太網(wǎng)傳輸過來的CAN 協(xié)議格式的數(shù)據(jù)發(fā)送到CAN 總線上,發(fā)送數(shù)據(jù)程序把數(shù)據(jù)存儲區(qū)中待發(fā)送的數(shù)據(jù)取出,組成信息幀送入發(fā)送緩沖區(qū),然后啟動發(fā)送命令。
2.2 RTL8019AS 驅(qū)動
RTL8019AS的驅(qū)動程序包含三部分:初始化、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)。
RTL8019AS的初始化主要包括設(shè)置網(wǎng)卡的物理地址、設(shè)置相關(guān)工作模式的寄存器、接收緩沖區(qū)和發(fā)送緩沖區(qū)的各自起始地址以及大小、是否開中斷等參數(shù)等,其流程圖見圖3所示。
在本設(shè)計中RTL8019AS采用查詢方式接收和發(fā)送數(shù)據(jù)包,通過判斷對應(yīng)的標志位來確定是否發(fā)送和接收新的數(shù)據(jù)包。在數(shù)據(jù)包的發(fā)送過程中,單片機只要通過遠程DMA寫操作,將待發(fā)送的數(shù)據(jù)包寫至發(fā)送緩沖區(qū),并啟動發(fā)送過程。在數(shù)據(jù)包的接收過程中,單片機只要通過遠程DMA讀操作,從接收緩沖區(qū)讀取數(shù)據(jù)即可。
3 結(jié)語
本文提出了一種低成本、高可靠性、適用于工業(yè)控制現(xiàn)場的的CAN總線與以太網(wǎng)互連網(wǎng)關(guān)的實現(xiàn)方案,該網(wǎng)關(guān)可以與工業(yè)現(xiàn)場的儀器、儀表等設(shè)備相連接在一起,使工業(yè)現(xiàn)場的設(shè)備具有網(wǎng)絡(luò)通訊的能力,大大提高了設(shè)備的性價比,從而提供生產(chǎn)效率。
評論