Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1589246
  • 博文数量: 354
  • 博客积分: 8137
  • 博客等级: 中将
  • 技术积分: 5137
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-26 15:40
文章分类

全部博文(354)

文章存档

2010年(300)

2009年(54)

分类: 嵌入式

2010-06-24 07:30:30

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引脚保持低电平,将产生间隔中断。发生间隔中断后,接收模块停止数据接收。

阅读(1980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~