<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > GNU ARM匯編--(七)s3c2440的串口控制

GNU ARM匯編--(七)s3c2440的串口控制

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
在配置完s3c2440的系統時(shí)鐘后,我們來(lái)控制串口.之所以將串口放在這么靠前,是因為串口會(huì )給我們帶來(lái)更多的信息.在沒(méi)有串口的時(shí)候,uboot啟動(dòng)階段只能靠led來(lái)顯示一些信息.那么有了串口,debug就方便很多了.在工作中,一般情況下,很少有機會(huì )用jtag口加上昂貴的codeviser工具進(jìn)行debug,也很少用gdb進(jìn)行遠程debug的,用的最多的還是打開(kāi)debug的define來(lái)分析確定問(wèn)題.

還是從s3c2440的datasheet開(kāi)始:

本文引用地址:http://dyxdggzs.com/article/201611/321724.htm

s3c2440A的UART提供3個(gè)獨立的異步串行IO口,每一個(gè)都支持中斷和DMA.換句話(huà)來(lái)說(shuō),UART可以產(chǎn)生中斷請求或DMA請求來(lái)在CPU和UART之間傳輸數據.UART在系統時(shí)鐘下最高支持115200的波特率.如果使用UEXTCLK的話(huà),UART可以工作在更高速的時(shí)鐘下.每個(gè)UART通道都有來(lái)年各個(gè)64字節的FIFO,一個(gè)是接收用的,一個(gè)是發(fā)送用的.

UART包括可編程的波特率,IR發(fā)送/接受,一或兩個(gè)停止位,5/6/7/8個(gè)數據位和奇偶校驗.

每個(gè)UART包括一個(gè)波特率產(chǎn)生器,發(fā)送器,接收器和一個(gè)控制單元.波特率產(chǎn)生器可以由PCLK FCLK/n 或者UEXTCLK來(lái)鎖定.發(fā)送器和接收器包含64字節的FIFO和數據移位器.數據首先寫(xiě)到FIFO中,然后在發(fā)送之前復制到發(fā)送器的移位器.最后數據移位通過(guò)TxDn數據發(fā)送管腳發(fā)送出去.同樣的,接收的數據通過(guò)RxDn接收數據管腳移位進(jìn)來(lái),然后從移位器拷貝到FIFO中.

UART的框圖如下:

值得說(shuō)的是:在FIFO模式下,buffer寄存器的所有64個(gè)字節都被用作FIFO寄存器.而在非FIFO模式下,buffer寄存器只有一個(gè)字節被用于Holding寄存器.

串口的操作:

串口操作包括如下:數據發(fā)送,數據接收,中斷產(chǎn)生,波特率產(chǎn)生,loopback模式,IR模式和自動(dòng)流控制.

數據發(fā)送:

發(fā)送的數據幀是可編程的.它包括一個(gè)開(kāi)始位,5到8個(gè)數據位,一個(gè)可選的校驗位和1到2個(gè)停止位,這些都在ULCONn寄存器中控制.發(fā)送器可以產(chǎn)生終止條件,可以在一個(gè)數據幀的發(fā)送時(shí)間內強制串口輸出為邏輯0.在當前的傳輸數據發(fā)送完成后會(huì )發(fā)送一個(gè)終止信號,在終止信號發(fā)送后,它會(huì )繼續發(fā)送數據到Tx FIFO(而在非FIFO模式下是Tx holding寄存器).

數據接收:

和發(fā)送一樣,接收的數據幀也是可編程的.它包括一個(gè)開(kāi)始位,5到8個(gè)數據位,一個(gè)可選的校驗位和1到2個(gè)停止位(ULCONn中設置).接收器可以探測overrun錯誤parity錯誤frame錯誤和終止條件,每一個(gè)都會(huì )設置一個(gè)錯誤標記.

overrun錯誤:在舊的數據被讀完之前新的數據覆蓋了舊的數據

parity錯誤:接收器探測到一個(gè)未知的校驗條件

frame錯誤:接收數據沒(méi)有有效的停止位

終止條件:RxDn輸入在長(cháng)于一個(gè)幀傳輸時(shí)間的期間內保持為邏輯0

中斷/DMA請求產(chǎn)生

每個(gè)UART有7個(gè)狀態(tài)信號(Tx/Rx/error):overrun error,parity error,frame error,break,接收緩沖數據準備,發(fā)送緩沖空和發(fā)送移位器空.所有都由對應的UART狀態(tài)寄存器(UTRSTATn/UERSTATn)來(lái)指示.

overrun錯誤,parity錯誤,frame錯誤和終止條件都是接收錯誤狀態(tài).如果UCONn的接收錯誤狀態(tài)中斷使能位被置位,每一個(gè)錯誤都可以引起接收錯誤狀態(tài)中斷請求.當一個(gè)接收錯誤狀態(tài)中斷請求被探測到,可以通過(guò)讀UERSTSTn來(lái)識別.

當在FIFO模式下接收器將數據從接收器的移位器發(fā)送到接收器的FIFO寄存器,接收的數據達到了Rx FIFO的觸發(fā)線(xiàn),Rx中斷產(chǎn)生.如果在控制寄存器(UCONn)接收模式被選為1(中斷請求或輪循模式).在非FIFO模式下,將數據從接收器的移位器發(fā)送到接收holding寄存器會(huì )引起Rx中斷(中斷請求和輪循模式下).

當發(fā)送器從發(fā)送器的FIFO寄存器發(fā)送數據到移位寄存器時(shí),發(fā)送器的FIFO中存留的數據數量小于Tx FIFO的觸發(fā)線(xiàn)時(shí),Tx中斷產(chǎn)生,如果控制寄存器的發(fā)送模式被選為中斷請求或者輪循模式.在非FIFO模式下,在中斷請求和輪循模式下從發(fā)送器的Holding寄存器發(fā)送數據到發(fā)送器的移位器會(huì )引起Tx中斷.

如果控制寄存器的接收模式和發(fā)送模式選為DMA請求模式,在上面提到的條件下DMA請求會(huì )取代Tx或者Rx中斷請求.

UART錯誤狀態(tài)FIFO

UART除了有Rx FIFO寄存器外還有錯誤狀態(tài)FIFO.錯誤狀態(tài)FIFO會(huì )指明在FIFO寄存器中哪個(gè)數據在接收時(shí)是錯誤的.當有錯的數據被讀出時(shí),錯誤中斷就產(chǎn)生.為了清除錯誤狀態(tài)FIFO,有錯誤的URXHn和UERSTATn就必須被讀出.

波特率的產(chǎn)生:

每個(gè)UART的波特率產(chǎn)生器為發(fā)送器和接收器提供特定的時(shí)鐘.波特率產(chǎn)生器的時(shí)鐘源可以選為內部系統時(shí)鐘或者UEXTCLK.換句話(huà)說(shuō),被除數由UCONn寄存器的時(shí)鐘選擇確定.波特率的時(shí)鐘由源時(shí)鐘(PCLKFCLK/nUEXTCLK)除以16和UART波特率除數寄存器(UBRDIVn)中的16bit除數.

公式如下:

UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1

( UART clock: PCLK, FCLK/n or UEXTCLK )

接下來(lái)看各個(gè)寄存器的描述:

UART LINE CONTROL REGISTER

ULCONn用來(lái)配置每一幀數據的格式的:

根據上圖,配置如下:

IR mode[6] = 0(普通模式) Parity Mode[5:3] = 0xx(無(wú)校驗) Number of Stop Bit[2] = 0(一個(gè)停止位)

word Length[1:0] = 11(8-bits)

UART CONTROL REGISTER

如果Uart的時(shí)鐘源用FCLK/n,那么FCLK Divider就是配置這個(gè)n的

這個(gè)地方就是配置Uart的時(shí)鐘源

Tx Interrupt Type [9] 中斷請求類(lèi)型:0是Pulse 1是Level

Rx Interrupt Type [8] 中斷請求類(lèi)型:0是Pulse 1是Level

Rx Time Out Enable [7] 在FIFO使能的情況下,是否打開(kāi)Rx Time Out中斷 0是關(guān)閉 1是打開(kāi)

Rx Error Status Interrupt Enable [6] 使能Uart對異常產(chǎn)生中斷,比如各種錯誤 0是關(guān)閉 1是打開(kāi)

Loopback Mode [5] 回環(huán)模式 0是普通模式 1是回環(huán)模式

Send Break Signal [4] 是否發(fā)送終止信號 0是正常 1是發(fā)送終止信號

Transmit Mode [3:2] 決定使用哪種功能來(lái)寫(xiě)數據到發(fā)送緩沖寄存器 01中斷請求或輪循模式

Receive Mode [3:2] 決定使用哪種功能來(lái)從接收緩沖寄存器讀數據 01中斷請求或輪循模式

UART FIFO CONTROL REGISTER


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: ARM匯編s3c2440串口控

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>