14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)

 

一、UART 功能描述
串口 UART 也称为通用异步收发器。是各种处理器中常用了通信接口,在 nRF52 芯片中, UART
具有以下特点:
● 全双工操作
● 自动流控
● 奇偶校验产生第 9 位数据
串口 UART 的数据发送与接收流程 :
◆硬件配置:
根据 PSELRXD、PSELCTS、PSELRTS 和 PSELTXD 寄存器的配置可以相应的将 RXD、CTS(发送清除、 低有效)、TXD、RTS(发送请求、低有效)映射到物理的引脚上。如果这些寄存器的任意一个设为 0xffffffff,相关的 UART 信号就不会连接到任务物理引脚上。这四个寄存器及其配置只能在 UART 使能时可用,可以在芯片为系统 ON 模式时保持。为了在系统处于 OFF 关闭模式时通过 UART 确保引 脚上的信号电平正确,必须按照 GPIO 外设中的说明在 GPIO 外设中配置引脚。如下表 7.1 所示:
图片[1]-14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug
◆UART 发送:
如图 7.1 所示,通过触发 STARTTX 任务启动 UART 传输序列。然后通过写入 TXD 寄存器来发
送字节。成功发送一个字节后,UART 将产生一个 TXDRDY 事件,之后可以将一个新字节写入 TXD 寄 存器。通过触发 STOPTX 任务立即停止 UART 传输序列。如果启用了流量控制,则在 CTS 取消激活时 将自动暂停传输,并在再次激活 CTS 时恢复。在 CTS 被停用时正在传输的字节将在传输暂停之前被 完全传输。
◆UART 接收:
通过触发 STARTRX 任务启动 UART 接收序列。UART 接收器连接了一个 FIFO,能够在数据被覆盖 之前存储六个传入的 RXD 字节。 通过读取 RXD 寄存器从该 FIFO 中提取字节。当从 FIFO 中提取一 个字节时,FIFO 中待处理的新字节将被移动到 RXD 寄存器。 每次将新字节移入 RXD 寄存器时,UART 都会产生 RXDRDY 事件。
当启用流量控制时,如果接收器 FIFO 中只有 4 个字节的空间时,UART 将禁用 RTS 信号。启用
流量控制状态下在重写数据之前,发送器能够在 RTS 信号激活之后发送多达四个字节。因此为防止 覆盖 FIFO 中的数据,对应的 UART 发送器必须确保在 RTS 线停用后在四个字节时间内停止发送数据。
当 FIFO 清空时,首先再次激活 RTS 信号;CPU 读取 FIFO 中的所有字节后,接收器通过 STOPRX 任务 停止时,RTS 信号也将被禁用;
为防止输入数据丢失,必须在每次 RXDRDY 事件后读取 RXD 寄存器一次。为了确保 CPU 可以通
过 RXDRDY 事件寄存器检测所有输入的 RXDRDY 事件,必须在读取 RXD 寄存器之前清零 RXDRDY 事件 寄存器。这样做的原因是允许 UART 将新字节写入 RXD 寄存器,在 CPU 读取(清空)RXD 寄存器后立 即生成新事件。
图片[2]-14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug
◆UART 挂起:
UART 串口可以通过触发 SUPSPEND 寄存器任务来挂起。SUPSPEND 将会影响 UART 发送器和 UART 接收器,设置后使发生器停止发送,接收器停止接收。在 UART 挂起后,通过相应的触发 STARTTX 和 STARTRX 就可以重新开启发送和接收。
当触发 SUPSPEND 任务时,UART 接收器和触发 STOPRX 任务一样的工作。
在触发 SUPSPEND 任务后,正在进行的 TXD 字节传输将在 UART 挂起前完成。
◆错误条件:
在一个错误帧出现的情况下,如果再此帧中没有检测到有效的停止位会产生一个 ERROR 事件。
另外,在中断时,如果 RXD 保持低电平超过一个数据帧长度时,也会产生一个 ERROR 事件。
◆流量控制:
nRF52 芯片的 UART 可以分为带流量控制和不带流量控制两种方式。不带流量控制时,不需要
连接 CTS RTS 两个管脚,可以视为两个管脚一值有效。
带流量控制时, RTS 引脚作为输出,由 UART 硬件模块自动控制。与接收寄存器的多级硬件缓
Buff 协调工作。比如在硬件缓冲已经接收满了 6 个字节的时, RTS 引脚就输出高电平的终止信号,
当缓冲中的数据都被读出后回复有效信号(低电平)。
CTS 作为输入由外部输入。当 CTS 有效时(低电平)模块可以发送,当为无效时,模块自动
暂停发送,并在 CTS 恢复有效时继续发送。
那么当 uart 模块的 rts cts 交叉相接。 如果发送方发送太快,当接收方的接收硬件 buff 已经
存满了字节后,接收方自动无效 RTS 信号,表示不能接收了。因为接收方 RTS 与发送方 CTS 相接,
使得发送方的 CTS 也编程无效信号,于是发送方自动停止发送。这样就保证了接收方不会接收溢出。
流量控制也就是体现在这里。
二、UARTE 功能介绍
UARTE 就是带有 EasyDMA 的通用异步接收器 / 发送器 UART 。提供快速、全双工、异步的串

行通信,内置流量控制( CTS RTS )支持硬件,速率高达 1 Mbps 。这里列出的是 UARTE 的主要功能:

• 全双工操作
• 自动硬件流控制
• 生成 9 位数据带奇偶校验
• EasyDMA
• 波特率高达 1 Mbps
• 在支持的事务之间返回 IDLE (使用 HW 流控制时)
• 一个停止位
• 最低有效位(LSB )优先
用于每个 UART 接口的 GPIO 可以从设备上的任何 GPIO 来选择并且独立地为可配置的。
这使得能够在器件的引脚和有效地利用电路板空间和信号路由很大的灵活性。 UARTE 的内部结构
如下所示:
图片[3]-14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug
对内部寄存器的说明如下表   所示:
图片[4]-14、nRF52xx蓝牙学习(串口 UART 和 UARTE 外设应用)-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug
UARTE 实现 EasyDMA 读取和写入,并存入 RAM。如果 TXD.PTR RXD.PTR 没有指向
数据 RAM 区, EasyDMA 传递可能导致 HardFault RAM 损坏。

.PTR .MAXCNT 寄存器是双缓冲的。他们可以在收到 RXSTARTED / TXSTARTED 事件后 立即进行更新,并在接下来的 RX / TX 传送准备。所述 ENDRX / ENDTX 事件表示 EasyDMA 已

完成访问分别在 RAM 中的 RX / TX 缓冲器。
UARTE 发送:
一个 UARTE 的发送的第一个步骤是存储的字节到发送缓冲器和配置 EasyDMA 。这个过程是
通过写起始地址到指针 TXD.PTR ,并在 RAM 缓冲器放置 TXD.MAXCNT 大小的字节数来实现的。
串口 UARTE 的发送是通过触发 STARTTX 任务开始,之后的每个字节在 TXD 线上发送时,会产
生一个 TXDRDY 事件。当在 TXD 缓冲器中的所有字节(在 TXD.MAXCNT 寄存器中指定数目)
已被传送时, UARTE 传输将自动结束,并且将产生一个 ENDTX 事件。
通过触发 STOPTX 任务来停止 UARTE 发送序列 ,当 UARTE 发射机已经停止,将产生一个
TXSTOPPED 事件。如果在 UARTE 发射机已经停下来但尚未产生 ENDTX 事件时, UARTE
明确产生一个 ENDTX 事件,即使在 TXD 缓冲区中的所有字节( TXD.MAXCNT 寄存器中指定)
还没有被发送。
如果启用了流量控制,则在 CTS 取消激活时将自动暂停传输,并在再次激活 CTS 时恢复。在
CTS
请登录后发表评论

    没有回复内容