6.S5PV210串列埠通訊相關的暫存器詳解
Register Description(暫存器描述):
1.There are fourUART line control registers in the UART block, namely, ULCON0, ULCON1, ULCON2, and
ULCON3.
1.Infrared mode(紅外模式)[6]:
決定是否使用紅外模式。0:正常模式操作 1:紅外接收/傳送模式
2.Parity mode(奇偶檢驗模式)[5:3]:
在串列埠傳送和接收資料時指定奇偶檢驗型別。
0xx:沒有校驗位
100:奇校驗
101:偶檢驗
110:奇偶校驗 / 校驗1
111:奇偶校驗 / 校驗0
3.Number of Stop Bit(停止位個數)[2]:
0:每幀一位停止位
1:每幀兩位停止位
4.Word Length(字長)[1:0]:
指定每幀有效位資料長度。
00:5位 01:6位 10:7位 11:8位
2.There are four UART control registers in the UART block, namely, UCON0, UCON1, UCON2 and UCON3.
①Tx DMA Burst Size(Tx DMA Burst大小)[20]:
DMA模式傳送資料時把傳送的資料總量分成一個一個小的資料塊進行傳送。比如傳送32個位元組,DMA通過2次傳送,那麼一次就傳送16個位元組,這個2^a次就叫做Burst,而每次傳送的位元組大小就是這裡設定的Burst Size。
0: 1個位元組 1: 4個位元組
②Rx DMA Burst Size [16]:
詳解如上。
0: 1個位元組 1: 4個位元組
③Clock Selection(時鐘選擇)[10]:
從時鐘控制器中選擇PCLK或SCLK_UART作為串列埠中的波特率發生器時鐘訊號。
0: PCLK。DIV_VAL1) = ( PCLK/(bps/16) )-1
1: SCLK_UART。DIV_VAL1) = ( SCLK_UART/(bps/16) )-1
④Tx Interrupt Type(傳送中斷型別)[9]:
傳送中斷請求型別
0: 脈衝式/邊沿式(在非FIFO模式時當Tx緩衝區為空時產生中斷請求,在FIFO模式下當Tx FIFO中資料達到一定的觸發水平時產生中斷)
1: 電平觸發模式(同上)
⑤Rx Interrupt Type(接收中斷型別)[8]:
接收中斷請求型別
0: 脈衝式/邊沿式(在非FIFO模式時當Rx緩衝區接收資料瞬間產生中斷請求,在FIFO模式下當Rx FIFO中資料達到一定的觸發水平時產生中斷)
1: 電平觸發模式(同上)
⑥Rx Time Out Enable(接收超時使能)[7]:
如果串列埠FIFO使能,選擇使能/失能接收超時中斷,這個中斷是一個接收中斷。
0: 使能 1: 失能
⑦Rx Error Status Interrupt Enable(接收錯誤中斷使能)[6]:
當UART接收異常時是否產生一個接收錯誤中斷,例如:在接收資料時產生中斷、幀錯誤、奇偶檢驗錯誤、溢位錯誤等。
0: 不生成接收錯誤狀態中斷
1: 生成接收錯誤狀態中斷
⑧Loop-back Mode(迴環模式)[5]:
迴環模式在這裡僅僅提供作為測試用。在設計系統的具體應用時,為了判斷通訊故障是由於外部的資料鏈路上的問題還是CPU內驅動程式或CPU本身問題,這時可以使用Loop-back模式來進行測試。
0: 正常操作
1: Loop-back模式
⑨Send Break Signal(傳送中斷訊號)[4]:
這個位用來在傳送一幀資料期間串列埠會發送一箇中斷訊號,在傳送完中斷訊號後這個位會被自動清除。
0: 正常傳送
1: 傳送中斷訊號
⑩Transmit Mode(傳送模式)[3:2]:
這個位是用來決定使用哪種模式傳送資料到傳送串列埠傳送緩衝區暫存器。
00: 失能
01: 中斷請求或者輪詢模式
10: DMA模式
⑪Receive Mode(接收模式)[1:0]:
決定使用哪種模式從接收快取區暫存器讀取資料。
00: 失能
01: 中斷請求或者輪詢模式
10: DMA模式
3.There are fourUART FIFO control registers
in the UART block, namely, UFCON0, UFCON1, UFCON2 and
UFCON3.
①Tx FIFO Trigger Level(傳送FIFO觸發水平)[10:8]:
確定傳送FIFO觸發水平,如果傳送FIFO的資料總數小於或等於觸發水平,將會產生髮送中斷。(具體觸發水平的值直接看上面暫存器就好了,很容易)
②Rx FIFO Trigger Level(接收FIFO觸發水平)[6:4]:
確定接收FIFO觸發水平,如果接收FIFO的資料總數大於或等於觸發水平,將會產生接收中斷。(具體觸發水平的值參考上圖)
③Tx FIFO Reset (傳送FIFO復位)[2]:
復位FIFO後自動清除FIFO中的資料。 0: 正常 1: 復位傳送FIFO
④Rx FIFO Reset(接收FIFO復位)[1]:
同上。0: 正常 1: 復位接收FIFO
⑤FIFO Enable(使能FIFO)[0]:
0: 不使能 1: 使能
4.There are three UART MODEM control registers in the UART block, namely, UMCON0, UMCON1 and UMCON2.
這個暫存器是和自動流控制(AFC)相關的訊號設定。
①RTS Trigger Level(RTS觸發水平)[7:5]:
確定接收FIFO控制nRTS訊號的觸發水平,在開啟AFC功能且接收FIFO中的資料大於或者等於觸發水平時,nRTS訊號被失效。(具體觸發水平的位元組總數參考上圖即可)
②Auto Flow Control(AFC)(自動流控制)[4]:
0: 不使能 1: 使能
③Modem Interrupt Enable[3]:
0: 不使能 1: 使能
④Request to Send(請求傳送)[0]:
如果AFC使能,這個位將被忽略,S5PV210硬體自動控制nRTS訊號,如果AFC不使能,這個位必須由軟體來控制nRTS的訊號。
0: 高電平 (nRTS訊號無效)
1: 低電平(nRTS訊號有效)
5.There are fourUART Tx/Rx status registers
in the UART block, namely, UTRSTAT0, UTRSTAT1, UTRSTAT2 and UTRSTAT3.
①Transmitter empty(傳送方為空)[2]:
如果傳送快取暫存器沒有有效的資料傳輸且傳送移位暫存器也為空,那麼這個位會被自動置1.
0: 不為空
1: 傳送方為空(包括髮送快取暫存器和傳送移位暫存器)
②Transmit buffer empty(傳送緩衝區為空)[1]:
如果傳送緩衝區為空,這個位被自動設為1.
0: 不為空
1: 為空(此時,如果是非FIFO模式,中斷或DMA被請求。如果是FIFO模式且FIFO觸發水平位元組為0,那麼也會產生中斷或DMA請求)
注:如果串列埠使用FIFO模式,檢查傳送FIFO計數位或者傳送FIFO填充位在UFSTAT暫存器中,而不是這個位。
③Receive buffer data ready(接收緩衝區準備接收資料)[0]:
如果接收快取暫存器中有有效資料這個位自動置1.
0: 接收快取暫存器為空
1: 接收快取暫存器有接收的資料
6.There are four UART Rx error status registers in the UART block, namely, UERSTAT0, UERSTAT1, UERSTAT2 and UERSTAT3.
接收錯誤狀態暫存器(下面說的都是接收資料時產生的狀態):
①Break Detect(中斷檢測)[3]:
當產生一箇中斷訊號時這個位被自動置1.
0: 沒有接收到中斷訊號
1: 接收到中斷訊號(有中斷請求)
②Frame Error(幀錯誤)[2]:
0: 沒有幀錯誤產生
1: 有幀錯誤產生
③Parity Error(奇偶校驗錯誤)[1]:
0: 沒有奇偶校驗錯誤
1: 有奇偶校驗錯誤
④Overrun Error(溢位錯誤)[0]:
0: 沒有溢位錯誤
1: 有溢位錯誤產生
7.UFSTAT3, R, Address = 0xE290_0C18 There are four
UART FIFO status registers in the UART block, namely,UFSTAT0, UFSTAT1, UFSTAT2 and UFSTAT3 .
串列埠FIFO狀態暫存器(UFSTATn):
①Tx FIFO Full(傳送FIFO滿標誌位)[24]:
0: 沒有滿 1: 滿
②Tx FIFO Count(傳送FIFO中資料總數)[23:16]
③Rx FIFO Error(接收FIFO錯誤)[9]:
如果接收FIFO包含有由於幀錯誤、奇偶校驗錯誤或者中斷訊號導致產生的無效資料,這個位被設定為1.
④Rx FIFO Full(接收FIFO滿標誌位)[8]:
0: 沒有滿 1: 滿
⑤Rx FIFO Count(接收FIFO中資料總數)[7:0]:
8.There are three
UART modem status
registers in the UART block, namely, UMSTAT0, UMSTAT1 and UMSTAT2.
這個狀態暫存器也和自動流控制有關:
①Detal CTS [4]:
這一個位表示從上次讀取到的nCTS狀態現在被改變。
0: 沒有被改變 1: 被改變了
②Clear to Send [0]:
0: CTS訊號沒有被啟用(此時CTS訊號為高電平)
1: CTS訊號被啟用(此時CST訊號為低電平)
9.There are four
UART transmit buffer registers in the UART block, namely, UTXH0, UTXH1, UTXH2 and UTXH3.UTXHn contains 8-bit data for transmission data.
串列埠傳送快取暫存器(Holding Register & FIFO Register) :
UTXHn [7:0]:
這裡可以寫入串列埠要傳送的資料。
10.There are four UART receive buffer registers in the UART block, namely, URXH0, URXH1, URXH2 and URXH3.URXHn contains 8-bit data for received data.
串列埠接收快取暫存器(Holding Register & FIFO Register) :
URXHn [7:0]:
這裡可以讀出串列埠接收到的資料。
11.UART Channel Baud Rate Division Register
串列埠波特率設定相關的暫存器(存放整數部分):
UBRDIVn [15:0]:
這裡是用來設定波特率相關的除數。
注: 當串列埠時鐘源為PCLK時,這個值必須大於0.
12.UART Channel Dividing Slot Register
串列埠波特率設定相關的暫存器(存放小數部分):
波特率相關的具體演算法舉例:
這裡需要用到兩個暫存器,UBRDIVn(存放整數部分)和UDIVSLOTn(存放小數部分):
DIV_VAL = UBRDIVn + (num of 1's in UDIVSLOTn)/16
DIV_VAL = (PCLK / (bps x 16))
-1
or
DIV_VAL = (SCLK_UART / (bps x 16)) -1
例如我們要設定波特率為115200,時鐘選擇SCLK_UART為40MHz。那麼UBRDIVn和UDIVSLOTn的值分別為:
DIV_VAL=(40000000/ (115200/16) ) - 1 = 20.7
那麼UBRDIVn(整數部分)就是20。
由於小數部分是0.7,那麼根據(num of 1's in UDIVSLOTn)/16=0.7 可以知道num of 1's in UDIVSLOTn=11.2
參照下面這個表,就可以將UBRDIVn設定為0xDDD5(1101_1101_1101_0101b)或者任意含有11為“1”的十六進位制數。這個表是官方推薦的數值。
13.UART Interrupt Pending Register
串列埠中斷掛起暫存器:
如果上面4個位中有一個被置邏輯高電平,那麼每一個串列埠通道都會產生中斷。
14.UART Interrupt Source Pending Register (串列埠中斷源掛起暫存器)
15.UART Interrupt Mask Register (串列埠中斷遮蔽暫存器)
後面三個暫存器沒用到過,應該不太常用,等以後用到了具體詳解再補充!