轉(zhuǎn)載happysaisai的博客
DSP具有很強(qiáng)的數(shù)據(jù)處理能力使其在高速數(shù)字信號處理方面得到廣泛的應(yīng)用。通用異步接收發(fā)送器(UART)是異步串行通訊設(shè)備,它能在發(fā)射機(jī)的末端將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),并在接收機(jī)的末端將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。該設(shè)備可以實現(xiàn)EIA-232E(也稱作RS-232)標(biāo)準(zhǔn)的全雙工串行通信鏈路。
TI的很多DSP產(chǎn)品不帶有UART接口,為了實現(xiàn)串行通信,很多情況下都要用軟件對相應(yīng)的接口編程來模擬異步串口。而ADSP-21369芯片有2個UART,支持串口數(shù)據(jù)的全雙工傳輸,兩個專用DMA通道和異步傳輸。UART功能原理框圖如下圖所示。
UART功能原理框圖
UART Functional Block Diagram
典型的UART數(shù)據(jù)幀如下圖所示,它包含一個起始位、數(shù)據(jù)位和一個停止位。奇偶校驗位用于檢驗數(shù)據(jù)錯誤,可以設(shè)置為偶校驗或奇校驗。一幀(不包含起始位、停止位和奇偶校驗位)中的數(shù)據(jù)長度從5到8位之間變化。每幀停止位的數(shù)目可以編程為1或2?紤]到所有的情況,一個UART數(shù)據(jù)幀的長度在7到12位之間變化。幀的起始位為低有效,在下降沿檢測;停止位為高有效,在上升沿檢測。對于某次通信發(fā)送端和接收端的波特率必須相同。
UART數(shù)據(jù)幀
UART data frame
- 同步效應(yīng)
當(dāng)兩個UART通信時,發(fā)送端和接收端按數(shù)據(jù)發(fā)送的波特率工作。發(fā)送端以給定的波特率發(fā)送數(shù)據(jù),接收端檢測到幀的起始位之后開始以同樣的波特率對數(shù)據(jù)采樣。因為接收端不知道數(shù)據(jù)幀何時到來,所以這種通信方式被稱作異步通信。因為接收端要檢測幀的起始位,接收端的邏輯要比發(fā)送端復(fù)雜。
由通信協(xié)議可知,接收端產(chǎn)生的接收時鐘頻率是波特率的16倍。圖4.3所示是接收端使用的同步數(shù)據(jù)幀的協(xié)議。當(dāng)數(shù)據(jù)信號從停止位或空閑狀態(tài)過渡時,接收端在低有效起始位的下降沿檢測幀的起始位。在起始位的下降沿,接收端將其時鐘計數(shù)器復(fù)位并在8個時鐘周期后找到起始位的重點。在中點對起始位重采樣以便驗證之前檢測到的下降沿不是噪聲或干擾。在16個時鐘周期之后對下一位采樣,也就是下圖中的D0位的中點。
UART同步效果
UART synchronization effects
因為UART接收器在每一幀的開始重新同步,前面幀的采樣錯誤(除了停止位之外)不會累加。因此,采樣錯誤只限于一個數(shù)據(jù)幀,與整個發(fā)送數(shù)據(jù)無關(guān)。經(jīng)常由于接收時鐘和接收數(shù)據(jù)幀的同步錯誤而導(dǎo)致采樣錯誤。該錯誤會影響整個幀,它將數(shù)據(jù)位的采樣點移到更靠近過渡邊沿的地方。由于這些過渡邊沿上升和下降緩慢,該錯誤可能導(dǎo)致數(shù)據(jù)檢測錯誤。過渡邊沿的緩慢上升和下降是發(fā)送電纜的高阻抗導(dǎo)致的。當(dāng)停止位被采樣為低而不是高時,幀錯誤就出現(xiàn)了。因為處理器端的UART波特率由處理器的外部時鐘產(chǎn)生,所需的波特率產(chǎn)生可能不精確。這會進(jìn)一步導(dǎo)致發(fā)送端的時序變化,在接收端就可能出現(xiàn)采樣錯誤。
2、編程技巧
(1)全雙工DMA
因為UART是一個全雙工外設(shè),發(fā)送器和接收器同時工作并相互獨立。當(dāng)在環(huán)路模式中進(jìn)行全雙工DMA時(在這里發(fā)送器的輸出與接收器的輸入相連),要保證UART的接收端在使能發(fā)送端之前被使能,以避免接收端的數(shù)據(jù)丟失。
匯編代碼見附錄A。
(2)UART中斷
在I/O模式下使能UART中斷需要兩步。在I/O模式中用UART中斷要謹(jǐn)慎,因為所要的中斷被捆綁成一個單一的接收中斷。首先要將UART中斷映射為中斷向量表中的中斷之一。通過對DAI中斷控制寄存器編程或?qū)ART映射到任何一個外設(shè)中斷源,直接使用DAI中斷。這可以通過改變外設(shè)中斷優(yōu)先級控制寄存器的UART中斷的默認(rèn)設(shè)置來實現(xiàn),即選擇UART接收中斷。UART0和UART1的接收中斷選定值分別對應(yīng)0x13和0x14。
I/O模式下的第二步是在UART中斷使能寄存器(UARTxIER)中設(shè)置相應(yīng)的位以使能UART中斷。在所有UART設(shè)置(比如字長、奇偶校驗等)之后要從內(nèi)部使能中斷,因為在發(fā)送模式下,一旦在UARTxIER寄存器對發(fā)送緩沖為空位使能,就會產(chǎn)生中斷。如果在其他的UART設(shè)置之前對該位使能,在發(fā)送中斷服務(wù)例程中的發(fā)送數(shù)據(jù)不會遵循以后通過編程對UART的設(shè)置,會導(dǎo)致通信錯誤。在DMA模式中,對發(fā)送或接收DMA按照I/O模式步驟1中的介紹使能相應(yīng)的中斷就可以了。在DMA模式下,用戶不需要使用UARTxIER寄存器使能發(fā)送或接收中斷。但是對于奇偶校驗錯誤、溢出錯誤、幀錯誤或地址檢測錯去引起的線狀態(tài)中斷,即使在DMA模式下,也要在UARTxIER寄存器中設(shè)置相應(yīng)的中斷位。
在VisualDSP++中運行或單步調(diào)試代碼時,如果使用了UART中斷,不要打開UART寄存器窗口(UART寄存器窗口對外設(shè)的中斷狀態(tài)有影響)。如果打開了該窗口會清除中斷鎖存器,仿真器會不斷的對這些寄存器進(jìn)行讀操作。
3. 與PC通信
與PC通信要保證UART的內(nèi)部編程設(shè)置和串口調(diào)試助手的COM端口的配置相匹配。與PC通信的UART初始化過程代碼如下。程序中對UART的設(shè)置和圖4.4中對串口調(diào)試助手的配置相匹配。
void initUART( )
{
/* 設(shè)置UART0的波特率*/
*pUART0LCR = UARTDLAB;
// 使能Divisor Latch High/Low 寄存器(UARTxDLL,UARTxDLLH)來設(shè)置波特率
*pUART0DLL = 0x1c;
*pUART0DLH=0x02;
//除數(shù)值為0x21c = 540,時鐘頻率為331.776MHz 的情況下,波特率為19200
/* 配置UART0 LCR寄存器*/
*pUART0LCR = UARTWLS8| // 字長為8
UARTPEN| // 奇校驗
UARTSTB ; // 2個停止位
*pUART0RXCTL = UARTEN; //使能UART0 接收模式
*pUART0TXCTL = UARTEN; //使能UART0傳送模式
xmitUARTmessage(welcomemessage,sizeof(welcomemessage)); //傳送歡迎信息
}
串口調(diào)試助手的設(shè)置
Configuring of serial debugging assistant