基于VxWorks的多路高速串口的通信方法設(shè)計(jì)
信號(hào)經(jīng)過(guò)1:10功分器,分給10個(gè)RF接收模塊,完成RF接收,輸出串行信號(hào),每路串口為串行信號(hào)的最大速率115.2kbps,RF接收模塊每20ms發(fā)一個(gè)數(shù)據(jù)包,一個(gè)數(shù)據(jù)包最大為30bit。之后串行信號(hào)經(jīng)過(guò)3片OX16C954(每片有4路UART)轉(zhuǎn)換成并行總線信號(hào),輸出給MPC860T(CPU)。每片OX16C954設(shè)置有128B的環(huán)形緩沖區(qū),所以經(jīng)過(guò)時(shí)間緩沖區(qū)就會(huì)被寫(xiě)滿(mǎn)。為了保證不丟失數(shù)據(jù),應(yīng)該在8.8ms內(nèi)完成對(duì)10個(gè)終端接收模塊進(jìn)行一次接收。OX16C954中斷門(mén)限設(shè)為64B,當(dāng)接收緩沖超過(guò)64B時(shí),OX16C954產(chǎn)生接收中斷。在OX16C954還設(shè)置有超時(shí)中斷,當(dāng)從接收最后一個(gè)停止位中心開(kāi)始計(jì)時(shí),在四個(gè)符號(hào)周期內(nèi)沒(méi)有接收新的信息,即就產(chǎn)生超時(shí)中斷。批中斷的應(yīng)用如圖3。多個(gè)串口通過(guò)CPLD共享一個(gè)中斷源,在中斷頻繁,多個(gè)串口同時(shí)產(chǎn)生中斷的情況下,實(shí)現(xiàn)了批中斷,節(jié)約了中斷資源,提高了中斷效率。
本系統(tǒng)的設(shè)計(jì)基于VxWorks操作系統(tǒng)。VxWorks操作系統(tǒng)提供對(duì)多種處理器的廣泛支持,具有完善的開(kāi)發(fā)環(huán)境、開(kāi)放的軟件接口、優(yōu)異的實(shí)時(shí)性能和全面可靠的網(wǎng)絡(luò)功能及良好的可裁剪性,適用于各種嵌入式環(huán)境的開(kāi)發(fā)。
程序?qū)崿F(xiàn)過(guò)程:系統(tǒng)加電待操作系統(tǒng)啟動(dòng)之后,應(yīng)用程序首先根據(jù)主控和PC機(jī)的IP地址,得到它們的MAC地址,為以后進(jìn)行UDP數(shù)據(jù)傳送做準(zhǔn)備;初始化MPC860T的Port C口,把PC12、PC15初始化為數(shù)據(jù)輸出口,分別用于點(diǎn)亮運(yùn)行時(shí)的狀態(tài)燈和設(shè)置/清除硬件看門(mén)狗;初始化OX16C954,打開(kāi)10路串口,接收終端模塊的數(shù)據(jù);同時(shí)向終端模塊發(fā)送數(shù)據(jù),初始化UDP協(xié)議棧;最后,進(jìn)入無(wú)限循環(huán)中,從各個(gè)串口收集數(shù)據(jù),解開(kāi)數(shù)據(jù)包,以UDP的方式,把話音包發(fā)給PC機(jī),把非話音包發(fā)給主控;同時(shí),從網(wǎng)絡(luò)上接收來(lái)自主控的UDP數(shù)據(jù),根據(jù)端口號(hào),把數(shù)據(jù)轉(zhuǎn)發(fā)給各個(gè)終端模塊。PC機(jī)不直接向DPM發(fā)送UDP數(shù)據(jù),只有主控向各個(gè)終端發(fā)送數(shù)據(jù),故由DPM至PC機(jī)的數(shù)據(jù)為單向。管理看門(mén)狗,每循環(huán)一次,開(kāi)關(guān)一次看門(mén)狗,處理一次狀態(tài)燈。整個(gè)程序的流程如圖4所示。
在10路都沒(méi)有數(shù)據(jù)的極限情況下測(cè)量輪詢(xún)開(kāi)銷(xiāo)VP。在這種極限情況下,應(yīng)用全中斷的方式,10路串口沒(méi)有數(shù)據(jù)不會(huì)產(chǎn)生中斷,中斷開(kāi)銷(xiāo)為0;應(yīng)用全輪詢(xún)的方式,CPU每次只查詢(xún)外部寄存器但不接收數(shù)據(jù),所以每次CPU都是空轉(zhuǎn),測(cè)量出來(lái)的為輪詢(xún)的固定開(kāi)銷(xiāo)VP=163.84μs。在這種情況下,中斷顯然要優(yōu)于輪詢(xún)。
3.1 均衡負(fù)載
在多路負(fù)載均衡的情況下,測(cè)量中斷吞吐率OI=B1為達(dá)到OX16C954中斷門(mén)限后,觸發(fā)的接收中斷所接收的數(shù)據(jù)量(B1≥64B);B2為產(chǎn)生超時(shí)中斷時(shí)所接收的數(shù)據(jù)量(B2≤64B)。輪詢(xún)吞吐率OP=B′為輪詢(xún)接收的數(shù)據(jù)量。如圖5所示,在VxWorks系統(tǒng)中1tick=1/8000(s)。因?yàn)樵O(shè)置了中斷門(mén)限,所以中斷在數(shù)據(jù)量低的時(shí)刻有一個(gè)躍變;輪詢(xún)的躍變由輪詢(xún)的周期設(shè)置,如果改變輪詢(xún)周期,躍變點(diǎn)將發(fā)生轉(zhuǎn)移。輪詢(xún)的吞吐率隨輸入數(shù)據(jù)量的增加而呈線性增長(zhǎng);在數(shù)據(jù)量低時(shí)中斷要優(yōu)于輪詢(xún),隨著數(shù)據(jù)量的增長(zhǎng)輪詢(xún)就要優(yōu)于中斷,在兩者相交的時(shí)刻,通過(guò)實(shí)驗(yàn)可以找到γ和PUMAX的值。
3.2 非均衡負(fù)載情況
非均衡負(fù)載情況,即m1路數(shù)據(jù)負(fù)載大、m2路數(shù)據(jù)負(fù)載小的情況(m1+m2=10)下,測(cè)量OI、OP和OC(中斷和輪詢(xún)相結(jié)合的吞吐率)。如圖6所示,在橫坐標(biāo)為1處,為m1=3,m2=7的情況,由于應(yīng)用了批中斷,中斷的效率要優(yōu)于輪詢(xún),中斷和輪詢(xún)相結(jié)合的方法要略?xún)?yōu)于中斷;在橫坐標(biāo)為2處,為m1=5,m2=5的情況,相結(jié)合的方法要略?xún)?yōu)于中斷和輪詢(xún);在橫坐標(biāo)3處為m1=7,m2=3的情況,相結(jié)合的方法近似輪詢(xún),要優(yōu)于中斷。
本文在綜合分析各種串口接收方式不足的基礎(chǔ)上,提出了中斷和輪詢(xún)相結(jié)合的方法。實(shí)驗(yàn)結(jié)果表明,在滿(mǎn)足系統(tǒng)實(shí)時(shí)性要求的前提下,改進(jìn)后的高速多串口系統(tǒng)吞吐率比應(yīng)用單一的中斷或輪詢(xún)方式在多路高速串口系統(tǒng)中、各串口負(fù)載不均衡的情況下,得到了明顯的提高。
評(píng)論