ARM7-LPC213x(五)UART0 和 UART1

本文介绍了LPC213x微控制器的两个串行接口UART0和UART1,包括它们的特性、管脚描述、结构框图、相关寄存器及基本操作。LPC2131的UART具有16字节FIFO、符合'550工业标准,并支持波特率发生器和中断功能。文章详细讲解了UART的配置、数据传输和中断处理,适用于嵌入式系统开发者。
摘要由CSDN通过智能技术生成

UART0 和 UART1

1、概述:
LPC2131 具有 2 个符合符合’550 工业标准的异步串行口(UART)UART0 和 UART1。
两者除了外设基地址以外,其它都相同,因而在这里统一进行描述。
2、特性:
(1)16 字节收发 FIFO;
(2)寄存器位置符合’550 工业标准;
(3)接收器 FIFO 触发点可为 1, 4, 8 和 14 字节;
(4)内置波特率发生器;
(5)LPC2131 包含使能实现软件流控制的机制。
3、管脚描述:
UART管脚描述如下
管脚名称 UART 管脚 功能描述 说明
P0.0 TxD0 串行输出 串行发送数据
P0.1 RxD0 串行输入 串行接收数据
P0.8 TxD1 串行输出 串行发送数据
P0.9 RxD1 串行输入 串行接收数据
管脚连接设置
当进行如下设置时将 P0.0、P0.1 选择 UART0 功能:

PINSEL0 = 0x00000005; // 可能影响其它管脚连接
PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 不影响其它管脚连接

当进行如下设置时将 P0.8、P0.9 选择 UART1 功能:

 PINSEL0 = 0x05 << 16; // 可能影响其它管脚连接
PINSEL0 = ( PINSEL0 & (~(0x0F << 16)) ) | (0x05 << 16); // 不影响其它管脚连接

4、结构框图:
在这里插入图片描述
UART 接收器模块 UxRx 监视串行输入线 RxD 的有效输入。UART Rx 移位寄存器(UxRSR)通过 RxD 接收有效的字符。当 UxRSR 接收到一个有效字符时,它将该字符传送到 UART Rx 缓冲寄存器 FIFO 中,等待 CPU 或主机通过主机接口进行访问。
UART 发送器模块 UxTx 接收 CPU 或主机写入的数据并将数据缓存到 UART Tx 保持寄存器 FIFO(UxTHR)中。UART Tx 移位寄存器(UxTSR)读取 UxTHR 中的数据并将数据通过串行输出管脚 TxD 发送。
UART 波特率发生器模块 UxBRG 产生 UART Tx 模块所使用的定时。UxBRG 模块时钟源为 VPB 时钟(pclk)。主时钟与 UxDLL 和 UxDLM 寄存器所定义的除数相除得到 UART Tx模块使用的时钟。该时钟为 16 倍过采样时钟 NBAUDOUT。
中断接口包含寄存器 UxIER 和 UxIIR。中断接口接收几个由 UxTx 和 UxRx 发出的单时钟宽度的使能信号。
UxTx 和 UxRx 的状态信息保存在 UxLSR 中。
UxTx 和 UxRx 的控制信息保存在 UxLCR 中。
5、相关寄存器:
UART0 和UART1 各自包含 11 个 8 位寄存器
在这里插入图片描述
除数锁存访问位(DLAB)位于 UxLCR7,它使能对除数锁存的访问。
6、基本操作:
LPC2131 的两个串口具有完全相同的寄存器,只是物理地址不一样,UART的基本寄存器功能框图如下图所示:
在这里插入图片描述
其中,寄存器UxRBR与UxTHR是同一地址,但物理上是分开的,读操作时为UxRBR,而写操作时为UxTHR;寄存器UxDLL与UxRBR/UxTHR、UxDLM与UxTER具有相同的地址。如果要访问UxDLM、UxDLL,除数访问位DLAB必须为 1,若要访问UxRBR/UxTHR、UxTER,则除数访问位DLAB必须为 0。如 图 4.19,UxDLM和UxDLL寄存器是波特率发生器的除数
锁存寄存器,用于设置合适的串口波特率;UxRBR为数据接收缓冲,用于读取接收到的数据,若FIFO使能,串口接收到的数据会压入FIFO缓冲;UxTHR为发送保存,向此寄存器写入数据时,将会引起串口数据发送,若FIFO使能,数据将会压入FIFO缓冲。
如前所述,波特率的除数计算如下:
16 × baud = Fpclk /UxDLM、UxDLL
其中,baud 为所需要的波特率。
在这里插入图片描述
如图所示,通过线控制寄存器LCR设置串口的工作模式,而FCR则用于FIFO的使能或者复位操作;当接收或者发送数据的时候,会产生相应的状态标志位(LSR);通过对IER进行设置,可实现串口的发送、接收、出错中断等。注意,IER中的位 0 为接收中断使能,位1 为发送中断使能,位 2 为线状态中断使能(通讯出错中断使能),若不使能相应的中断,对应的中断不会产生,此时可以通过LSR读取串口的状态判断串口操作是否完成或是否成功。
UART 的基本操作方法:
(1)设置 I/O 连接到 UARTx;
(2)设置串口波特率(UxDLM、UxDLL);
(3) 设置串口工作模式(UxLCR、UxFCR );
(4)发送或接收数据(UxTHR、UxRBR);
(5)检查串口状态字(UxLSR)或者等待串口中断(UxIIR)。
1. UART接收器缓存寄存器-UART Receiver Buffer Register
(U0RBR - 0xE000C000,U1RBR - 0xE0010000)
UxRBR 是 UART Rx FIFO 的最高字节。它包含了最早接收到的字符,可通过总线接口读出。LSB(bit0)代表最早接收到的数据位。如果接收到的字符小于 8 位,未使用的 MSB填充为 0。如果要访问 UxRBR,UxLCR 的除数锁存访问位(DLAB)必须为 0。UxRBR 为只读寄存器。由于 PE、FE 和 BI 位与 RBR FIFO 顶端的字节相对应(即下次读 RBR 时读出的字节),因此,将接收的字节及其状态位成对读出的正确方法是先读 U0LSR,再读 U0RBR。
在这里插入图片描述
2. UART发送器保持寄存器-UART Transmitter Holding Register
(U0THR - 0xE000C000,U1THR - 0xE0010000)
UxTHR 是 UART Tx FIFO 的最高字节,它包含了 Tx FIFO 中最新的字符,可通过总线接口写入。LSB 代表最先发送的位。
如果要访问 UxTHR,UxLCR 的除数锁存访问位(DLAB)必须为 0。U0THR 为只写寄存器。
在这里插入图片描述
3. UART除数锁存LSB寄存器-UART Divisor Latch LSB Register
(U0DLL - 0xE000C000,U1DLL - 0xE0010000)
4. UART除数锁存MSB寄存器-UART Divisor Latch MSB Register
(U0DLM - 0xE000C004,U1DLM - 0xE0010004)

除数锁存是波特率发生器的一部分,它保存了用于产生波特率时钟的 VPB 时钟(pclk)
分频值,波特率时钟必须是波特率的 16 倍,等式如下:
16 × baud = Fpclk /UxDLM、UxDLL
UxDLL 和 UxDLM 寄存器一起构成一个 16 位除数,UxDLL 包含除数的低 8 位,UxDLM包含除数的高 8 位。值 0x0000 被看作是 0x0001,因为除数是不允许为 0 的。当访问 UART 除数锁存寄存器时,除数锁存访问位(DLAB)必须为 1。
在这里插入图片描述
在这里插入图片描述
5. UART FIFO控制寄存器-UART FIFO Control Register
(U0FCR - 0xE000C008,U1FCR - 0xE0010008)

UxFCR 控制 UART Rx 和 Tx FIFO 的操作。
在这里插入图片描述
6. UART线控制寄存器-UART Line Control Register
(U0LCR - 0xE000C00C,U1LCR - 0xE001000C)

UxLCR 决定发送和接收数据字符的格式。
在这里插入图片描述
在这里插入图片描述
7. UART线状态寄存器-UART Line Status Register
(U0LSR - 0xE000C014,U1LSR - 0xE0010014)

UxLSR 为只读寄存器࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值