一種基于ARM的嵌入式網(wǎng)關(guān)系統(tǒng)設(shè)計與實現(xiàn)
s3c2410_mcp2510_read用于將MCP2510從CAN總線上接收到接收緩沖器的數(shù)據(jù),通過SPI總線讀到用戶區(qū),并返回所讀出的字節(jié)數(shù)。
s3c2410_mcp2510_ioctl用于控制CAN總線通信的波特率、設(shè)置幀ID、設(shè)置工作模式、設(shè)置設(shè)備濾波器等工作。
s3c2410_mcp2510_release用于釋放所占用的內(nèi)存、中斷等資源。
3.2.2 CAN設(shè)備的初始化函數(shù)
CAN設(shè)備的初始化函數(shù)主要負責創(chuàng)建CAN設(shè)備的節(jié)點設(shè)備文件、注冊CAN設(shè)備的中斷處理函數(shù)、初始化MCP2510等工作。本文引用地址:http://www.ex-cimer.com/article/152398.htm
在Linux系統(tǒng)中,初始化函數(shù)從s3c2410_mcp2510_init()開始。通過調(diào)用register_chrdev向系統(tǒng)注冊字符型設(shè)備驅(qū)動程序;通過devfs_register()函數(shù)創(chuàng)建設(shè)備文件系統(tǒng)的CAN設(shè)備節(jié)點。同時,CAN設(shè)備驅(qū)動程序通過調(diào)用request_irq函數(shù)來申請中斷,向系統(tǒng)注冊CAN設(shè)備的CAN中斷處理函數(shù)s3c2410_isr_mcp2510()。在實現(xiàn)了MCP2510的各個接口函數(shù)后,還需要編寫MCP2510的模塊加載函數(shù)module_init()和模塊卸載函數(shù)module_exit(),用于向內(nèi)核注冊設(shè)備及注銷設(shè)備。
3.2.3 驅(qū)動程序的加載與使用
Linux設(shè)備驅(qū)動會以內(nèi)核模塊的形式出現(xiàn)。Eth-ernet/CAN網(wǎng)關(guān)設(shè)備驅(qū)動程序作為內(nèi)核的一部分,應(yīng)在編譯時把設(shè)備驅(qū)動程序編譯成可加載的模塊。當使用insmod命令加載內(nèi)核模塊時,模塊的加載函數(shù)mod-ule_init(初始化函數(shù)名)會自動被內(nèi)核執(zhí)行,將初始化函數(shù)加入內(nèi)核全局初始化函數(shù)列表中,在內(nèi)核初始化時執(zhí)行驅(qū)動的初始化函數(shù),從而完成驅(qū)動的初始化和注冊,之后驅(qū)動便停止等待,被應(yīng)用程序調(diào)用。當用rm-mod命令卸載某內(nèi)核模塊時,模塊的卸載函數(shù)module_exit(退出處理函數(shù)名)也會自動被內(nèi)核執(zhí)行,完成與模塊加載函數(shù)相反的功能。當驅(qū)動程序加載到內(nèi)核中后,就可將CAN設(shè)備文件進行open,read,write,release等操作。
4 結(jié)語
隨著工業(yè)控制系統(tǒng)性能的提高,以太網(wǎng)在工業(yè)上的應(yīng)用也會越來越廣泛。在此詳細介紹了一種嵌入式網(wǎng)關(guān)的設(shè)計與實現(xiàn)。作為連接以太網(wǎng)和現(xiàn)場總線的紐帶,實現(xiàn)以太網(wǎng)與CAN現(xiàn)場總線之間的協(xié)議轉(zhuǎn)換,為CAN/Ethernet的互聯(lián)提供了一種傳輸速度快、成本低,穩(wěn)定性和安全性高的解決方案。同時,利用嵌入式ARM處理器,接口資源豐富,設(shè)計通用性強,便于擴展其他現(xiàn)場總線與以太網(wǎng)的互聯(lián),具有較好的應(yīng)用推廣價值。
評論