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.
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 (串口中断屏蔽寄存器)
后面三个寄存器没用到过,应该不太常用,等以后用到了具体详解再补充!