摘 要: 在工業(yè)生產(chǎn)中,產(chǎn)品了獲得工業(yè)設(shè)備信息,需要實(shí)時(shí)與計(jì)算機(jī)進(jìn)行通信。工業(yè)設(shè)備獲取傳感器的信息,需要RS 485,SPI,CAN等接口實(shí)時(shí)與傳感器設(shè)備通信。當(dāng)二者同時(shí)時(shí),微控制器產(chǎn)生中斷沖突,造成設(shè)備數(shù)據(jù)丟失或控制計(jì)算機(jī)的通信死機(jī)。為了保證產(chǎn)品的穩(wěn)定性,提出了一種基于雙微控制器,并同時(shí)利用異步FIFO實(shí)現(xiàn)雙向通信的速度匹配和數(shù)據(jù)交換。實(shí)驗(yàn)證明該方法有效地解決雙向?qū)崟r(shí)通信產(chǎn)生的通信的中斷沖突,保證工業(yè)設(shè)備的穩(wěn)定性和數(shù)據(jù)通信的準(zhǔn)確。
關(guān)鍵詞: 雙微控制器; 異步FIFO; 雙向?qū)崟r(shí)通信; 中斷沖突
中圖分類(lèi)號(hào): TN911?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2013)14?0048?03
Solution for two?way conflict in real?time communication
HOU Dan, HE Xin
(Beijing Institute of Space Mechanics Electricity, Beijing 100190,China)
Abstract: In the industry production, the real?time communication with computer is needed to get the information of the production equipment, and RS 485, SPI and CAN ports are needed for real?time communicate with sensor equipment to get the information from sensors. When the two?way communication appears at the same time, the microprocessor generates interruption conflict. This may cause data loss or computer die. In order to guarantee the product quality, a method based on dual microprocessor is put forward, in which the asynchronous FIFO is used to realize the rate matching and the data exchanging of two?way communication. The experiment proved that the method can eliminate the interruption conflict in the two?way real?time communication effectively, and ensure the stability of industry production and veracity of data communication.
Keyords: dual microprocessor; asynchronous FIFO; two?way real?time communication; interruption conflict
0 引 言
隨著工業(yè)生產(chǎn)的發(fā)展,信息處理及故障分析技術(shù)的快速發(fā)展,工業(yè)產(chǎn)品的功能越來(lái)越豐富。以通信測(cè)試設(shè)備為例,通信測(cè)試設(shè)備既要滿足通信接口數(shù)據(jù)的實(shí)時(shí)接收,又要滿足將采集到的數(shù)據(jù)進(jìn)行分析傳輸?shù)接?jì)算機(jī)進(jìn)行分析[1?4]。隨著傳輸數(shù)據(jù)量的增大和傳輸速度的快速提升,當(dāng)兩路通信同時(shí)傳輸?shù)皆O(shè)備時(shí),雖然微控制器的性能已經(jīng)大大提升,但如果優(yōu)先級(jí)高的傳輸時(shí)間長(zhǎng)于優(yōu)先級(jí)低的傳輸時(shí)間,低優(yōu)先級(jí)通信在實(shí)時(shí)傳輸數(shù)據(jù)時(shí),會(huì)造成低優(yōu)先級(jí)總線傳輸數(shù)據(jù)的丟失現(xiàn)象的出現(xiàn)[5?8]。為了保證設(shè)備的傳輸性能和傳輸?shù)姆€(wěn)定性,避免設(shè)備出現(xiàn)以上相應(yīng)的錯(cuò)誤,本文提出了一種采用雙微處理器作為主要設(shè)備核心處理器,利用異步FIFO作兩片處理器的通信緩沖空間的方法,解決多路實(shí)時(shí)通信產(chǎn)生的中斷沖突的問(wèn)題。下面就從沖突產(chǎn)生原理、解決方案、方案的硬件平臺(tái)和軟件算法來(lái)介紹,經(jīng)過(guò)大量的實(shí)驗(yàn)數(shù)據(jù)分析,該解決方法可靠,可行。
1 實(shí)時(shí)通信沖突產(chǎn)生原理
在傳統(tǒng)的處理雙向通信的設(shè)備中,采用一片微控制器作為處理器的核心,在微控制器內(nèi)部RAM開(kāi)辟FIFO緩沖區(qū),多路通信原理框圖如圖1所示。
圖1 傳統(tǒng)雙向通信原理框圖
在無(wú)沖突的通信條件下,微控制器接收通信接口2采集到的數(shù)據(jù),并將數(shù)據(jù)放置到內(nèi)部的FIFO中,當(dāng)控制計(jì)算機(jī)利用通信接口1向微控制器要求傳遞數(shù)據(jù)時(shí),微控制器將FIFO中的數(shù)據(jù)傳輸?shù)娇刂朴?jì)算機(jī)中,控制計(jì)算機(jī)將采集到的數(shù)據(jù)進(jìn)行處理。具體實(shí)現(xiàn)過(guò)程如圖2所示。
圖2 微控制器通信實(shí)現(xiàn)過(guò)程
當(dāng)通信接口1向微控制器要數(shù)據(jù)時(shí),為保證接口1與控制計(jì)算機(jī)通信成功的握手,這時(shí)的中斷不能被打斷。同時(shí)通信接口2主動(dòng)發(fā)送數(shù)據(jù),發(fā)送速度很快,小于通信接口1與控制計(jì)算機(jī)握手的時(shí)間,這樣通信接口2發(fā)送的數(shù)據(jù)就會(huì)丟失,產(chǎn)生通信中斷的沖突。
以上給出兩路實(shí)時(shí)通信產(chǎn)生沖突的原因,多路實(shí)時(shí)通信產(chǎn)生的原理相同。
2 實(shí)時(shí)通信沖突解決方案
前文分析了單微控制器在雙向?qū)崟r(shí)通信產(chǎn)生沖突的原理,通過(guò)分析,將兩路通信接口產(chǎn)生的中斷分開(kāi)處理(即由兩個(gè)微控制器進(jìn)行分別的處理),便可以避免雙向?qū)崟r(shí)通信沖突的產(chǎn)生。下面給出該解決方案的框圖,如圖3所示。
圖3 實(shí)時(shí)通信沖突解決方案框圖
該方案利用兩片微控制器,利用微控制器1與控制計(jì)算機(jī)進(jìn)行通信,微控制器2與采集的數(shù)據(jù)口進(jìn)行通信,這是當(dāng)通信接口1與通信接口2同時(shí)傳輸數(shù)據(jù)時(shí),分別有兩個(gè)控制器處理不同接口的通信,便不會(huì)造成微控制器中斷沖突的產(chǎn)生。
為了保證通信接口2采集到的數(shù)據(jù)全部輸入到通信接口1,將通信接口2的數(shù)據(jù)利用微控制器2存入到異步FIFO中。通信接口1向微控制器索要數(shù)據(jù),微控制器1讀取異步FIFO中的數(shù)據(jù),將FIFO讀取到空后將數(shù)據(jù)傳輸?shù)娇刂朴?jì)算機(jī)。
3 方案硬件設(shè)計(jì)
本方法主要解決與控制計(jì)算機(jī)通信接口為USB,傳輸速度為12 Mb/s;測(cè)試接口采用SPI接口傳輸,傳輸速度為1 Mb/s,每幀傳輸間隔50 μs所造成中斷沖突的問(wèn)題。
根據(jù)上述的設(shè)計(jì)要求,微控制器選擇Cortex?M3的LPC1766,該微控制器包含USB,SPI,CAN等多通信接口控制器,處理速度能達(dá)到100 Mb/s。為了滿足要求的快速數(shù)據(jù)采集、順序存儲(chǔ)和傳送,而傳統(tǒng)的存儲(chǔ)器無(wú)法勝任。IDT7204系列是IDT公司新推出的FIFO存儲(chǔ)器芯片。具有4K×9 B的容量,它具有雙口輸入輸出,采集傳送速度快和先進(jìn)先出的特點(diǎn),能夠滿足上述的要求。其中異步FIFO的大小可以根據(jù)設(shè)計(jì)的要求進(jìn)行增加,避免在數(shù)據(jù)傳輸過(guò)程造成數(shù)據(jù)的丟失。
3.1 微控制器1與異步FIFO的連接
微控制器1主要是讀取異步FIFO中的數(shù)據(jù),IDT7204的數(shù)據(jù)輸出口Q0~Q8,EF,RS,R腳與微控制器1相連。本設(shè)計(jì)中,微控制器1啟動(dòng)后,復(fù)位IDT7204,利用讀寫(xiě)控制口(R),控制微控制器1與IDT7204的Q0?Q8的數(shù)據(jù)的讀出, FIFO的空標(biāo)志位(EP)作為微控制器1停止讀取數(shù)據(jù)的標(biāo)志。圖4給出微控制器1與異步FIFO的硬件連接圖。
圖4 微控制器1與異步FIFO的硬件連接圖
3.2 微控制器2與異步FIFO的連接
微控制器2主要任務(wù)為將采集數(shù)據(jù)寫(xiě)入異步FIFO,IDT7204的數(shù)據(jù)輸入口D0~D8、FF、W腳與微控制器2相連,在本設(shè)計(jì)中,當(dāng)微控制器2通過(guò)通信口2采集到數(shù)據(jù)口,將采集到的數(shù)據(jù)利用寫(xiě)控制線(W)通過(guò)D0?D8寫(xiě)入到FIFO中,當(dāng)FIFO寫(xiě)滿后,微控制器2將數(shù)據(jù)暫存入內(nèi)部RAM,F(xiàn)F(滿標(biāo)志)口無(wú)效再將數(shù)據(jù)寫(xiě)入。
圖5為微控制器2與異步FIFO的硬件連接圖。
圖5 微控制器2與異步FIFO的硬件連接圖
3.3 微控制器1與微控制器2的硬件連接
微控制器1向微控制器2提供一個(gè)信號(hào),通知微控制器2可以通過(guò)通信接口采集數(shù)據(jù),此時(shí)微控制器2開(kāi)始采集數(shù)據(jù)。硬件連接圖如圖6所示。
圖6 雙微控制器硬件連接圖
4 方案軟件設(shè)計(jì)
在這里分別介紹一下微控制器1和微控制器2的軟件的設(shè)計(jì)思路。
在該方法中,微控制器2負(fù)責(zé)數(shù)據(jù)通信接口2的通信和向異步FIFO寫(xiě)入數(shù)據(jù)。當(dāng)微控制器2收到微控制器1發(fā)送的上升沿后,進(jìn)入外部中斷,初始化通信接口2,開(kāi)始接受通信接口2的數(shù)據(jù),當(dāng)采集一包數(shù)據(jù)后,判斷異步FIFO是否滿,若滿,將數(shù)據(jù)寫(xiě)入內(nèi)部RAM,若不滿,判斷內(nèi)部RAM是否有數(shù)據(jù),若內(nèi)部RAM有數(shù)據(jù),將內(nèi)部RAM數(shù)據(jù)寫(xiě)入異步FIFO,若內(nèi)部RAM無(wú)數(shù)據(jù),將接收數(shù)據(jù)直接寫(xiě)入異步RAM。具體的實(shí)現(xiàn)流程如圖7所示。
圖7 微控制器2軟件設(shè)計(jì)流程
微控制器1主要負(fù)責(zé)接收控制計(jì)算機(jī)發(fā)來(lái)的通信請(qǐng)求,首先判斷異步FIFO是否為空,若為空,則傳輸空標(biāo)志給控制計(jì)算機(jī),若不為空,讀取異步FIFO中的數(shù)據(jù),直至讀空為止,然后將FIFO中的數(shù)據(jù)按照其協(xié)議發(fā)送到控制計(jì)算機(jī)。在該軟件設(shè)計(jì)中,最主要的是對(duì)異步FIFO(IDT7204)的讀/寫(xiě),根據(jù)IDT7204的讀/寫(xiě)時(shí)序圖如圖9[9],給出異步FIFO讀寫(xiě)程序片段。
讀取異步FIFO程序片段[10]:
BOOL IDT7204_ReadByte (unsigned char *p)
If ((FIO0PINIDT7204_EF) ==0) return 0;
Else {
IDT7204_R_HIGH ();
IDT7204_R_LOW ();
IDT7204_R_HIGH ();
P [0] =FIO0PIN0;
Return 1 ;}
寫(xiě)入異步FIFO程序片段:
BOOL IDT7204_ReadByte (unsigned char a)
If ((FIO0PINIDT7204_FF) ==0) return 0;
Else {
IDT7204_W_HIGH ();
IDT7204_W_LOW ();
FIO0MASK=0xFFFFFF00;
FIO0SET0=a;
FIO0CLR0=~a;
FIO0MASK=0x00000000;
IDT7204_W_HIGH ();
Return 1 ;}
圖8 微控制器1軟件設(shè)計(jì)流程
圖9 異步FIFO讀/寫(xiě)時(shí)序圖
5 結(jié) 語(yǔ)
(1)該方法經(jīng)過(guò)數(shù)十萬(wàn)包的通信數(shù)據(jù)驗(yàn)證,無(wú)一數(shù)據(jù)丟失,利用雙微控制器,通過(guò)異步FIFO傳遞數(shù)據(jù)來(lái)解決實(shí)時(shí)通信沖突的問(wèn)題是可行有效的。
(2)根據(jù)通信設(shè)計(jì)要求的改變,該方法可以通過(guò)改變微控制器和改變異步FIFO容量,以滿足其他的通信設(shè)計(jì)要求。
參考文獻(xiàn)
[1] 胡波,李鵬.異步FIFO在FPGA與DSP通信中的運(yùn)用[J].電子科技,2011,24(3):53?61.
[2] 馬守興,代剛,石柳,等.異步FIFO在復(fù)分接設(shè)計(jì)中的應(yīng)用與實(shí)現(xiàn)[J].數(shù)字技術(shù)與應(yīng)用,2012(5):122?123.
[3] 周富相,陳德毅,劉培國(guó),等.基于STM32的數(shù)字示波器設(shè)計(jì)與實(shí)現(xiàn)[J].山西電子技術(shù),2011(2):8?10.
[4] 馮秀彥.一種智能工業(yè)電子秤的設(shè)計(jì)[J].石家莊職業(yè)技術(shù)學(xué)院學(xué)報(bào),2012,24(2):47?50.
[5] 張曉宇.雙處理器多通道有源消聲系統(tǒng)的設(shè)計(jì)與試驗(yàn)[J].機(jī)械設(shè)計(jì),2012,29(8):15?19.
[6] 鄒和平,馬文英,祝恩國(guó).基于ARM9和數(shù)字信號(hào)處理雙處理器的饋線遠(yuǎn)方終端設(shè)計(jì)[J].低壓電器,2010(23):25?27.
[7] 龍?jiān)谠疲浔?DVI數(shù)字視頻圖像數(shù)據(jù)的實(shí)時(shí)截取方法[J].電視技術(shù),2010,34(2):32?33.
[8] 宋莉,孟慶建,張光玉,等.3G雙處理器遠(yuǎn)程心電實(shí)時(shí)監(jiān)護(hù)系統(tǒng)的研制[J].中國(guó)醫(yī)學(xué)物理學(xué)雜志,2010,27(2):1758?1761.
[9] 趙孔新,郭曉強(qiáng).基于FIFO IDT7202?12的數(shù)字存儲(chǔ)示波器[J].單片機(jī)與嵌入式系統(tǒng)的應(yīng)用,2008(4):59?62.
[10] 周立功.深入淺出Cortex?M3:LPC1700[M].廣州:廣州致遠(yuǎn)電子有限公司,2010.
[11] 李輝,王暉.基于VHDL的異步FIFO設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(14):154?156.
[12] 張奇山,劉安芝,劉希順.基于FPGA的FIFO設(shè)計(jì)和應(yīng)用[J]. 現(xiàn)代電子技術(shù),2009,32(18):50?52.