U0RBR:接纳器缓存寄存器
拜访时,先要设定 U0LCR 的除数锁存拜访位(DLAB)为 0。因为,U0DLL 与U0RBR/U0THR 在同一地址上。
DLAB = 1 时,挑选 U0DLL 和 U0DLM (U0DLM 和 U0IER 在同一个地址上);
DLAB = 0 时,挑选 U0RBR/U0THR 和 U0IER。
U0DLL 和 U0DLM:
构成一个 16 位的除数。
VPB时钟(pclk) 是产生波特率的时钟源,波特率时钟源有必要是波特率的16倍,所以有:
baud_rate = pclk/(16*设定的除数)
UART0 的中止:
有 4 个中止,分别是:
RBR 中止; THRE 中止; Rx 线中止;
其间 RBR 中止里边包括有2个中止:数据可用RDA中止 和 接纳超时 CTI 中止。
FAQ一:
1、什么是 RDA 中止?
当接纳的有用数据抵达接纳FIFO设置寄存器(U0FCR)中设置的触发点时,RDA中止被激活。
U0FCR[7:6]=00 触发点 0(1字节); U0FCR[7:6]=01 触发点 1(4字节);
U0FCR[7:6]=01 触发点 2(8字节);U0FCR[7:6]=01 触发点 1(14字节);
产生中止后,U0IIR[3:0] 内容为:0100。
假如产生中止后,读一下 U0RAR 寄存器,那么就会得到最早抵达的数据。这时,FIFO 中的有用数据小于预订触发点,清零 RDA 中止。
该中止的优先级为 2 。
2、什么是 CTI 中止?
在接纳 FIFO 中,有用的数据少于触发个数时,但至少有一个时,假如长期没有数据抵达,将触发 CTI 中止。这儿所说的“长期”是指在 接纳 3.5~4.5 个字节所需求的时刻。产生中止,则U0IIR[3:0] 内容为:1100。在中止后,若从 U0RBR 中读取接纳FIFO中的数据,或许有新的数据送入接纳FIFO中,这都将清零 CTI 中止。
该中止的优先级为 2。
3、什么是 THRE 中止?
THRE中止是发送中止。产生 THRE 中止的前提条件是FIFO 有必要为空。
假定刚刚产生了一次 THRE 中止,也便是说这时 FIFO 中为空。那么现在往 FIFO 中写入 1 个字节的数据,因为FIFO本来是空的,那这个字节的数据就会被直接写到移位寄存器 U0TSR中,这时 FIFO 必定又是空的。尔后,假如在发送完之前那个字节和中止位后,若还没有数据进来,就会触发 THRE 中止了。那为什么要等这段时刻呢?因为假如当即产生中止,而一起又有数据要进来,则中止就会打断数据的传送。
假定,本来 FIFO 中已经有2个或2个以上的数据,那么FIFO送出这两个数据后就空掉了,那就会当即触发中止。
当 THRE 中止为当时有用的最高优先级中止时,往 U0THR 写数据,或许对 U0IIR 的读操作,将使 HTRE中止复位。
在U0IIR 中,THRE的中止代码为:0110。
该中止的优先级为 3 。
4、什么是 RLS 中止。
RLS中止优先级最高。它产生在 UART0 产生了四个过错中的任何一个时。这四个过错是:
溢出过错(OE)、奇偶过错(PE)、 帧过错(FE)、距离中止(BI)
产生RLS中止时,经过检查 线状况寄存器 U0LSR[4:1] 就可以知道是因为那个过错触发了 RLS 中止。读取 U0LSR 时铲除该中止。
FAQ二:
1、什么是 OE 溢出?
接纳时,在 U0RBR 寄存器中已经有新的字符安排妥当,而此刻接纳 FIFO 正好满了,就产生了溢出。这时 U0LSR[1]
= 1,另触发 RLS 中止。
2、什么是奇偶过错?
奇偶校验过错是在使能奇偶校验之后,对一切接纳的数据都进行奇偶校验,假如与 线状况控制器U0LCR 中的设置不符,将引起奇偶校验过错。(数据位+校验位)
U0LCR[3] = 1 使能奇偶产生和校验;0,则制止。
U0LCR[5:4] = 00 奇数校验; U0LCR[5:4] = 01 偶数校验; U0LCR[5:4] = 10 强制为 1;
U0LCR[5:4] = 11 强制为0。
强制为1或强制为0的意思便是强制校验必为奇或必为偶。
3、什么是帧过错?
当接纳字符的中止位为 0 时,产生帧过错
4、什么是距离过错?
在发送数据时,假如RXD0引脚坚持低电平,将产生距离中止。产生距离中止后,接纳模块中止数据接纳。