一種基于MAX3232的TMS320F2812異步串行通信系統(tǒng)研究和實現(xiàn)
摘要:采用TI公司MAX3232芯片實現(xiàn)TMS320F2812數(shù)字信號處理芯片與PC機的通信,研究了SCI模塊發(fā)送和接收數(shù)據(jù)的方式,完成了SCI模塊的初始化程序設計和發(fā)送與接收數(shù)據(jù)的流程。經(jīng)過實驗測試,該系統(tǒng)結(jié)構簡單、傳輸可靠,可直接用于油田勘探開發(fā)的測井和多種數(shù)據(jù)采集與傳輸。
關鍵詞:TMS320F2812;SCI;異步串行通信
數(shù)字信號處理器自20世紀80年代誕生以來,在短短的二十幾年里得到了飛速發(fā)展,在通信、航空航天、醫(yī)療、工業(yè)控制方面得到了廣泛應用,美國德州儀器公司是DSP研發(fā)和生產(chǎn)的領先者,也是世界上最大的DSP供應商。TMS320F2812是TI公司的一款用于控制的高性能、多功能、高性價比的32位定點DSP芯片,最高可以工作在150MHz主頻下,片內(nèi)集成了眾多資源。目前,串行通信在各行各業(yè)發(fā)揮著重要作用,它可以將各種數(shù)據(jù)發(fā)送給計算饑以便我們實時監(jiān)控。由于中國海洋石油國家科技重大專項“隨鉆地層壓力測量系統(tǒng)研制”項目需要,作者設計了一種基于MAX3232的TMS320F2812異步串行通信系統(tǒng),經(jīng)過實驗測試,該系統(tǒng)結(jié)構簡單、傳輸可靠,達到了要求,可直接用于油田勘探開發(fā)的測井和多種數(shù)據(jù)采集與傳輸。
1 硬件電路
采用符合RS-232協(xié)議的MAX232芯片來實現(xiàn)F2812與PC之間的通信。MAX3232采用專有的低壓差發(fā)送器輸出級,利用雙電荷泵在3.0~
5.5V電源供電時能夠?qū)崿F(xiàn)真正的RS-232性能,器件僅需四個0.1μF的外部小尺寸電荷泵電容,具有兩路接收器和兩路驅(qū)動器,提供1μA關斷模式,有效降低功耗并延長便攜式產(chǎn)品的電池壽命。在關斷模式下,接收器保持有效狀態(tài),對外部設備進行監(jiān)測,僅消耗1μA電源電流,原理電路如圖1所示。
從圖中我們可以看出MAX3232具有兩路接收和驅(qū)動器,本次設計中僅用了其中一路,而另一路采取懸空方式。其引腳連接方式為:T1IN
與 F2812的SCITXDA相連,R1OUT與SCIRXDA相連,T1OUT和R1IN分別于DB9的2和3號引腳相連,其余引腳分別接4個0.1μF的電容。該電路設計簡單,易于實現(xiàn)。
2 工作原理簡述
異步串行通信接口(SCI)是一個采用發(fā)送、接收雙線制的異步串行通信接口,即通常所說的UART口。所謂異步傳輸就是將比特分成組進行傳送,組可以是8位的一個字符或更長。發(fā)送方可以在任何時刻發(fā)送這些比特組,而接收方不知道它們會在什么時候到達。因此,每次異步傳輸?shù)男畔⒍夹枰砸粋€起始位開頭,它通知接收方數(shù)據(jù)已經(jīng)到達了。在傳輸結(jié)束時,一個停止位表示這次傳輸信息的終止。異步傳輸實現(xiàn)容易,通常用于低速設備。
TMS320F2812的SCI模塊具有很強大的功能。它包括兩個外部引腳SCITXD和SCIRXD,分別復用到通用I/O口上,通過設置GPIO口為特殊功能口可以使能這兩個外部引腳,可以編程配置多種的不同的通信速率和可編程的數(shù)據(jù)格式,具有四個錯誤檢測標志位,可以工作在半雙工或全雙工通信模式,發(fā)送和接收可以采用中斷和查詢的方式進行,采用NRZ格式并且擁有13個寄存器來完成整個模塊的控制,它還具有自動波特率檢測和16級發(fā)送/接收等增強功能一本設計正是利用SCI模塊的兩個外部引腳SCITXD和SCIRXD分別連接MAX3232的一路接收發(fā)驅(qū)動器并通過DB9計算機接口來實現(xiàn)TMS320F2812和PC之間的相互通信。
3 軟件設計
3.1 SCI模塊的初始化
對DSP芯片的控制是通過對它的寄存器的讀寫來完成的,TMS320F2812的SCI模塊包括13個寄存器。要使SCI模塊能夠正常工作,必須對它進行初始化。其中設置主要包括:運行模式、協(xié)議、波特率、字符長度、奇/偶校驗、停止位個數(shù)、中斷使能及級別確定等。下面為本設計中對SCI模塊的初始化程序:
void InitSciA ()
{
//配置SCITXD和SCIRXD
EALLOW:
GpioMuxRegs.CPFMUX.bit.SCITXDA_GPIOF4=1;
GpioMuxRegs.CPFMUX.bit.SCIRXDA_GPIOF5=1;
EDIS:
//軟件復位SCI
SciaRegs.SCIGTL1.bit.SWRESET=0;
//設置字符格式、通信協(xié)議、通信模式
SciaRegs.SCICCR. bit. SCICHAR=7;
SciaRegs.SCICCR.bit.PARITYENA=0;
SciaRegs.SCICCR.bit.LOOPBKENA=0;
SciaRegs.SCICCR.bit.STOPBITS=0;
SciaRegs.SCICCR. bit.ADDRIDLE. MODE=0;
//設置波特率為9600,LSPCLK=30MHz
SciaRegs.SCIHBAUD=0x0001;
SciaRegs.SCILBAUD=0x0085;
//使能發(fā)送和接收器
SciaRegs.SCICTL1.bit.TXENA=1;
SciaRegs.SCICTL1.bit.RXENA=1;
//使能中斷
PieCtrl.PIEIER9. bit.INTx1=1;
PieCtrl.PIEIER9. bit.INTx2=1;
//退出復位狀態(tài)
SciaRegs.SCICTL1.bit.SWRESET=1;
}
3.2 SCI模塊發(fā)送和接收數(shù)據(jù)的機制
SCI模塊發(fā)送和接收數(shù)據(jù)有兩種方式:一種是查詢方式,另一種是中斷方式。
查詢方式:就是程序不斷去查詢各自的狀態(tài)標志位。對于發(fā)送數(shù)據(jù),需要查詢的是TXRDY位,如果該位為1,說明SCITXBUF已經(jīng)準備好接收下一個發(fā)送數(shù)據(jù)。當數(shù)據(jù)寫入SCITXBUF后,該位會自動清零,此時如果TXENA=1,發(fā)送移位寄存器就會將SCITXBUF中的數(shù)據(jù)發(fā)送出去。而接收數(shù)據(jù)時需要查詢RXRDY位,當SCIRXBUF已經(jīng)準備好一個等待CPU讀取的數(shù)據(jù)時,就會將該位置1,當數(shù)據(jù)被CPU讀走后,RXRDY會自動清零。
中斷方式:在該種方式下,需要我們首先使能外設級、PIE級和CPU級中斷。此時TXRDY和RXRDY變成了中斷標志位,當TXRDY為1時,就會產(chǎn)生中斷事件,如果各級中斷都已經(jīng)使能,則程序會進入相應的中斷處理函數(shù),完成數(shù)據(jù)的發(fā)送。而當RXRDY置位時,就會產(chǎn)生接收中斷,如果各級中斷都已經(jīng)使能,則程序進入相應的中斷處理函數(shù),完成數(shù)據(jù)的接收。這里值得注意的是,2812的外設的中斷標志位一定要手動復位,但是SCI模塊是個例外,它的中斷標志位會在響應中斷后自動復位。
通過對查詢和中斷方式程序的分析可以看出,查詢函數(shù)位于主函數(shù)的for循環(huán)內(nèi),通過for循環(huán)不斷查詢TXRDY和RXRDY的狀態(tài),因此,程序的運行效率比較低,但是程序比較簡單,易于實現(xiàn)。對于中斷方式,只要相應的中斷標志位置位,并且所有中斷級都已被使能,就能直接進入中斷處理函數(shù),實現(xiàn)相應的功能。因此,程序的運行效率高,但程序比較復雜。綜合考慮,最終選取數(shù)據(jù)接收采用中斷方式,數(shù)據(jù)發(fā)送采用查詢方式。圖2和圖3分別為查詢方式和中斷方式的程序流程圖。
4 實驗與測試結(jié)果
將串口調(diào)試工具做如下設置:將波特率設置為程序中的波特率19200bps,數(shù)據(jù)位8位,無極性校驗,停止位1位,然后打開串口,將16進制復選框上的勾去掉,這樣數(shù)據(jù)將按照ASCII碼進行發(fā)送。在這里我們輸入swpu,點擊發(fā)送后,接收框馬上顯示swpu,說明SCI與PC通信成功。具體結(jié)果如圖4所示。
除此之外,我們還可以通過CCS中的watchwindow來觀察2812接收到的數(shù)據(jù),如圖5所示。
通過查ASCII碼表我們可以得到表1所列。
由表1我們也可以看出2812與PC通信成功,發(fā)送和接收的數(shù)據(jù)一致。
通過硬件設計和軟件調(diào)試,已經(jīng)達到了項目要求。該系統(tǒng)結(jié)構簡單、易于實現(xiàn)。