<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 汽車(chē)電子 > 設計應用 > 基于A(yíng)RM920T的兩種CAN總線(xiàn)擴展方式

基于A(yíng)RM920T的兩種CAN總線(xiàn)擴展方式

作者: 時(shí)間:2012-07-10 來(lái)源:網(wǎng)絡(luò ) 收藏

1、引言

本文引用地址:http://dyxdggzs.com/article/196683.htm

隨著(zhù)工業(yè)控制系統逐步的自動(dòng)化,現代化,現場(chǎng)總線(xiàn)控制系統得到越來(lái)越多的重視和應用,總線(xiàn)是目前開(kāi)發(fā)簡(jiǎn)單,性能價(jià)格比高的一種現場(chǎng)總線(xiàn) 。相對其他現場(chǎng)總線(xiàn)而言,通信控制器的生產(chǎn)廠(chǎng)家最多、品種最全、應用也最為廣泛?;诂F場(chǎng)總線(xiàn)控制系統智能化、復雜度的提高,作為現場(chǎng)總線(xiàn)的核心部件微處理器,傳統的51芯片,甚至7已經(jīng)逐漸不能滿(mǎn)足需要,9成為合適的選擇。但許多9并沒(méi)有集成接口,擴展CAN接口成為當務(wù)之急。且ARM9將數據地址總線(xiàn)分開(kāi),而CAN控制器為數據地址總線(xiàn)復用,使得CAN的擴展不能一味照搬51處理器的方式。在CAN模塊驅動(dòng)開(kāi)發(fā)上,現有資料往往只針對Linux系統上的驅動(dòng)開(kāi)發(fā) 進(jìn)行介紹,而現場(chǎng)總線(xiàn)控制系統對實(shí)時(shí)性的要求使得Linux系統要讓位于更多的實(shí)時(shí)操作系統。

本文介紹了一種基于A(yíng)RMT現場(chǎng)總線(xiàn)的控制系統,詳細說(shuō)明了其上擴展CAN總線(xiàn)的兩種方式,并給出具體的CAN模塊在實(shí)時(shí)操作系統eCos 上驅動(dòng)程序開(kāi)發(fā)的步驟,最后對兩種擴展進(jìn)行了簡(jiǎn)要的比較。

2、現場(chǎng)總線(xiàn)控制系統簡(jiǎn)介

該現場(chǎng)總線(xiàn)控制系統采用EP9315為核心處理器。EP9315是Cirrus Logic公司開(kāi)發(fā)的一款基于A(yíng)RMT的工業(yè)級處理器。該現場(chǎng)總線(xiàn)控制系統除了外擴的CAN總線(xiàn)接口、還外擴64Mb SDRAM和32MB FLASH、并帶有PCMCIA 接口、E PROM接口、512kb SRAM、IDE接口、實(shí)時(shí)時(shí)鐘、視頻顯示、彩色VGA TFT LCD觸摸屏、支持模擬VGA連接、視頻解碼支持壓縮視頻輸出和S-VIDEO輸出、PS/2鍵盤(pán),三個(gè)USB接口、三個(gè)串行接口、音頻接口、1/10/100Mbps以太網(wǎng)接口、紅外線(xiàn)接收口;實(shí)現了控制系統的數字化、智能化;可實(shí)現多種功能,使系統的控制功能本地化,提高了系統的可靠性、實(shí)時(shí)性;簡(jiǎn)化了系統的結構。多接口的系統結構使系統的擴展,變更,拆裝更加靈活便利。

3、硬件系統擴展

3.1 CAN總線(xiàn)模塊結構

本文使用SJA1000T作為CAN控制器擴展CAN模塊 。SJA1000T是使用于汽車(chē)和一般工業(yè)環(huán)境的獨立CAN總線(xiàn)控制器,具有完成CAN高性能通信協(xié)議所要求的全部必要特性;具有簡(jiǎn)單總線(xiàn)連接的SJA1000T可完成物理層和數據鏈路層的所有功能。支持CAN2.0協(xié)議。

CAN總線(xiàn)收發(fā)器TJA1040T是CAN控制器和物理總線(xiàn)之間的接口芯片,增強了總線(xiàn)的驅動(dòng)能力,從而增加CAN總線(xiàn)的通信距離并使得一條總線(xiàn)上可以?huà)旄嗟墓濣c(diǎn)。

為增強CAN總線(xiàn)節點(diǎn)的抗干擾能力 ,SJA1000T的TXO和RXO并不直接與TJA1040的TXD和RXD相連,而是通過(guò)兩片光耦隔離芯片6N137與TJA1040T相連。很好地實(shí)現了收發(fā)器與控制器之間的電氣隔離,保護智能節點(diǎn)核心電路安全工作;并實(shí)現了總線(xiàn)上各CAN節點(diǎn)間的電氣隔離。需要強調的是:為實(shí)現這種電氣隔離,光耦器件兩側的直流電源必須是兩個(gè)無(wú)直接電氣聯(lián)系、相互隔離的直流電源。因而采用兩路DC-DC隔離電源實(shí)現。為進(jìn)一步加強安全性和抗干擾能力,可在總線(xiàn)收發(fā)器TJA1040T與CAN總線(xiàn)間串接限流電阻,避免TJA1040T受過(guò)流沖擊。同時(shí),在CANH和CANL,與地之間并聯(lián)了濾波電容,可以起到濾除總線(xiàn)上的高頻干擾,并具備一定的防電磁輻射能力。此外,通信信號在線(xiàn)路上傳輸時(shí),信號傳輸到導線(xiàn)的端點(diǎn)時(shí)會(huì )發(fā)生反射,反射信號會(huì )干擾正常信號的傳輸。為消除這種影響,可在CAN總線(xiàn)兩端并接匹配電阻,起到匹配總線(xiàn)阻抗和消除反射的雙重作用。若忽略這些措施,會(huì )使數據通信的抗干擾性和可靠性大大降低,甚至無(wú)法通信。

11.jpg

3.2 CAN模塊與ARM9的兩種連接方式

SJA1000T數據地址總線(xiàn)復用,而整個(gè)ARM9系列包括ARMT數據和地址總線(xiàn)分開(kāi)。這就使得它與ARM9系列的連接不能像傳統的用于51單片機系列方式擴展連接,本文給出兩種擴展方式 :全部IO口連接方式和最少I(mǎi)O口的數據信號線(xiàn)連接方式。

3.2.1 IO接口連接

微處理器的通用IO口可以提供一個(gè)簡(jiǎn)便的方法來(lái)控制SJA100T。EP9315的GPIO信號提供了很大的靈活度來(lái)滿(mǎn)足SJA1000T時(shí)間上的要求。將SJA1000T數據地址復用總線(xiàn)全部與EP9315的通用IO接口連接。其它信號線(xiàn)WR、RD、ALE……也與IO接口連接。具體連接方式參考圖2。

22.jpg

3.2.2 數據信號線(xiàn)連接

除了全部由IO端口來(lái)控制CAN模塊,還可利用ARM9的數據線(xiàn)和信號線(xiàn)來(lái)實(shí)現CAN模塊的擴展。連接電路如圖3所示,凡SJA1000T以外的信號均為EP9315芯片上的信號管腳,SJA1000T數據地址復用總線(xiàn)與EP9315數據線(xiàn)相連,GPIOx、GPIOy、GPIOz可以是EP9315任意GPIO引腳,但選擇同一個(gè)通道的GPIO口將使編程更容易。注意SJA100T的INT可以連接CPU的INT也可以連接到帶有中斷的通用IO上。在EP9315中,GPIO的通道A,B,F有中斷功能。

33.jpg

圖2和圖3是示意圖,具體的由于EP9315信號高電平為3.3V,而SJA1000T高電平為5V,故需要通過(guò)74LVC245這類(lèi)電平匹配芯片進(jìn)行電平匹配后再連接。

4、驅動(dòng)開(kāi)發(fā)

由于現場(chǎng)總線(xiàn)控制系統在許多場(chǎng)合具有實(shí)時(shí)性的要求,本現場(chǎng)總線(xiàn)控制系統采用實(shí)時(shí)性高的eCos作為操作系統,CAN驅動(dòng)程序也在eCos操作系統 上進(jìn)行擴展。

對eCos系統的設備驅動(dòng)程序的設計主要圍繞著(zhù)DEVTAB_ENTRY和DEVIO_TAB進(jìn)行,添加新設備的工作就是對這兩個(gè)表項的各個(gè)域進(jìn)行實(shí)現,并且編寫(xiě)與硬件相關(guān)的底層函數。通過(guò)對驅動(dòng)程序結構層次的剖析,CAN總線(xiàn)驅動(dòng)的開(kāi)發(fā)分為四步:

第一步:向內核注冊新設備;

第二步:開(kāi)發(fā)驅動(dòng)程序基本IO函數;

第三步:實(shí)現中斷處理函數;

第四步:綁定設備中斷并進(jìn)行驗證。

具體實(shí)現過(guò)程如下:

4.1 向內核注冊新設備

在向內核注冊新設備時(shí),原有的驅動(dòng)程序中和硬件無(wú)關(guān)的部分仍然可以使用,例如設備I/O函數表,硬件相關(guān)的部分需要自行設計,包括設備描述符、設備名、設備初始化程序init、查找程序lookup和拓展CAN總線(xiàn)的數據結構。

拓展CAN總線(xiàn)的數據結構Can_bus時(shí)一組用于描述對設備進(jìn)行的全部操作的數據結構。通過(guò)宏Can_bus產(chǎn)生can總線(xiàn)的數據結構,宏Can_bus的原型為:

Can_bus(1,funs,modereg,intrenreg,bustime,outpctr,clkdiv,acptcode,acptmask,flag)

參數說(shuō)明如下:

l-該數據結構的語(yǔ)言標識符

funs接口函數組,即硬件接口函數。

flags驅動(dòng)程序初始表示值。

modereg工作模式初始值

intrenreg中斷允許初始值

bustime總線(xiàn)時(shí)鐘1,和總線(xiàn)時(shí)鐘2初始值

outpctr輸出控制

clkdiv分時(shí)

acptcode驗收代碼

acptmask驗收屏蔽

在產(chǎn)生CAN總線(xiàn)的設備表入口時(shí)首先要創(chuàng )建can總線(xiàn)的數據對象Can_bus,并且初始化以上所有參數。拓展CAN總線(xiàn)的Can_bus數據對象標識符為EP9315_can_bus。

拓展CAN總線(xiàn)的設備表入口對象實(shí)現如下:

DEVTAB_ENTRY(EP9315_can_io0,

CYGDAT_IO_CAN_EP9315_CAN0_NAME,

0,

cyg_io_can_devio,

EP9315_can_init, //拓展CAN的初始化函數

EP9315_can_lookup, //拓展CAN的查找函數

EP9315_can_bus //CAN數據結構Can_bus

);

4.2 開(kāi)發(fā)驅動(dòng)程序基本IO函數

這部分函數指的是驅動(dòng)程序接口函數中與硬件相關(guān)的部分,也就是Can_bus數據結構中的funs接口函數表。funs函數表通過(guò)以下宏進(jìn)行定義:

CAN_FUNS(l,putc,getc,set_config,start_xmit,stop_xmit)

參數說(shuō)明如下:

l是該funs函數表的C語(yǔ)言標實(shí)符。

putc函數:bool (*putc)(can_bus *priv,unsigned char c)該函數發(fā)送一個(gè)字符到串口。如果發(fā)送成功,則返回true,否則返回false。

getc函數:unsigned char (*getc)(can_bus *priv)該函數從設備接口讀取一個(gè)字符,它只用于非中斷方式,通過(guò)查詢(xún)設備是否處于準備(ready)狀態(tài)來(lái)等待一個(gè)字符。

set_config函數:bool (*set_config)(can_bus *priv,cyg_can_info_t *config)該函數用于對指定的端口配置。如果對硬件配置成功,則返回true;如果端口不支持給定的配置參數,則返回false。

start_xmit函數:void (*start_xmit)can_bus *priv)在中斷方式下,該函數使能發(fā)送端,允許發(fā)送中斷的產(chǎn)生。

stop_xmit函數:void (*stop_xmit)(can_bus *priv)在中斷方式下,當數據發(fā)送結束后,該函數進(jìn)制發(fā)送端,進(jìn)制發(fā)送中斷產(chǎn)生。

start_recv函數:void (*stop_xmit)(can_bus *priv)

stop_recv函數:void (*stop_xmit)(can_bus *priv)

4.3 發(fā)送中斷處理函數

CAN總線(xiàn)在中斷方式下的負責對中斷進(jìn)行處理函數是中斷服務(wù)程序ISR和中斷滯后服務(wù)程序DSR。對中斷的處理主要有三種模式,第一種模式是在中斷服務(wù)程序ISR內完成所有設備處理工作,第二種是在中斷滯后服務(wù)程序DSR內實(shí)現,第三中是將對設備的處理推遲到中斷線(xiàn)程內進(jìn)行。在驅動(dòng)程序的設計中采用的是第二種模式。

在這種模式中,中斷處理程序ISR只是簡(jiǎn)單的通過(guò)對設備進(jìn)行編程或者直接調用cyg_drv_interrupt_mask()函數防止新中斷的產(chǎn)生,然后將調用DSR作進(jìn)一步的處理。DSR完成大部分的硬件處理工作,并有可能對某個(gè)條件變量產(chǎn)生一個(gè)信號來(lái)喚醒新的中斷。最后,DSR調用cyg_drv_interrupt_unmask(),重新使能中斷。中斷處理過(guò)程如圖所示:

44.jpg

4.4 綁定設備中斷

設備驅動(dòng)程序的初始化函數在系統初始化過(guò)程或者設備初始使用時(shí)被調用,初始化函數不僅要設置設備的參數,還要為設備分配相應的數據結構:例如輸入輸出緩沖區等,最后還將設備中斷進(jìn)行綁定。

每一個(gè)設備在初始化時(shí)會(huì )產(chǎn)生一個(gè)對應的中斷對象,所有的中斷對象存儲在系統的中斷向量鏈表中。當某個(gè)中斷發(fā)生時(shí),系統根據中斷碼到中斷向量鏈表中尋找相應的中斷對象,再跳轉到中斷對象記錄的中斷處理程序的位置執行。

宏cyg_drv_interrupt_create(vector,priority,data,isr,dsr,handle,intr)用于產(chǎn)生設備的中斷對象。其中,vector是中斷向量,priority中斷優(yōu)先級,data是數據指針,isr是中斷處理程序ISR的地址,dsr是中斷滯后處理程序DSR的地址,handle是返回句柄,intr是中斷對象存放的位置。

宏cyg_drv_interrupt_attach(interrupt)用于將中斷向量加入到中斷向量鏈表。參數interrupt是將要連接的中斷的句柄。

設備中斷綁定后,當設備產(chǎn)生中斷時(shí)系統會(huì )找到相應的中斷向量,然后把控制權交給中斷處理程序,進(jìn)行中斷的處理。

5、兩種擴展方式比較

對于兩種不同的CAN與ARM9連接方式,IO口連接直觀(guān)簡(jiǎn)單;而利用數據信號線(xiàn)連接能節省IO口,給CPU更多開(kāi)發(fā)空間。兩者在驅動(dòng)程序上差異不大,主要體現在底層數據讀寫(xiě)時(shí)序實(shí)現上。前者簡(jiǎn)單易于編寫(xiě)和理解,后者只是在對時(shí)序的理解上略有難度,并不會(huì )使代碼更加冗長(cháng)。

6、結束語(yǔ)

本文通過(guò)在現場(chǎng)總線(xiàn)控制系統上擴展CAN總線(xiàn)模塊,詳細講解了如何在A(yíng)RM9上擴展CAN總線(xiàn)模塊,給出了全IO口擴展和利用數據信號線(xiàn)擴展兩種方式;并詳細說(shuō)明如何在高實(shí)時(shí)性操作系統eCos上開(kāi)發(fā)CAN驅動(dòng)程序;最后對兩種擴展方式做了簡(jiǎn)單的比較。該現場(chǎng)總線(xiàn)控制系統在國家十一五某國防項目中得到了很好的應用。同時(shí)也為大中型國有企業(yè)自動(dòng)化生產(chǎn)線(xiàn)的建設和改造,電力系統自動(dòng)化的實(shí)現提供很好的借鑒。

參考文獻

[1] 史久根等. CAN現場(chǎng)總線(xiàn)系統設計技術(shù)[M]. 北京:國防工業(yè)出版社,2004.

[2] 鄔寬明. CAN總線(xiàn)原理和應用系統設計[M]. 北京:北京航空航天大學(xué)出版社,1995.

[3] 王京起等. 嵌入是可配置實(shí)時(shí)操作系統eCos技術(shù)及實(shí)現機制[M] . 北京:電子工業(yè)出版社,2005.

[4] 張紹忠,王輝. 基于SJA1000的CAN總線(xiàn)智能節點(diǎn)實(shí)現[J].電子技術(shù)應用,2006(8):22-25.

[5] 王松月,楊福興. 基于A(yíng)RM920T嵌人式通信控制系統設備驅動(dòng)開(kāi)發(fā)[J].電力自動(dòng)化設備, 2006.26(6):75-78.WANG Song-yue, YANG Fu-xing,Driver development for embedded communication control system based on ARM920T[J]. Electric power Automation Equipment,2006,26(6):75-78.

[6] Freund L, Dupont D, Israel M, Rousseau F. Overview of the ECOS project[J]. Rapid System Prototyping, 1997’Shortening the Path from Specification to Prototype’. Proceedings, 8th IEEE International Workshop on 24-26, 1997.6:39-43.

[7] Anthony J. Massa. Embedded Software Development with eCos[J]. PRENTICE HALL, Publishing as Prentice Hall Professional Technical Reference, 2003, 7-10, 315-322.

[8] How to Connect NAND Flash Memory to an EP93xx[J]. http://www.cirrus.com. 2005.2.



關(guān)鍵詞: 920T ARM 920 CAN

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>