UART概述(下)

Introduction

UART作为一个连接到APB的AMBAslave模块,提供了:

  • 符合AMBA规范(Rev 2.0),便于集成到SoC实现。

  • 分离的32×8的transmit FIFO和32×12的receive FIFO,以减少CPU中断。

  • 可编程的波特率发生器。这样就可以将参考时钟按(1×16)划分到(65535×16),并生成一个内部的×16时钟。除数可以是一个小数,使得可以使用任何频率为>3.6864MHz的时钟作为参考时钟。

  • 标准异步通信位(start、stop和parity),在transmit之前添加,在receive时删除。

  • 支持直接内存访问(DMA)。

  • start bit检测错误。

  • 断行产生和检测。

  • 支持调制解调器控制功能CTS, DCD, DSR, RTS, DTR和RI。

  • 可编程硬件流控制。

  • 标识寄存器唯一标识UART。操作系统可以使用它们来自动配置自身。

其可编程参数如下:

  • 通信波特率,包括整数和小数部分。
  • 数据位的数量。
  • 停止位的数量。
  • 奇偶校验方式。
  • FIFO使能(32 字节深度)或禁用(1 字节深度)。
  • FIFO触发级别,可选择1/8,1/4,1/2,3/4,和7/8。
  • 内部名义时钟频率1.8432MHz (1.42-2.12MHz)。
  • 硬件流控制。

Functional Overview

Overview

  1. UART执行的动作为:

• 对从外围设备接收到的数据进行串行到并行转换。

• 对传输到外围设备的数据进行并行到串行转换。

CPU通过AMBA APB接口读写数据和控制/状态信息。发送和接收路径用内部FIFO存储器缓冲。

  1. UART提供了·:

• 包括一个可编程波特率发生器,从UART内部参考时钟输入UARTCLK生成一个通用的发送和接收内部时钟。

• 支持以下最大波特率:

  • 921600bps, UART模式。

  • 460800bps,在IrDA模式。

  • 115200bps,在低功耗IrDA模式。

Functional description

下图为UART的结构框图:
在这里插入图片描述

  1. AMBA APB interface
    AMBA APB接口为访问状态/控制寄存器生成读和写解码,以及发送和接收FIFO。
  2. Register block
    寄存器块存储通过AMBA APB接口写入或读取的数据。
  3. Baud rate generator
    波特率生成器包含自由运行的计数器,生成内部×16时钟、Baud16和IrLPBaud16信号。
    Baud16为UART发送和接收控制提供时序信息。Baud16是一个宽度为一个UARTCLK时钟周期、频率为波特率16倍的脉冲流。
    IrLPBaud16提供时序信息以在低功耗IrDA模式下产生IrDA编码传输比特流的脉宽。
  4. Transmit FIFO
    Transmit FIFO是一个8位宽,32位深的FIFO内存缓冲。通过APB接口写入的CPU数据存储在FIFO中,直到由transmit逻辑读出。可以禁用transmit FIFO,以充当一个字节的保持寄存器。
  5. Receive FIFO
    Receive FIFO是一个12位宽,32位深的FIFO内存缓冲。接收到的数据和相应的error bits,由Receive逻辑存储在Receive FIFO中,直到CPU通过APB接口读出。Receive FIFO可以被禁用,以充当一个字节的保持寄存器。
  6. Transmit logic
    Transmit逻辑对从 Transmit FIFO读取的数据执行并行到串行转换。根据控制寄存器中的程序配置,控制逻辑输出以起始位开始的串行比特流,以最低有效位(LSB)开头的数据位,然后是奇偶位,然后是停止位。
  7. Receive logic
    在检测到有效的启动脉冲后,Receive逻辑对接收的比特流执行串行到并行转换。溢出、奇偶校验、帧错误检查和断行检测也被执行,它们的状态伴随着写入到Receive FIFO的数据。
  8. Synchronizing registers and logic
    UART同时支持异步时钟PCLK和同步UARTCLK的操作。同步寄存器和握手逻辑已经实现,并且在任何时刻都是active的。这对性能的影响很小。控制信号的同步是在数据流的两个方向上进行的,即从PCLK到UARTCLK domain和从UARTCLK到PCLK domain。
  9. Test registers and logic
    有用于功能块验证的寄存器和逻辑,以及使用TicTalk或基于代码向量的集成测试。
    在正常使用期间,不能读取或写入测试寄存器。
    集成测试可以验证UART是否正确地连接到系统中,它允许对每个输入和输出进行写入和读取。

Operation

  • Interface reset
    UART由全局复位信号PRESETn复位。PRESETn必须在足够长的时间内保持LOW状态,以复位片上系统中最慢的块,然后再次被拉高。UART要求PRESETn在至少一个PCLK周期内被断言为LOW。
  • Clock signals
    UARTCLK选择的频率必须适应波特率的要求范围:
    • FUARTCLK (min) 大于等于 16 × baud_rate (max)
    • FUARTCLK(max) 小于等于 16 × 65535 × baud_rate(min)
    PCLK和UARTCLK的时钟频率比率也有限制。UARTCLK的频率必须小于等于PCLK频率的5/3倍。
  • UART operation
    控制数据被写入UART线路控制寄存器UARTLCR。这个寄存器内部是30-bit的,但是外部通过APB接口通过写入以下寄存器来访问UARTLCR:
    UARTLCR_H定义:
    传输参数
    word长度
    缓冲模式
    传输停止位的数量
    奇偶校验方式
    break的产生
    UARTIBRD:定义波特率整数分割器
    UARTFBRD:定义波特率分压器
  • 数据传输或接收
    数据接收或传输存储在两个32字节的FIFO,尽管receive FIFO有一个额外的每个字符四位的状态信息。
    传输时,数据写入transmit FIFO。如果启用了UART,它会导致数据帧以UARTLCR_H中指示的参数开始传输。数据继续被传输,直到在transmit FIFO中没有数据留下为止。当数据被写入到transmit FIFO(即FIFO非空)时,BUSY信号变为HIGH,并在数据被传输时保持为高。BUSY只有在transmit FIFO为空,并且最后一个字符已经从移位寄存器(包括停止位)传输时才被否定。即使UART可能不再启用,BUSY也可以被断言为HIGH。
    当receiver闲置以及在数据中检测到了低电平信号(起始位已收到),接收counter,由Baud16启用时钟,开始运行和数据采样。
    如果起始位有效,则根据程序设定的数据字符长度,每16个Baud16周期(即后一个比特周期)对连续的数据位进行采样。如果奇偶校验模式已启用,则检查奇偶校验位。
    最后,如果UARTRXD为HIGH,则确认一个有效的停止位,否则发生了帧错误。当接收到一个完整的word时,数据存储在接收FIFO中,其中包括相关的错误位。
  • Error bit
    三个error位存储在Receive FIFO的[10:8]位中,并与一个特定的字符相关联。有一个额外的错误表明一个溢出错误,存储在Receive FIFO的第11位。
  • Overrun bit(溢出位)
    溢出位与Receive FIFO中的字符没有关联。溢出错误设置时,FIFO是满的,下一个字符是完全接收到移位寄存器。移位寄存器中的数据被覆盖,但它不写入FIFO。当Receive FIFO中有空位置可用,并且接收到另一个字符时,溢出位的状态将与接收到的字符一起复制到Receive FIFO中。然后清除溢出状态。Receive FIFO的位功能如下表所示。
    在这里插入图片描述
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值