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