周加誼,官 琴,徐碧輝(中國兵器工業(yè)第五八研究所 四川 綿陽621000)
DSP平臺下ARINC429總線的驅(qū)動(dòng)設(shè)計(jì)
周加誼,官 琴,徐碧輝
(中國兵器工業(yè)第五八研究所 四川 綿陽621000)
針對某航空彈載設(shè)備在DSP平臺下與其他ARINC429設(shè)備之間數(shù)據(jù)通信這一關(guān)鍵問題,通過分析ARINC429總線協(xié)議芯片HI3584的具體功能,利用軟件工程化方法,設(shè)計(jì)出通用性良好的ARINC429總線驅(qū)動(dòng)程序,并給出了驅(qū)動(dòng)程序的實(shí)現(xiàn)過程。測試結(jié)果證明,該驅(qū)動(dòng)程序滿足了設(shè)計(jì)的需求,具有穩(wěn)定性好、可靠性高、通用性強(qiáng)等特點(diǎn),在以后的類似項(xiàng)目中僅做少許修改便能直接應(yīng)用。
ARINC429總線;數(shù)字信號處理;驅(qū)動(dòng)設(shè)計(jì);HI3584
在現(xiàn)代飛機(jī)上,大量信息在系統(tǒng)與系統(tǒng)、系統(tǒng)與部件之間高速傳遞。目前,相當(dāng)數(shù)量的軍用機(jī)、民用機(jī)及運(yùn)輸機(jī)的數(shù)據(jù)通信都采用機(jī)載數(shù)據(jù)總線ARINC429[1]。ARINC429總線結(jié)構(gòu)簡單、性能穩(wěn)定,抗干擾性強(qiáng)。最大的優(yōu)勢在于可靠性高,這是由于其非集中控制、傳輸可靠、錯(cuò)誤隔離性好。在x86、PowerPC、ARM等處理器下,通常選用功能齊全且通用性較好的操作系統(tǒng),例如Windows系列、VxWorks、Linux等,軟件工程師將設(shè)計(jì)好的驅(qū)動(dòng)程序直接遞交給這類操作系統(tǒng),并不直接和用戶的應(yīng)用程序交互[2-4]。而在DSP平臺下,通常采用簡易實(shí)時(shí)嵌入式操作系統(tǒng)DSP/BIOS,由應(yīng)用程序直接調(diào)用驅(qū)動(dòng)程序,因此驅(qū)動(dòng)程序的設(shè)計(jì)更為復(fù)雜,需充分考慮應(yīng)用層的需求和程序的健壯性,這樣才能保證程序穩(wěn)定可靠。
圖1系統(tǒng)組成示意圖,為某彈載計(jì)算機(jī)運(yùn)算控制模塊,其主要包括主處理器(DSP)、可編程單元(FPGA)、存儲器和外圍接口組件。計(jì)算機(jī)運(yùn)算控制模塊負(fù)責(zé)對采集的信號進(jìn)行解算處理,根據(jù)處理結(jié)果對外部設(shè)備進(jìn)行實(shí)時(shí)控制。其接口功能包括ARINC429、RS232、RS422、脈沖輸入、SPI接口、復(fù)位信號輸入等。
主處理器采用TI公司型號為SM32C6713BGDPA20EP的DSP。該芯片具有200 M速率和1 200 M FLOPS運(yùn)算能力,內(nèi)部兩級緩存架構(gòu),擁有一級4 kB程序緩存和4 kB數(shù)據(jù)緩存及256 kB二級緩存等特性。計(jì)算機(jī)運(yùn)算控制模塊的信息處理和數(shù)據(jù)運(yùn)算由DSP完成,并處理部分中斷事件和板間通信。
可編程單元采用XILINX公司型號為XC3S400-4FTG256I的FPGA,通過EMIF總線與DSP相連,協(xié)助DSP完成接口功能控制。該芯片擁有400 k系統(tǒng)門數(shù),896個(gè)可配置邏輯模塊(CLB),56 k分布式RAM,288 k嵌入式BRAM,173個(gè)用戶I/O。該處理器容量和資源能滿足本設(shè)計(jì)需求。
ARINC429總線控制器采用HOLT型號為HI3584的協(xié)議芯片。由于DSP的引腳有限,主處理器需借用FPGA擴(kuò)展引腳,如圖1所示??偩€協(xié)議芯片HI3584通過并行數(shù)據(jù)線與可編程單元FPGA互聯(lián),接收控制指令,以此實(shí)現(xiàn)單體與機(jī)載控制終端的ARINC429協(xié)議數(shù)據(jù)交互。
圖1 系統(tǒng)組成示意圖
HI3584芯片具有一個(gè)發(fā)送器和兩個(gè)接收器 (以下簡稱R1和R2),發(fā)送器和兩個(gè)接收器都具有獨(dú)立的32×32 FIFO。該芯片能高效可靠實(shí)現(xiàn)16位并行數(shù)據(jù)與ARINC429串行數(shù)據(jù)的轉(zhuǎn)換功能[1]。
HI3584芯片擁有一個(gè)16位控制寄存器和一個(gè)9位狀態(tài)寄存器。表1為該芯片控制寄存器的位、功能、狀態(tài)和描述,這里只列出了寄存器的部分信息??刂萍拇嫫鞯墓δ苤饕菍π酒陌l(fā)送器和接收器進(jìn)行設(shè)置,例如發(fā)送和接收的速率,奇偶校驗(yàn)位的設(shè)置和標(biāo)號(Label)的操作方式。
表1 HI3584控制寄存器
狀態(tài)寄存器主要描述HI3584芯片中發(fā)送器和接收器的FIFO狀態(tài),共9位,分別對應(yīng)SR0-SR8。其中SR0為表示R1的FIFO狀態(tài)是否為空,SR1表示R1的FIFO狀態(tài)是否半滿,SR2表示R1的FIFO狀態(tài)是否全滿。SR3表示R2的FIFO狀態(tài)是否為空,SR4表示R2的FIFO狀態(tài)是否為半滿,SR5表示R2的FIFO狀態(tài)是否全滿。SR6表示發(fā)送器的FIFO狀態(tài)是否為空,SR7表示發(fā)送器的FIFO狀態(tài)是否為半滿,SR8表示發(fā)送器的FIFO狀態(tài)是否全滿。FIFO狀態(tài)為驅(qū)動(dòng)程何時(shí)發(fā)數(shù)何時(shí)收數(shù)提供了依據(jù),發(fā)送器的FIFO狀態(tài)為全滿時(shí),驅(qū)動(dòng)程序的發(fā)送函數(shù)則需要等待,直到發(fā)送器狀態(tài)不為全滿,否則發(fā)送將會丟數(shù)。數(shù)據(jù)接收可采用輪詢和中斷兩種方式,例如采用輪詢方式,驅(qū)動(dòng)程序的接收函數(shù)必須不停的讀取接收器的FIFO狀態(tài),F(xiàn)IFO狀態(tài)不為空取出FIFO中的數(shù)據(jù)。
3.1接口設(shè)計(jì)
一款優(yōu)秀的軟件具備通用性好,調(diào)用簡單,易于理解,可重用性高等特點(diǎn),因此在進(jìn)行驅(qū)動(dòng)設(shè)計(jì)的時(shí)候需充分分析上層應(yīng)用程序的需求,并深入理解芯片自身特點(diǎn)和協(xié)議的標(biāo)準(zhǔn)。
表2是根據(jù)429總線協(xié)議和芯片功能設(shè)計(jì)出的驅(qū)動(dòng)接口。下面將描述接口的功能和使用。1號接口用于初始化總線芯片。2號接口用于數(shù)據(jù)發(fā)送,參數(shù)data為發(fā)送數(shù)據(jù)的值,參數(shù)count發(fā)送數(shù)據(jù)的個(gè)數(shù)。3號接口用于發(fā)送器速率設(shè)置,參數(shù)rate為1代表高速,0代表低速。4號接口用于讀取狀態(tài)寄存器,判斷FIFO中是否有數(shù)據(jù)。5號功能用于接收器1速率設(shè)置,參數(shù)rate為1代表高速,0代表低速。6號功能為設(shè)置標(biāo)號(Label),第一個(gè)參數(shù) rr取值 0、1、2,分別代表“正常操作”、“讀標(biāo)號”、“寫標(biāo)號”,第二個(gè)參數(shù)為標(biāo)號的值。7號接口用于設(shè)置接收器1標(biāo)號匹配使能。8號接口用于設(shè)置CR7和CR8。9號接口用于設(shè)置CR7,CR8使能。10號接口用于接收器1接收數(shù)據(jù)。11號接口用于設(shè)置奇偶校驗(yàn)使能。
表2未列出接收器2驅(qū)動(dòng)接口,接收器2的接口設(shè)計(jì)可參考接收器1的接口設(shè)計(jì),具體參照5~10號接口。
表2 429總線驅(qū)動(dòng)通用接口
3.2初始化
芯片初始化需實(shí)現(xiàn)Init429接口,至少需要完成以下幾項(xiàng)設(shè)置:1)接收器速率設(shè)置;2)接收器SDI值設(shè)置;3)使能檢驗(yàn)位;4)接收器濾波設(shè)置;5)接收器標(biāo)號設(shè)置;6)發(fā)送器速率設(shè)置;7)設(shè)置數(shù)據(jù)發(fā)送順序。
在實(shí)現(xiàn)Init429接口的時(shí)候,根據(jù)實(shí)際需求調(diào)用5-11號接口完成相關(guān)設(shè)置,5-11號接口提供了芯片的各項(xiàng)設(shè)置,參照表1中HI3584控制寄存器,向?qū)?yīng)的CR位中寫入需要的值便可實(shí)現(xiàn)5-11號接口。例如實(shí)現(xiàn)5號接口Receiver1Rate,由表1可知,R1速率設(shè)置位為CR0,因此在實(shí)現(xiàn)Receiver1-Rate接口是只需根據(jù)參數(shù)rate傳進(jìn)來的值改變控制寄存器的CR0位,控制寄存器其余位值不變。
3.3數(shù)據(jù)發(fā)送
數(shù)據(jù)發(fā)送需實(shí)現(xiàn)2號接口Send429。實(shí)現(xiàn)時(shí),向FPGA為總線芯片分配的發(fā)送寄存器中寫入需發(fā)送的數(shù)據(jù),若有多條數(shù)據(jù)需要發(fā)送,則多次循環(huán)寫入。圖2為系統(tǒng)429數(shù)據(jù)發(fā)送流程。
3.4數(shù)據(jù)接收
數(shù)據(jù)接收通??刹捎弥袛喾绞胶洼喸兎绞?。輪詢方式不需要硬件支持,代碼易讀性高,便于追蹤調(diào)試,但會增加系統(tǒng)負(fù)荷,嚴(yán)重降低系統(tǒng)性能[5-6]。中斷方式需硬件支持,能大大提高處理器的利用率。本驅(qū)動(dòng)中采用中斷方式,中斷由FPGA給DSP觸發(fā),觸發(fā)條件為接收FIFO狀態(tài)為半滿。數(shù)據(jù)接收需實(shí)現(xiàn)接口Receive1_429。實(shí)現(xiàn)時(shí),將FPGA為總線芯片分配的數(shù)據(jù)接收寄存器中的值讀取出來,存放于用戶指定的緩存區(qū)。在此過程中調(diào)用ReadStatus接口,反復(fù)讀取狀態(tài)寄存器,判斷接收FIFO的數(shù)據(jù)是否讀空。接收數(shù)據(jù)流程如圖3所示。
圖2 數(shù)據(jù)發(fā)送流程
圖3 中斷接收流程
3.5驅(qū)動(dòng)測試
ARINC429總線驅(qū)動(dòng)程序的測試方法為自發(fā)自收。HI3584芯片具有一個(gè)發(fā)送器和兩個(gè)接收器(A和B),在測試時(shí)將發(fā)送器和接收器之一相連接,本測試采用接收器A。上位主機(jī)開發(fā)環(huán)境采用TI公司CCS5.0,集成編碼和在線調(diào)試功能。調(diào)試時(shí)上位主機(jī)和DSP通過JTAG仿真器連接,本測試仿真器型號為SEED-XDS560v2。
ARINC429總線協(xié)議芯片HI3584的接收器會根據(jù)控制寄存器的設(shè)置對收到的數(shù)據(jù)進(jìn)行過濾。若接收的數(shù)據(jù)與設(shè)置的不相符,接收器則會丟掉;若滿足要求,則將數(shù)據(jù)加載到接收器的FIFO當(dāng)中。表3為FIFO加載判定,共9種組合。第一列表示是否使能標(biāo)號匹配,0表示不使能,1表示使能;第二列表示標(biāo)號匹配結(jié)果,X表示任意結(jié)果,No表示不匹配,Yes表示匹配;第三列表示是否使能源終端識別(SDI)匹配,0表示不使能,1表示使能;第四列表示源終端識別匹配結(jié)果;第五列表示接收的數(shù)據(jù)是否加載進(jìn)入FIFO,Load表示加載數(shù)據(jù)到FIFO,Ignore表示忽略數(shù)據(jù)。第5列判斷依據(jù)來自于第二列和第四列的結(jié)果,其規(guī)則為邏輯與,其中X可看作Yes。
使用 LoadLable1函數(shù)設(shè)置是否加載標(biāo)號, 使用SetReceiver1SDI設(shè)置SDI值,并使用Receiver1EnlabelSDI函數(shù)設(shè)置SDI使能,通過Send429函數(shù)發(fā)送表3中9種組合數(shù)據(jù),使用ReadStatus函數(shù)判斷接收狀態(tài),并結(jié)合表3對比,判斷程序是否正確。筆者將發(fā)送數(shù)據(jù)預(yù)設(shè)為表3的9種組合,經(jīng)測試,完全符合表3的預(yù)期結(jié)果。
表3 FIFO加載判定
除測試表3中的組合項(xiàng),還需使用TransmitterRate和Receiver1Rate函數(shù)測試發(fā)送速率和接收速率,以及使用EnableParity函數(shù)測試奇偶校驗(yàn)位,筆者都進(jìn)行了長時(shí)間的測試,完全符合預(yù)期結(jié)果。
文中設(shè)計(jì)出的ARINC429總線驅(qū)動(dòng)程序解決了計(jì)算機(jī)控制模塊與其他ARINC429設(shè)備之間數(shù)據(jù)通信問題,并且具有良好的可移植性。經(jīng)大量實(shí)驗(yàn)證明,驅(qū)動(dòng)程序穩(wěn)定可靠,能夠滿足上層應(yīng)用程序的普遍需求。
[1]李榕,劉衛(wèi)國,劉曉劍.航空用ARINC429總線收發(fā)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測量與控制,2005,13(9):970-972.
[2]Gujarati A,Cerqueira F,Brandenburg B B.Multiprocessor real-time scheduling with arbitrary processor affinities:from practice to theory[J].Real-Time Systems,2015(51):440-483.
[3]張楊.VxWorks內(nèi)核、設(shè)備驅(qū)動(dòng)與BSP開發(fā)詳解[M].北京:人民郵電出版社,2011.
[4]于海彬,王斌,陳興林,等.基于Linux的SC16IS752的串口驅(qū)動(dòng)程序設(shè)計(jì)[J].自動(dòng)化與儀表,2013(28):36-41.
[5]周愛武.計(jì)算機(jī)操作系統(tǒng)教程[M].北京:清華大學(xué)出版社,2006.
[6]任哲.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ原理及應(yīng)用 [M].北京:北京航空航天大學(xué)出版社,2014.
Design of the ARINC429 bus driver based on DSP p latform
ZHOU Jia-yi,GUAN Qin,XU Bi-hui
(No.58 Research Institute of China Ordnance Industries,Mianyang 621000,China)
Aiming at the critical problem of data communication between DSP and other ARINC429 devices,we designed a setof ARINIC 429 bus driver.Analyzed the chip HI3584 which implements the protocol of ARINIC 429 bus,we designed a universal driver interface combining with this scheme,and gives realization of program.The result shows that the driver is stable and reliable.In the later project,the driver can be used directlywith littlemodification.
ARINC429 bus;DSP;driver design;HI3584
TN914
A
1674-6236(2016)19-0171-03
2015-09-30稿件編號:201509193
周加誼(1990—),男,重慶人,助理工程師。研究方向:嵌入式軟件。