0 引言
信息社會(huì)的發(fā)展,在很大程度上取決于信息與信號(hào)處理技術(shù)的先進(jìn)性。數(shù)字信號(hào)處理技術(shù)的出現(xiàn)改變了信息與信號(hào)處理技術(shù)的整個(gè)面貌;而數(shù)字處理器作為數(shù)字信號(hào)處理的核心技術(shù),其應(yīng)用已經(jīng)涉及到設(shè)計(jì)信號(hào)處理的各個(gè)領(lǐng)域,成為電子系統(tǒng)的心臟。某光電跟蹤產(chǎn)品設(shè)計(jì)了基于TMS320C6201B和ADSP2187L的雙DSP的信息處理平臺(tái),它提高了對(duì)信息的識(shí)別處理速度,具有實(shí)時(shí)性好、控制精度高、抗干擾能力強(qiáng)等特點(diǎn)。一般情況下,可利用JTAG口對(duì)DSP進(jìn)行調(diào)試,然而,在整機(jī)情況下,這種方式就不太適用了。因而,在本系統(tǒng)中設(shè)計(jì)了RS 422接口,大大方便了遠(yuǎn)程調(diào)試和整機(jī)調(diào)試。
1 RS 422通信設(shè)計(jì)
本系統(tǒng)選用Maxim公司提供的Max490ESA作為接口芯片,它具備高速、低功耗等特點(diǎn)。圖1所示為RS422接口原理圖。
該通信設(shè)計(jì)的接口程序包括兩個(gè)部分:DSP上的通信程序設(shè)計(jì)和PC機(jī)上的通信程序設(shè)計(jì)。
DSP的通信程序設(shè)計(jì)主要是調(diào)用INT5和TIMER0中斷實(shí)現(xiàn)的。RX信號(hào)線掛在TMS320C6201的INT5腳,當(dāng)6201檢測(cè)到下跳時(shí),引發(fā)一個(gè)中斷,在中斷程序中,立即將ADSP2187前端的數(shù)據(jù)采集到DSP的片內(nèi),然后開(kāi)放TIMER0中斷處理程序。中斷程序負(fù)責(zé)將數(shù)據(jù)發(fā)給PC機(jī)。
PC機(jī)的RS 422通信程序采用C++Builder編寫(xiě),為多線程程序。利用了專(zhuān)用的RS 422通信控件Vcomm32來(lái)實(shí)現(xiàn)通信。
1.1 DSP上的RS 422通信程序設(shè)計(jì)
DSP上的RS 422通信程序是一種有限狀態(tài)機(jī),它利用上層協(xié)議將位流進(jìn)行傳輸,具體設(shè)計(jì)如下:
1.1.1 位流的形成
發(fā)送過(guò)程:RS 422是四線制的差分電平通信標(biāo)準(zhǔn),在本系統(tǒng)中,TMS320C6201B的McBSP1用作通用I/O口,將MeBSP1的7根本來(lái)用作同步通信用的數(shù)據(jù)與控制線,現(xiàn)設(shè)置為通用I/O線。
通過(guò)將TMS320C6201B的McBSP1接口的DX引腳置高與置低實(shí)現(xiàn)發(fā)送一位位的數(shù)據(jù)流,通過(guò)讀取RX引腳上的電平信號(hào)來(lái)接收數(shù)據(jù)位流。位流的速度與PC機(jī)上接收與發(fā)送流的速度一致。位流的格式遵循標(biāo)準(zhǔn)異步通信協(xié)議(UART),本系統(tǒng)中,設(shè)定為1位起始位,8位數(shù)據(jù)位,2位停止位。由于TMS320C6201B上沒(méi)有帶UART通信口,只能用軟件通過(guò)通用I/O引腳模仿UART。位流的節(jié)奏由TMS320C6201B的定時(shí)器0定時(shí)周期控制。圖2所示為UART通用異步通信協(xié)議。
接收過(guò)程:RS 422傳輸線Rx+、Rx-經(jīng)過(guò)MAX490ESA422接口芯片后,變成5 V CMOS電平信號(hào)Rx。Rx接至TMS320C6201B的兩個(gè)地方,一是TMS320C6201B的McBSP1的Rx腳,另外還同時(shí)接至TMS320C6201B的INT5腳。接收的過(guò)程如下:一旦PC機(jī)發(fā)出一個(gè)8位數(shù)據(jù),PC機(jī)首先要發(fā)送電平為低的起始位,這時(shí)將引起Rx腳由高到低的跳變,TMS320C6201B的INT5腳將感受到這一電平的跳變,這將引發(fā)TMS320C6201B的一次電平中斷,用來(lái)提示TMS320C6201B,請(qǐng)準(zhǔn)備接收PC機(jī)上的數(shù)據(jù)。在INT5的中斷處理程序中,首先關(guān)掉INT5腳電平中斷,以防后來(lái)還沒(méi)有接收完8位的數(shù)據(jù)位流上的電平變化再次引發(fā)不希望出現(xiàn)的中斷,然后退出中斷。TIMER0開(kāi)始計(jì)數(shù)到給定的周期時(shí),引起了TIMER0的定時(shí)中斷,TIMER0判斷是否收滿8位,如果沒(méi)有,則讀取McBSP1腳上的Rx信號(hào),將其移入到接收緩沖區(qū);如果接收滿了8位,則根據(jù)接收緩沖區(qū)接收到的字的意義以及DSP其他參數(shù)做出處理,當(dāng)然,收滿8位,TIMER0定時(shí)將打開(kāi)INT5中斷,復(fù)原系統(tǒng)其他狀態(tài),為下一次接收完整數(shù)據(jù)做準(zhǔn)備。這樣就完整地接收到了PC機(jī)上的一串完整的8位數(shù)據(jù)。
1.1.2 上層通信協(xié)議
位流形成后必須能識(shí)別出位流中包含的意義,或者建立一種DSP與PC之間的通信協(xié)議或通信狀態(tài)機(jī),確保DSP能夠識(shí)別出PC機(jī)發(fā)出的命令字,同時(shí)PC機(jī)也能正確接收包含著特別含義的位流。
該通信協(xié)議要實(shí)現(xiàn)以下功能:
(1)確保DSP與PC機(jī)能正確地握手。當(dāng)握手不成功時(shí),要有相應(yīng)的錯(cuò)誤處理機(jī)制;當(dāng)握手不成功的次數(shù)太多時(shí),必須停止握手,提示操作人員做相應(yīng)的處理。
(2)在握手成功后,DSP能夠根據(jù)PC發(fā)出的命令,做出相應(yīng)的響應(yīng)。
(3)協(xié)議應(yīng)該簡(jiǎn)單,不太復(fù)雜,擴(kuò)展容易。
為了達(dá)到以上設(shè)計(jì)目的,本系統(tǒng)在DSP上設(shè)計(jì)了如圖3所示的RS 422通信狀態(tài)機(jī)。
其基本過(guò)程是:當(dāng)DSP啟動(dòng)后,進(jìn)入主程序,首先將通信狀態(tài)機(jī)置于準(zhǔn)備接收PC機(jī)握手碼狀態(tài),一旦收到PC機(jī)發(fā)出的8位數(shù)據(jù),判斷是否是8位握手碼,如果是則將通信狀態(tài)機(jī)置于發(fā)送握手碼狀態(tài),如果握手碼接收錯(cuò)誤,則發(fā)0x55,否則發(fā)0xAA。如果是正確的握手碼,則將通信狀態(tài)機(jī)置于準(zhǔn)備接收PC機(jī)命令態(tài)。下一步,通信狀態(tài)機(jī)等待接收PC機(jī)發(fā)出的命令,一旦收到8位數(shù)據(jù),則認(rèn)為是PC機(jī)發(fā)出的命令,并根據(jù)PC發(fā)出的命令,將通信狀態(tài)機(jī)調(diào)整到PC機(jī)要求的工作狀態(tài),然后執(zhí)行PC機(jī)要求的操作,如傳送AD原始數(shù)據(jù)與相關(guān)結(jié)果,等待接受PC機(jī)發(fā)出2187的程序數(shù)據(jù)等。當(dāng)執(zhí)行完P(guān)C機(jī)的命令,調(diào)整通信狀態(tài)機(jī)回到初始等待PC發(fā)出握手測(cè)試碼狀態(tài),為新一輪的通信準(zhǔn)備好條件。
1.2 PC機(jī)上的RS 422通信與數(shù)據(jù)處理
PC機(jī)上的RS 422通信程序也需要遵循上面的所列出的通信協(xié)議。下面將詳細(xì)討論P(yáng)C機(jī)上的RS 422通信與數(shù)據(jù)處理程序。PC機(jī)上的RS 422通信與數(shù)據(jù)處理程序主要完成以下功能:
(1)將ADSP2187的程序文件分解,裝入緩沖區(qū)內(nèi),等待RS 422接口發(fā)出。
(2)將TMS320C6201B的程序文件分解,裝入緩沖區(qū)內(nèi),等待RS 422接口發(fā)出。
(3)接收DSP發(fā)出的相關(guān)運(yùn)行結(jié)果,顯示、存貯、打印。
相對(duì)于DSP上的軟件來(lái)講,PC機(jī)上的軟件要相對(duì)復(fù)雜些。目前本系統(tǒng)用三個(gè)PC機(jī)上的軟件分別實(shí)現(xiàn)它。
PC機(jī)上的軟件用C++Builder5.0軟件編寫(xiě),RS 422通信模塊用Comm控件實(shí)現(xiàn),使用比較方便,下面分別介紹說(shuō)明PC機(jī)上這三個(gè)功能軟件的結(jié)構(gòu)與實(shí)現(xiàn)。
1.2.1 ADSP2187裝入程序
由于CCS本身存在無(wú)法裝入大文件的bug,因此,在開(kāi)發(fā)階段,實(shí)現(xiàn)裝入任意長(zhǎng)度的文件是必須的。利用PC機(jī)上的C++Builder程序開(kāi)發(fā)工具,首先必須能夠?qū)DSP2187的原始程序文件分解,形成CCS本身可用的數(shù)據(jù)格式。將分析出的數(shù)據(jù)放入緩沖區(qū)Buffer內(nèi),然后通過(guò)RS 422接口發(fā)送到TMS320C6201的片內(nèi)指定的單元內(nèi)。當(dāng)發(fā)送完畢后,TMS320C6201內(nèi)部Boot2187函數(shù)將負(fù)責(zé)將ADSP2187數(shù)據(jù)裝到ADSP2187片內(nèi),并啟動(dòng)它。在TMS320C6201B內(nèi),幾個(gè)簡(jiǎn)單的循環(huán)語(yǔ)句,即可以將得到的數(shù)據(jù)發(fā)送到ADSP2187片內(nèi)。下面是程序裝載說(shuō)明:
(1)TMS320C6201裝載程序流程
IDMA_IAL=0x80000000;
IDMA_IAL=程序段首地址:PM區(qū)地址不變,DM區(qū)首地址+0X4000;
讀數(shù)據(jù)使用IRD,寫(xiě)數(shù)據(jù)使用IDMA_IWR;
程序區(qū)為24位字長(zhǎng),讀寫(xiě)均為先高16位再低8位數(shù)據(jù);
(2)關(guān)于程序段地址為0X0000開(kāi)始的程序段
TMS320C6201不能從0地址開(kāi)始裝程序,而需要從0X0001地址開(kāi)始裝程序;
0地址處的指令不裝;
例如:上面的0x0000開(kāi)始的程序段裝入為:
(3)TMS320C6201啟動(dòng)ADSP2187程序運(yùn)行的操作
圖4所示為ADSP2187程序文件分解的數(shù)據(jù)格式及其意義。
1.2.2 TMS320C6201裝入程序
TMS320C6201B的裝入與ADSP2187程序的裝入基本一致,不同的是TMS320C6201B的程序獲取方法不同,TMS320C6201B的程序源文件是在Simulator下將TMS320C6201B的程序區(qū)導(dǎo)出而形成的源程序文件。由于無(wú)法將大文件裝入到TMS320C6201B片內(nèi),希望通過(guò)RS 422接口,將數(shù)據(jù)發(fā)至TMS320C6201B的SBSRAM內(nèi)或其他緩沖單元。作為燒寫(xiě)FLASH的準(zhǔn)備。
PC機(jī)的分析程序最后將TMS320C6201B的數(shù)據(jù)整理成如圖5所示的格式,再將這些代碼裝入到SBSRAM中,最后燒錄到FLASHRAM中。
1.2.3 接收DSP發(fā)出的相關(guān)運(yùn)行結(jié)果
這部分程序的作用是向DSP發(fā)出獲取AD前端數(shù)據(jù)與相關(guān)計(jì)算結(jié)果的命令,然后將相關(guān)計(jì)算結(jié)果與原始數(shù)據(jù)上傳到PC機(jī)上,PC機(jī)將數(shù)據(jù)存貯在緩沖區(qū)內(nèi),將之顯示、打印、存貯成規(guī)范化的文件。
2 結(jié)論
內(nèi)外場(chǎng)試驗(yàn)表明,某光電跟蹤產(chǎn)品雙DSP系統(tǒng)由于在設(shè)計(jì)中采用了RS 422接口,大大方便了遠(yuǎn)程調(diào)試和整機(jī)調(diào)試,避免了內(nèi)外場(chǎng)測(cè)試及調(diào)試必須拆除外殼體的問(wèn)題,大大節(jié)約了調(diào)試及測(cè)試時(shí)間。另外,該項(xiàng)技術(shù)不僅在某光電跟蹤產(chǎn)品雙DSP系統(tǒng)中得到可靠驗(yàn)證,目前還被推廣應(yīng)用到其他嵌入式系統(tǒng)中。