分享

串口中断类型

 笔录收藏 2012-08-27

关于串口0终端服务程序IRQ_UART0()

 

U0IIR?

答:U0IIR是接收器缓存寄存器

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的意思就是强制校验必为奇或必为偶。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多