打印
[uCOS/RTOS]

UART0串口编程系列(二)-串口编程(UART0)之中断方式(上)

[复制链接]
1816|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
无限幻想|  楼主 | 2013-8-20 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

三.        中断方式的串口编程

1.用中断方式编写串口程序由那几部分组成

2.硬件上的支持

1>UART0 发送FIFO缓冲区

A.        UART0含有1个16字节的发送FIFO缓冲区

B.        U0THR是UART0发送FIFO的最高字节

C.        UART的发送FIFO是一直使能的

2>UART0接收FIFO缓冲区

A.    UART0含有一个16字节的接收FIFO缓冲区。

B.    软件设置接收FIFO缓冲区的触发字节。


3>  中断接口:UART0的中断接口包含中断使能寄存器(U0IER)和中断标识寄存器(U0IIR)。

l  U0IIR:提供状态码用于指示一个挂起中断的中断源和优先级。

l  U0IER可以控制UART0的4个中断源。

4>  UART0有4个中断源:

A.    RLS(接收线状态)中断:

(1) 优先级最高

(2) 它在以下条件发生时产生错误

l  帧错误(FE)

l  溢出错误(OE)

l  奇偶错误(PE)

l  间隔中断(BI)

注:

Ø  可以通过查看U0LSR[4:1]中的值看到产生该中断的错误条件

Ø  读取U0LSR寄存器时清除该中断。

B.    RDA(接收数据可用)中断:

(1)与CTI中断并列第二优先级。

(2)在以下情况触发中断:

l  当接收的有效数据到达接收FIFO设置寄存器(U0FCR)中设置的触发点时,RDA被激活。当接收FIFO中的有效数据少于触发点时,RDA复位。

l  中断过程:

1>  移位寄存器(U0RSR)从RxD引脚接收串行数据后,送入接收FIFO中

2>  当接收FIFO中的有效数据数量达到预定的触发点时,置位RDA中断。

3>  从U0RBR寄存器中读取FIFO中最早到达的数据,当FIFO中的有效数据小于触发点时,清零RDA中断。

C.    CTI(字符超时指示)中断

(1) 优先级为2.

(2) 在以下情况发生中断:

l  当接收FIFO中的有效数据少于预定的触发点数量时,如果在一定时间内仍没有接收到新的数据,那将触发该中断。

(3) 上面的时间指的是:3.5~4.5个字节所需要的时间。

(4)  对接收FIFO的任何操作都会清零该中断标志。

(5) 中断过程:

l  移位寄存器(U0RSR)从RxD0引脚接收串行数据后,送入接收FIFO中。

l  当接收FIFO中的有效数据少于触发个数,但如果长时间没有数据到达,则触发CTI中断。

l  从U0RBR中读取接收FIFO中的数据,或者有新的数据送入接收FIFO,都将清零CTI中断。

注:

Ø  3.5~4.5个字节的时间:指在串口当前的波特率下,发送3.5~4.5个字节所需要的时间。

Ø  当接收FIFO中存放多个数据,从U0RBR读取数据,但是没有读完所有数据,那么在经过3.5~4.5个字节的时间后触发CTI中断。

D.   THRE(发送)中断

(1) 优先级为第三级优先级。

(2) 当FIFO为空并且在以下情况触发中断:

l  系统启动时,虽然发送FIFO为空,但不会产生THRE中断。

l  在上一次发生THRE中断后,向发送FIFO中写入1个字节数据,将在一个字节加上一个停止位后发生THRE中断

(because:如果发送移位寄存器为空,那么写入发送FIFO的数据将直接进入发送移位寄存器。此时发送FIFO仍然为空,如果立即产生THRE中断,就会影响紧接着写入发送FIFO的数据。

所以在发送完该一个字节以及一个停止位后,才产生THRE中断。

l  如果在发送FIFO中有过两个字节以上的数据,但是现在发送FIFO为空时,将立即触发THRE中断。

l  当THRE中断为当前有效的最高优先级中断时,往U0THR写数或者对U0IIR的读操作,将使THRE中断复位

我们来看看这些中断源与存储器之间的关系:

注:

Ø  由上图可知:UART0有4个中断源:分别是RLS(线状态)中断,RDA(接收数据)中断,CTI(字符超时)中断,THRE(发送数据)中断。

Ø  4个中断源的优先级如下图所示:


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

27

帖子

0

粉丝