USART ######## .. toctree:: :maxdepth: 3 :caption: 目录: 简介 ---- USART (通用同步异步收发器) 为需要工业标准NRZ异步串行数据格式的外部设备提供了一种灵活的全双工数据交换方式。它通过使用分数波特率发生器提供了更精确的波特率。 USART 支持同步单向和半双工单线通信,同时也支持智能卡协议和调制解调器操作 (CTS/RTS)。 通过使用DMA控制器和DMA通道,可以实现高速数据通信。 主要特性 -------- USART 的主要特性如下: * 全双工、异步通信。 * 两个用于发送和接收数据的内部FIFO: - FIFO的宽度为9位, - FIFO的深度为16。 * 通用的可编程发送和接收波特率: - 整数波特率发生器系统, - 分数波特率发生器系统。 * 自动波特率检测 * 可编程数据字长度 (5/6/7/8/9 位)。 * 可配置的停止位 (TX和RX中支持 0.5/1/1.5/2 停止位)。 * 奇偶校验控制: - 发送奇偶校验位, - 检查接收数据字节的奇偶性。 * 单线半双工通信。 * 同步主/从模式以及用于同步通信的时钟输出/输入。 * 支持通过DMA控制器进行DMA访问,实现高速数据通信。 * 独立的发送器和接收器使能位: - TX和RX可以分别在DMA或CPU模式下工作。 * 支持调制解调器的硬件流控制。 * 可编程的数据顺序,支持MSB优先或LSB优先移位。 * 独立的发送和接收信号极性控制。 * 可交换的Tx/Rx引脚配置。 * 支持RS-485收发器。 * 智能卡模式: - 支持ISO/IEC 7816-3标准中定义的智能卡T=0和T=1异步协议。 - 用于智能卡操作的0.5和1.5停止位。 * 通信控制/错误检测标志。 * 带标志的中断源: - 支持RX空闲超时中断, - 支持RX_FIFO/TX_FIFO水印中断。 本手册描述了USART外设中实现的所有功能集。 USART实现USART实施(第8页)中所示的全套功能。 .. _USART实现: .. list-table:: 表 5.1: USART实现 :header-rows: 1 :widths: auto * - USART特性 - USART * - 调制解调器硬件流控制 - 支持 * - 使用DMA进行连续通信 - 支持 * - 同步模式 (主/从) - 支持 * - 单线半双工通信 - 支持 * - 接收器超时中断 - 支持 * - 自动波特率检测 - 支持 * - 智能卡模式 - 支持 * - RS485 - 支持 * - 双时钟域和从低功耗模式唤醒 - 支持 * - LIN模式 - 支持 * - USART数据长度 - 5,6,7,8,9位 * - Tx/Rx FIFO - 支持 * - Tx/Rx FIFO 宽度 - 9位 * - Tx/Rx FIFO 深度 - 16 功能描述 -------- 该接口通过三个引脚在外部连接到另一个设备。任何USART双向通信至少需要两个引脚:接收数据输入 (RX) 和发送数据输出 (TX)。 * **RX**: 接收数据输入是串行数据输入。采用多数表决采样技术,通过区分有效输入数据和噪声来进行数据恢复。 * **TX**: 发送数据输出。当发送器被禁用时,输出引脚恢复为其I/O端口配置。当发送器被启用且无需发送数据时,TX引脚为高电平。在单线模式下,此I/O用于发送和接收数据。 通过这些引脚,在正常USART模式下,串行数据以帧的形式发送和接收,包括: * *传输或接收前的空闲线*。 * *一个起始位*。 * *一个数据字 (5/6/7/8/9位),最低有效位优先*。 * *0.5、1、1.5、2个停止位,表示帧结束*。 * *该接口使用分数波特率发生器 - 具有13位尾数和3位小数*。 * *一个状态寄存器 (USART_CTS_FLAG)*。 * *数据寄存器 (USART_TXDATA/USART_RXDATA)*。 * *一个波特率寄存器 (USART_DIV) - 18位尾数和3位小数*。 在同步主/从模式下需要以下引脚: * **CK**: 该引脚在同步主模式下作为时钟输出。在同步主模式下,此引脚输出对应于SPI主模式的发送器数据时钟(起始位和停止位上没有时钟脉冲,并且有一个软件选项可在最后数据位上发送时钟脉冲)。数据可以同时在RX上同步接收。这可用于控制具有移位寄存器的外设(例如LCD驱动器)。时钟相位和极性可通过软件编程。 在硬件流控制模式下需要以下引脚: * **CTS**: 清除发送。当驱动为高电平时,该信号在当前传输结束时阻止数据传输。 * **RTS**: 请求发送。当它为低电平时,该信号表示USART已准备好接收数据。 USART的框图如USART框图所示。(第10页)。 .. _USART框图: .. figur/assets/images/ip/nuclei_usart_doc/images/usart_block_diagram.jpg :alt: USART框图 :align: center **图 6.1: USART框图** 时钟域 ~~~~~~~ USART框图中给出的USART方框图。(第10页)显示了单个时钟域。 发送器 ~~~~~~~ 发送器可以发送5、6、7、8或9位的数据字,具体取决于USART_SETUP[6:4]寄存器。当发送使能位 (USART_TXCTRL[0]) 置位时,发送移位寄存器中的数据在TX引脚上输出,相应的时钟脉冲在CK引脚上输出。 字符传输 ^^^^^^^^ 在USART传输期间,数据在TX引脚上以最低有效位优先的方式移出。在此模式下,TXFIFO将USART_TXDATA寄存器缓冲为一个FIFO条目,发送状态机将这些条目逐个移出FIFO。 每个字符前面都有一个起始位,对应于一个比特周期的低逻辑电平。字符以一个可配置数量的停止位终止。 USART支持以下停止位:0.5、1、1.5和2停止位。 可配置的停止位 ^^^^^^^^^^^^^^^^ 与每个字符一起传输的停止位数量可以在USART_TXCTRL[2:1]中编程。 * **1个停止位:** 这是停止位数量的默认值。 * **2个停止位:** 普通USART和单线模式支持此设置。 空闲帧传输将包括停止位。 接收器 ~~~~~~~ USART可以接收5或6或7或8或9位的数据字,具体取决于USART_SETUP寄存器中的4–6位。 起始位检测 ^^^^^^^^^^^^^^^^ 无论是16倍还是8倍过采样,起始位检测序列都是相同的。 在USART中,当识别到特定的采样位模式时,就检测到起始位。当检测到下降沿,并且之后的第二个位是0,并且第七、八、九位中至少有两个位是0时,即为起始位。此序列为:1 1 1 0 X 0 X X X 0 0 0 X X X X X X。 .. figur/assets/images/ip/nuclei_usart_doc/images/start_bit_detect.jpg :alt: 起始位检测 :align: center **图 6.2: 起始位检测** 如果特定的位模式不完整,则起始位检测中止,接收器返回空闲状态(不设置任何标志),在那里等待下降沿。 起始位确认如下: 1. 在第三个位为0时进行第一次采样。 2. 在第七、八和九个位上进行第二次采样也发现有两个位为0。 字符接收: ^^^^^^^^^^^^^^^^ 在USART接收期间,数据通过RX引脚以最低有效位优先(默认配置)的方式移出。 在USART接收期间,数据通过RX引脚以最低有效位优先的方式移入。在此模式下,RXFIFO将接收数据缓冲为FIFO条目,ICB总线可以通过访问USART_RXDATA寄存器依次获取这些数据。 数据采样 ^^^^^^^^^^^^^^^^ 数据采样技术用于通过区分有效输入数据和噪声来进行数据恢复。当实际的波特分频器为15时,对第七、八、九个位的采样将决定该比特帧是0还是1。如所示数据采样(第11页)。 .. _数据采样: .. figur/assets/images/ip/nuclei_usart_doc/images/data_sampling_odd.jpg :alt: 数据采样 :align: center **图 6.3: 数据采样** .. list-table:: 表 6.1: 采样数据的噪声检测 :header-rows: 1 :widths: auto * - 采样值 - 接收到的位值 - 数据有效性 * - 000 - 0 - 有效 * - 001 - 0 - 有效 * - 010 - 0 - 有效 * - 011 - 1 - 有效 * - 100 - 0 - 有效 * - 101 - 1 - 有效 * - 110 - 1 - 有效 * - 111 - 1 - 有效 停止位检测 ^^^^^^^^^^^^^^^^ 要接收的停止位数量可以通过USART_TXCTRL[2:1]的控制位进行配置,如果在stop_bit帧中间出现低电平,则将设置RX_FRAME_ERROR(USART_CTS_FLAG[8])标志,这在UART协议中是受抑制的。 波特率生成 ~~~~~~~~~~~~~~ 接收器和发送器 (RX和TX) 的波特率都设置为与USART_DIV寄存器中的尾数和分数值编程相同的值。 Tx/Rx 波特率 = fclk / (USART_DIV + 1) fclk: 外设的输入时钟 (icb_clk)。 如果分数使能位 (USART_SETUP[19]) 开启,则实际分频为USART_DIV[20:0],其中0~2位是小数部分,20~3位是尾数部分。当分数使能位关闭时,实际分频为USART_DIV[18:0],这些位全部是尾数部分。 自动波特率检测 ~~~~~~~~~~~~~~ USART可以根据接收到的字符自动检测并设置UART_ADVANCED_SETUP寄存器中的ABR_EN位。 自动波特率检测模式可以通过UART_ADVANCED_SETUP寄存器中的ABR_MOD[1:0]字段设置。有四种基于不同字符模式的模式。 * 起始位检测模式:字符以“1”位开始。 * 下降沿检测模式:字符以10xxxxx位模式开始。 * 0x7f检测模式:字符在LSB优先模式下以0x7f字符帧开始,或在MSB优先模式下以0xfe字符帧开始。 * 0x55检测模式:字符以0x55字符帧开始。 自动波特率检测完成通过设置UART_ADVANCED_STATUS寄存器中的ABRF标志位来指示。如果自动波特率检测出错,则设置ABRE标志位。 奇偶校验控制 ~~~~~~~~~~~~~~ 可以通过设置USART_SETUP寄存器中的奇偶校验使能位来启用奇偶校验控制(在传输中生成奇偶校验位,在接收中检查奇偶校验)。具体取决于由长度位和奇偶校验选择位(偶校验或奇校验)定义的帧长度。 偶校验 ^^^^^^ 计算奇偶校验位,使得在5、6、7、8或9个LSB位(取决于帧长度)和奇偶校验位组成的帧内,“1”的个数为偶数。 奇校验 ^^^^^^ 计算奇偶校验位,使得在5、6、7、8或9个LSB位(取决于帧长度)和奇偶校验位组成的帧内,“1”的个数为奇数。 USART同步模式 ~~~~~~~~~~~~~~ 主模式 ^^^^^^ 通过将USART_SETUP寄存器中的CLKEN位写1来选择同步模式。USART允许用户在主模式下控制双向同步串行通信。CK引脚是USART发送器时钟的输出。在起始位和停止位期间,没有时钟脉冲发送到CK引脚。根据USART_SETUP寄存器中LBCL位的状态,在最后一个有效数据位(地址标记)期间将生成或不生成时钟脉冲。USART_SETUP寄存器中的CPOL位允许用户选择时钟极性,而CPHA位允许用户选择外部时钟的相位。在空闲期间,外部CK时钟不激活。在同步模式下,USART发送器的工作方式与异步模式完全相同。但由于CK与TX同步(根据CPOL和CPHA),TX上的数据是同步的。在此模式下,USART接收器的工作方式与异步模式不同。如果RXEN=1,则在CK(上升沿或下降沿,取决于CPOL和CPHA)上对数据进行采样。 USART仅支持主模式:它无法接收或发送与输入时钟相关的数据(CK始终是输出)。 .. figur/assets/images/ip/nuclei_usart_doc/images/uart_sync_mode.jpg :alt: USART同步传输示例 :align: center **图 6.4: USART同步传输示例** .. figur/assets/images/ip/nuclei_usart_doc/images/USART_data_clock_timing_diagram_8bit.jpg :alt: USART数据时钟时序图 (8位) :align: center **图 6.5: USART数据时钟时序图 (8位)** .. figur/assets/images/ip/nuclei_usart_doc/images/USART_data_clock_timing_diagram_9bit.jpg :alt: USART数据时钟时序图 (9位) :align: center **图 6.6: USART数据时钟时序图 (9位)** 从模式 ^^^^^^ 通过将UART_SPI_SLAVE (0x34) 寄存器中的SLV_EN位编程为‘1’来选择同步从模式。 在此模式下,USART可用于在从模式下控制双向同步串行通信。SCLK引脚在从模式下是USART的输入。 注意:当外设在SPI从模式下使用时,外设时钟源 (icb_clk) 的频率必须大于CK输入频率的3倍。 USART_CR2寄存器中的CPOL位和CPHA位分别用于选择外部时钟的极性和相位(如下图所示)。 .. figur/assets/images/ip/nuclei_usart_doc/images/spi_slave.png :alt: 同步从模式下的USART数据时钟时序图 (8数据位模式) :align: center **图 6.7: 同步从模式下的USART数据时钟时序图 (8数据位模式)** 在从发送模式下,存在下溢错误标志。当数据发送的第一个时钟脉冲出现时,如果软件尚未向USART_TXFIFO加载任何值,则设置此标志。 从设备支持硬件和软件NSS管理。 从设备选择 (NSS) 引脚管理 ^^^^^^^^^^^^^^^^^^^^^^^^^^ 可以通过UART_SPI_SLAVE (0x34) 寄存器中的DIS_NSS位设置硬件或软件从设备选择管理: * 软件NSS管理 (DIS_NSS = 1) SPI从设备始终被选中,NSS输入引脚被忽略。 * 硬件NSS管理 (DIS_NSS = 0) SPI从设备的选择取决于NSS输入引脚。当NSS为低电平时,从设备被选中;当NSS为高电平时,从设备取消选中。 注意:当USART在SPI从模式下工作时,CTS输入引脚被复用为NSS引脚。 SPI从设备下溢错误 ^^^^^^^^^^^^^^^^^^^^^^^ 如果数据写入USART_TXFIFO的时刻太接近第一个SCLK传输边沿,则可能发生下溢错误。 为避免此下溢错误,应在第一个SCLK边沿到来时准备好USART_TXFIFO的数据条目。 单线半双工通信 ~~~~~~~~~~~~~~~ USART可以配置为遵循单线半双工协议。在单线半双工模式下,TX和RX引脚在内部连接。半双工和全双工通信的选择通过USART_SETUP中的控制位HDSEL实现。 一旦HDSEL被写入‘1’: * TX和RX线路在内部连接, * RX引脚不再使用, * 当没有数据传输时,TX引脚总是被释放。因此,它在空闲或接收时充当标准I/O。 这意味着必须配置I/O,使得TX被配置为具有外部上拉的开漏复用功能。 除此之外,通信协议与普通USART模式类似。线路上的任何冲突必须由软件管理(例如,通过使用集中式仲裁器)。特别是,传输永远不会被硬件阻塞,只要数据写入数据寄存器且TXEN位置位,传输就会继续。 使用DMA进行连续通信 ~~~~~~~~~~~~~~~~~~~~~~~ USART能够使用DMA执行连续通信。Rx缓冲区和TX缓冲区的DMA请求是独立生成的。 .. figur/assets/images/ip/nuclei_usart_doc/images/special_mem2mem_transfer_flow.drawio.png :alt: USART DMA传输流程图 :align: center **图 6.8: USART DMA传输流程图** 使用DMA进行传输 ^^^^^^^^^^^^^^^^ 通过设置USART_SETUP[15]寄存器中的DMA EN位,可以为传输启用DMA模式。每当FIFO为空时,数据从使用DMA外设配置的SRAM区域加载到USART_TXFIFO,DMA-Core将通过ICB总线访问发送数据。 使用DMA进行接收 ^^^^^^^^^^^^^^^^ 通过设置USART_SETUP[15]寄存器中的DMA EN位,可以为接收启用DMA模式。每当接收到一个数据字节时,数据从USART_RXFIFO加载到使用DMA外设配置的SRAM区域,DMA-Core将通过ICB总线访问接收数据。 TX和RX可以独立地在CPU模式或DMA模式下工作 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 通过设置USART_SETUP[2]寄存器中的SEPARATE EN位,发送和接收可以独立地在CPU或DMA模式下工作。在此模式下,发送由USART_SETUP[15]寄存器中的DMA EN位启用,接收由USART_SETUP[20]寄存器中的RX DMA EN位启用。 注意:您应参考子系统规范以了解DMA控制器的可用性。如果子系统中没有DMA,您应使用第6.1节或6.2节中解释的USART,即发送器或接收器的CPU模式。 硬件流控制 ~~~~~~~~~~~ 通过使用CTS输入和RTS输出,可以控制2个设备之间的串行数据流。硬件流程图两个USART之间的控制(第16页)显示了如何在此模式下连接2个设备: .. _两个USART之间的硬件流控制: .. figur/assets/images/ip/nuclei_usart_doc/images/usart_hardware_298.drawio.png :alt: 两个USART之间的硬件流控制 :align: center **图 6.9: 两个USART之间的硬件流控制** RTS和CTS流控制可以通过将USART_SETUP寄存器中的RTSE和CTSE位写为‘1’来独立启用。 RTS流控制 ^^^^^^^^^^^^ 如果启用RTS流控制(RTSE=1),则只要USART接收机准备好接收新数据。当接收寄存器满时,RTS被取消断言,表示传输预计将停止在当前帧的末尾。RTS流量控制(第17页)显示了与RTS流量控制器通信的示例已启用。 .. _RTS流控制: .. figur/assets/images/ip/nuclei_usart_doc/images/usart_rts_299.drawio.png :alt: RTS流控制 :align: center **图 6.10: RTS流控制** CTS流控制 ^^^^^^^^^^^^ 如果CTS流控制被启用 (CTSE=1),则发送器在发送下一帧之前检查CTS输入。如果CTS置位(拉低),则发送下一个数据(假设有数据要发送,换句话说,如果TXE=0),否则不会发生传输。如果在传输过程中CTS取消置位,则当前传输在发送器停止之前完成。 当CTSE=1时,状态位 (CTS_RISE_FLAG和CTS_FALL_FLAG) 在CTS输入切换时由硬件自动设置。它指示接收器何时准备好或未准备好进行通信。如果USART_INT_EN寄存器中的中断使能位置位,则产生中断。下图显示了启用CTS流控制的通信示例。 .. figur/assets/images/ip/nuclei_usart_doc/images/usart_cts_300.drawio.png :alt: CTS流控制 :align: center **图 6.11: CTS流控制** RS485 ~~~~~~~~~~ USART控制器支持RS485标准。该标准使用差分信号传输数据,因此可以在比RS232更长的距离和更高的比特率下进行通信。 .. figur/assets/images/ip/nuclei_usart_doc/images/rs485.jpg :alt: RS485模式下的驱动器控制图 :align: center **图 6.12: RS485模式下的驱动器控制图** 驱动器控制 ^^^^^^^^^^^^^ 如上图所示,在双线多站网络中,需要外部RS485收发器进行差分到单端的转换。RS485收发器包含一个驱动器和一个接收器。 为了降低软件成本,在我们的设计中,DE由硬件控制。DE连接到USART的RTS。 转向延迟 ^^^^^^^^^^^^^ 当UART控制器切换到发送器模式时,RS485协议要求在停止位之后至少有一个周期的转向延迟。 发送器支持在起始位之前提前一个周期激活转向,或在停止位之后延迟一个周期。 当设置DE_ASSERT_EARLY_EN寄存器 (0x1C[22]) 时,发送器的DE将在起始位之前提前一个周期激活。 当设置DE_DEASSERT_EARLY_EN寄存器 (0x1C[23]) 时,发送器的DE将在停止位之后延迟一个周期取消激活。 USART智能卡模式 ~~~~~~~~~~~~~~~~ 通过设置USART_SETUP寄存器 (0x1C) 中的SMARTCARD_EN位来选择智能卡模式。 SMARTCARD_EN位也可以设置为向智能卡提供时钟。 智能卡接口设计用于支持ISO 7816-3标准中定义的异步智能卡协议。支持T=0(字符模式)和T=1(块模式)。 USART应配置为: * 8位加奇偶校验。 * 发送和接收数据时为1.5个停止位。也可以选择0.5个停止位用于接收。 在T=0(字符)模式下,在保护时间周期结束时指示奇偶校验错误。 .. figur/assets/images/ip/nuclei_usart_doc/images/smartcard.png :alt: ISO 7816-3异步协议 :align: center **图 6.13: ISO 7816-3异步协议** 此图显示了在有和没有奇偶校验错误时在数据线上可以看到的示例。 当连接到智能卡时,USART的TX输出驱动一条双向线路,该线路也由智能卡驱动。TX引脚必须配置为开漏。 智能卡模式实现了单线半双工通信协议。 * 在发送时,如果智能卡检测到奇偶校验错误,它通过将线路拉低(NACK)向USART发出此条件信号。此NACK信号(将发送线拉低1个波特时钟)在发送端导致帧错误(配置为1.5个停止位)。USART可以根据协议处理数据的自动重发。重试次数在SMARTCARD_SETUP (0x60) 寄存器中的AUTO_RETRY_CNT位字段中编程。如果USART在编程的重试次数后继续接收到NACK,则停止发送并将错误作为帧错误发出信号(TX_FRAME_ERR_FLAG位字段,UART_STATUS寄存器)。 * 发送中的智能卡自动重试:在USART检测到NACK与重复字符的起始位之间插入2.5个波特周期的延迟。如果软件想要再次重复,它必须确保标准要求的最小2个波特周期。 * 在发送时,USART在两个连续字符之间插入保护时间(按照SMARTCARD_TIMING寄存器中的编程)。因为保护时间是在前一个字符的停止位之后测量的。 * 如果在发送端检测到帧错误(由于接收器的NACK),则发送器的接收块不会将NACK检测为起始位。根据ISO协议,接收到的NACK的持续时间可以是1或2个波特时钟周期。 * 在接收端,如果检测到奇偶校验错误并发送了NACK,则接收器不会将NACK检测为起始位。 * 在T=1(块)模式下,可以通过清除SMARTCARD_SETUP寄存器中的NACK位来停用奇偶校验错误传输。 智能卡时钟 ^^^^^^^^^^^^^ USART可以通过SCLK输出向智能卡提供时钟。在智能卡模式下,SCLK与通信无关,只是通过8位预分频器从内部外设输入时钟派生。分频比在SMARTCARD_TIMING寄存器中配置。SCLK频率可以从0x0编程到0xff。 直接和反向约定 ^^^^^^^^^^^^^^^ 智能卡协议定义了两种约定:直接和反向。 直接约定定义为:LSB优先,逻辑位值1对应于线路的H状态,奇偶校验为偶校验。为了使用此约定,必须编程以下控制位:MSBFIRST=0, DATAINV=0(默认值)。 反向约定定义为:MSB优先,逻辑位值1对应于信号线上的L状态,奇偶校验为偶校验。为了使用此约定,必须编程以下控制位:MSBFIRST=1, DATAINV=1。 *注意:当逻辑数据值反转时(0=H, 1=L),奇偶校验位也以相同方式反转。* 为了识别卡约定,卡发送初始字符TS,作为ATR(复位应答)帧的第一个字符。TS的两种可能模式是:LHHL LLL LLH 和 LHHL HHH LLH。 * (H) LHHL LLL LLH 建立反向约定:状态L编码值1,时刻2传递最高有效位(MSB优先)。当通过反向约定解码时,传递的字节等于'3F'。 * (H) LHHL HHH LLH 建立直接约定:状态H编码值1,时刻2传递最低有效位(LSB优先)。当通过直接约定解码时,传递的字节等于'3B'。 当在2到10的九个时刻中,设置为1的位数为偶数时,字符奇偶校验正确。 由于USART不知道卡使用哪种约定,它需要能够识别任一模式并相应行动。模式识别不在硬件中完成,而是通过软件序列完成。此外,假设USART配置为直接约定(默认),而卡以反向约定应答,TS = LHHL LLL LLH => USART接收到的字符是03,奇偶校验为奇校验。 **方法1** USART被编程为标准智能卡模式/直接约定。在这种情况下,TS模式接收会产生奇偶校验错误中断和向卡的错误信号。 * 奇偶校验错误中断通知软件卡未在直接约定下正确应答。然后软件重新编程USART为反向约定。 * 响应错误信号,卡重试相同的TS字符,这次由重新编程的USART正确接收。 或者,响应奇偶校验错误中断,软件可以决定重新编程USART,并向卡生成新的复位命令,然后再次等待TS。 **方法2** USART被编程为9位/无奇偶校验模式,无位反转。在此模式下,它接收两种TS模式中的任何一种: * (H) LHHL LLL LLH = 0x103 -> 选择反向约定 * (H) LHHL HHH LLH = 0x13B -> 选择直接约定 软件检查接收到的字符是否与这两种模式匹配,如果匹配任何一种,则相应地编程USART以用于下一个字符接收。 如果两者都未被识别,则可能生成卡复位以重新开始协商。 USART LIN(本地互联网络)模式 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 通过设置UART_ADVANCED_SETUP寄存器 (0x7c) 中的LIN_EN位来选择LIN模式。 LIN发送 ^^^^^^^^^ LIN模式需要配置8位字长度并设置LIN_EN位以进入LIN模式。设置UART_ADVANCED_STATUS寄存器 (0x80) 中的LIN_SBKF位会发送13位0作为中断字符。然后发送两个值为1的位以启用下一次起始检测。 LIN接收 ^^^^^^^^^ 当LIN模式启用时,中断检测电路被激活。无论中断何时发生,在空闲状态或帧期间,都可以检测到中断。 当接收器启用时,电路在RX输入上寻找起始信号。搜索中断字符或数据时检测起始位的方法相同。如果检测到10个(当UART_ADVANCED_SETUP寄存器中的LIN_LBDL = 0时)或11个(当LIN_LBDL = 1时)连续位为0,并且后跟定界符字符,则在UART_ADVANCED_STATUS寄存器中设置LIN_LBDF标志位。如果LIN_LBDIE_IRQ_EN位=1(在UART_INT_EN寄存器中),则产生中断。在验证中断之前,检查定界符,因为它表示RX线路已返回高电平。 如果在10或11个位发生之前采样到1,则中断检测电路取消当前检测并再次搜索起始位。 如果LIN模式被禁用 (LIN_EN=0),则接收器继续作为普通USART工作,不考虑中断检测。 当接收器检测到中断字符时,在定界符开始时设置UART_STATUS寄存器中的FRAME_ERR_FLAG位。 USART将中断字符视为数据0并将其输入到rx FIFO中。 中断 ----- USART中断请求(第21页)显示USART断开请求。 .. list-table:: UART 中断事件表 :widths: 20 15 20 45 :header-rows: 1 * - 中断事件 - 事件标志 - 使能控制位 - 描述 * - RX FIFO 水位线 - txlp - rxie - 当 RX FIFO 深度超过水位线级别时产生中断。 * - TX FIFO 水位线 - txlp - txie - 当 TX FIFO 深度低于水位线级别时产生中断。 * - 奇偶校验错误 - rx_error_parity - parity error en - 在接收模式下发生数据奇偶校验错误时产生中断。 * - RX FIFO 溢出 - rx_error_overflow - overflow error en - 当 RX FIFO 已满且仍在传输数据时产生中断。 * - CTS 上升标志 - Cts rise - ctsie rise en - 当 CTS 信号上升时产生中断。 * - CTS 下降标志 - Cts fall - ctsie fall en - 当 CTS 信号下降时产生中断。 * - RX 帧错误 - RX frame error - rx frame error en - 在停止位阶段 RX 线路为低电平时产生中断。 * - RX 停止位错误 - RX stop bit error - rx stop bit error en - 当接收数据的停止位检测到错误时产生中断。 * - RX 空闲超时 - rx idle tout status - rx idle tout irq en - 当接收 FIFO 不为空,且 RX 空闲时间大于 RX_IDLE_TOUT_NUM 寄存器值时产生中断。 * - RX 水位线超时 - rx watermark tout - rx watermark tout irq en - 当 RX 水位线中断的时间大于 RX_WM_TOUT_NUM 寄存器值时产生中断。 * - TX 传输结束 - tx eot status - tx eot irq en - 当数据传输完成时产生中断。 * - RX 传输结束 - rx eot status - rx eot irq en - 当数据接收完成时产生中断。 USART中断请求(第21页)显示了USART的中断请求。 .. _USART中断映射图: .. figur/assets/images/ip/nuclei_usart_doc/images/interrupt.jpg :alt: USART中断映射图 :align: center **图 7.1: USART中断映射图** 中断映射如USART中断映射图(第22页)所示。 寄存器 ------- 寄存器描述 ~~~~~~~~~~~~ USART 寄存器 ^^^^^^^^^^^^^^^^^^^ .. list-table:: USART 寄存器偏移地址表 :widths: 10 25 40 :header-rows: 1 * - 偏移地址 - 寄存器名称 - 功能描述 * - 0x0 - UART_TXDATA - 发送数据和 FIFO 满状态 * - 0x4 - UART_RXDATA - 接收数据和 FIFO 空状态 * - 0x8 - UART_TXCTRL - 发送控制 * - 0xC - UART_RXCTRL - 接收控制 * - 0x10 - UART_INT_EN - 中断控制 * - 0x14 - UART_STATUS - 中断状态 * - 0x18 - UART_DIV - 波特率分频器 * - 0x1C - UART_SETUP - UART 配置和设置 * - 0x24 - UART_RX_SIZE - 接收传输模式下的总数据大小 * - 0x30 - UART_TX_SIZE - 发送传输模式下的总数据大小 * - 0x34 - UART_SPI_SLAVE - SPI 从机模式配置 * - 0x44 - UART_RX_IDLE - RX 线路空闲超时设置 * - 0x48 - UART_RX_WM - RX 水位线超时设置 * - 0x4C - UART_RX_FIFO_LEFT_ENTRY - RX FIFO 剩余条目计数 * - 0x50 - UART_TX_FIFO_LEFT_ENTRY - TX FIFO 剩余条目计数 * - 0x54 - UART_TX_DATASIZE - TX 数据大小寄存器 * - 0x58 - UART_RX_DATASIZE - RX 数据大小寄存器 * - 0x60 - SMARTCARD_SETUP - 智能卡模式设置 * - 0x64 - SMARTCARD_TIMING - 智能卡时序配置 * - 0x68 - IP_VERSION - 版本号寄存器 * - 0x7C - UART_ADVANCED_SETUP - UART 高级功能配置和设置 * - 0x80 - UART_ADVANCED_STATUS - UART 高级功能状态寄存器 UART_TXDATA ^^^^^^^^^^^^^ 地址偏移:0x0 .. list-table:: UART_TXDATA 格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TX_DATA - 8:0 - RW - 0x0 - 发送数据 * - 保留 - 31:9 - / - 0x0 - / UART_RXDATA ^^^^^^^^^^^^^ 地址偏移:0x4 .. list-table:: UART_RXDATA 格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - RX_DATA - 8:0 - RO - 0x0 - 接收数据 * - 保留 - 31:9 - / - 0x0 - / UART_TXCTRL ^^^^^^^^^^^^^ 地址偏移:0x8 .. list-table:: UART_TXCTRL 格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TXEN - 0 - RW - 0x0 - 发送使能 * - CONTINUOUS - 1 - RW - 0x0 - TX 通道连续模式位字段:-1'b0:禁用 uDMA 重载 -1'b1:启用 uDMA 重载并在缓冲区传输结束时开始新的传输 * - CLR - 2 - W1S - 0x0 - TX 通道清除和停止传输:-1'b0:禁用 -1'b1:启用停止并清除正在进行的传输,也用于清空 TX FIFO。注意:此标志在清除完成时下降 * - 保留 - 15:3 - / - 0x0 - / * - TXCNT - 20:16 - RW - 0x0 - 发送水位线级别 * - 保留 - 31:21 - / - 0x0 - / UART_RXCTRL ^^^^^^^^^^^^^ 地址偏移:0xC .. list-table:: UART_RXCTRL 格式 :widths: 15 10 10 15 50 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - RXEN - 0 - RW - 0x0 - 接收使能 * - CONTINUOUS - 1 - RW - 0x0 - RX 通道连续模式位字段:-1'b0:禁用 uDMA 重载 -1'b1:启用 uDMA 重载并在缓冲区传输结束时开始新的传输 * - CLR - 2 - W1S - 0x0 - RX 通道清除和停止传输:0:禁用 1:启用:停止并清除正在进行的传输,也用于清空 RX FIFO。注意:此标志在清除完成时下降 * - 保留 - 15:3 - / - 0x0 - / * - RXCNT - 20:16 - RW - 0x0 - 接收水位线级别 * - 保留 - 31:21 - / - 0x0 - / UART_INT_EN ^^^^^^^^^^^^^ 地址偏移:0x10 .. list-table:: UART_INT_EN 格式 :widths: 25 10 10 15 40 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TXIE - 0 - RW - 0x0 - 发送水位线中断使能 * - RXIE - 1 - RW - 0x0 - 接收水位线中断使能 * - OW_IRQ_EN - 2 - RW - 0x0 - RX 溢出中断使能 * - PARTTY_IRQ_EN - 3 - RW - 0x0 - RX 奇偶校验中断使能 * - CTSIE_RISE_EN - 4 - RW - 0x0 - CTS 上升中断使能 * - CTSIE_FALL_EN - 5 - RW - 0x0 - CTS 下降中断使能 * - STOP_BIT_IRQ_EN - 6 - RW - 0x0 - 停止位中断使能 * - SPI_SLV_UNDER_RUN_IRQ_EN - 7 - RW - 0x0 - SPI 从机欠载中断使能 * - SPI_SLV_OVER_RUN_IRQ_EN - 8 - RW - 0x0 - SPI 从机过载中断使能 * - RX_IDLE_TOUT_IRQ_EN - 9 - RW - 0x0 - RX 空闲超时中断使能 * - RX_WM_TOUT_IRQ_EN - 10 - RW - 0x0 - RX 水位线中断使能 * - TX_EOT_IRQ_EN - 11 - RW - 0x0 - TX 传输完成中断使能 * - RX_EOT_IRQ_EN - 12 - RW - 0x0 - RX 传输完成中断使能 * - TX_FIFO_EMPTY_IRQ_EN - 13 - RW - 0x0 - TX_FIFO 空中断使能 * - TX_FIFO_FULL_IRQ_EN - 14 - RW - 0x0 - TX_FIFO 满中断使能 * - RX_FIFO_EMPTY_IRQ_EN - 15 - RW - 0x0 - RX_FIFO 空中断使能 * - RX_FIFO_FULL_IRQ_EN - 16 - RW - 0x0 - RX_FIFO 满中断使能 * - FRAME_ERR_IRQ_EN - 17 - RW - 0x0 - 智能卡 TX/RX 断字段检测帧错误中断使能 * - LIN_LBDIE_IRQ_EN - 18 - RW - 0x0 - LIN 模式断检测中断使能 * - MODBUS_RTU_TOUT_IRQ_EN - 19 - RW - 0x0 - MODBUS 接收器超时中断使能 * - MODBUS_ASCII_MATCH_IRQ_EN - 20 - RW - 0x0 - MODBUS ASCII 字符匹配中断使能 * - 保留 - 21 - / - 0x0 - / * - CDC_RX_FIFO_NE_IRQ_EN - 22 - RW - 0x0 - CDC RX_FIFO 非空中断使能 * - CDC_RX_FIFO_FF_IRQ_EN - 23 - RW - 0x0 - CDC RX_FIFO 满中断使能 * - 保留 - 24 - / - 0x0 - / * - WFLF_IRQ_EN - 25 - RW - 0x0 - 低功耗 WFLF 中断使能 * - 保留 - 31:26 - / - 0x0 - / UART_STATUS ^^^^^^^^^^^^^ 地址偏移:0x14 .. list-table:: UART_STATUS 格式 :widths: 25 10 10 15 40 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TXIP - 0 - RO - 0x0 - 发送水位线中断挂起 * - RXIP - 1 - RO - 0x0 - 接收水位线中断挂起 * - TX_BUSY - 2 - RO - 0x0 - TX 忙状态标志:-0:无 TX 传输进行中 -1:TX 传输进行中 * - RX_BUSY - 3 - RO - 0x0 - RX 忙状态标志:-0:无 RX 传输进行中 -1:RX 传输进行中 * - RX_ERROR_OVER_FLOW - 4 - WIC - 0x0 - RX 溢出错误状态标志(写 1 清除):-0:无错误 -1:发生 RX 溢出错误 * - RX_ERROR_PARITY - 5 - WIC - 0x0 - RX 奇偶校验错误状态标志(写 1 清除):-0:无错误 -1:发生 RX 奇偶校验错误 * - CTS_RISE_FLAG - 6 - WIC - 0x0 - CTS 上升标志:-0:CTS 状态线无上升变化(从 0 到 1)-1:CTS 状态线发生上升变化(从 0 到 1) * - CTS_FALL_FLAG - 7 - WIC - 0x0 - CTS 下降标志:-1'b0:CTS 状态线无下降变化(从 1 到 0)-1'b1:CTS 状态线发生下降变化(从 1 到 0) * - STOP_BIT_ERR_FLAG - 8 - WIC - 0x0 - 如果在停止位模式期间 RX 线路为低电平,将产生停止位错误状态,写 1 清除此状态 * - 保留 - 11:9 - / - 0x0 - / * - RX_IDLE_TOUT_STATUS - 12 - WIC - 0x0 - 当接收 FIFO 不为空,且在 RX_IDLE_TOUT_NUM 期间未接收到更多数据时,断言接收超时中断 * - RX_WM_TOUT_STATUS - 13 - WIC - 0x0 - 当 RX 水位线中断的断言时间大于 RX_WM_TOUT_NUM 寄存器值时,断言 RX 水位线超时中断 * - TX_FIFO_FULL - 14 - RO - 0x0 - 发送 FIFO 满,当 USART 从发送 FIFO 获取 TX 数据时清除此状态位 * - RX_FIFO_EMPTY - 15 - RO - 0x1 - 接收 FIFO 空,当 USART 成功接收第一个 RX 数据时清除此状态位 * - TX_EOT - 16 - WIC - 0x0 - TX 传输完成状态 * - RX_EOT - 17 - WIC - 0x0 - RX 传输完成状态 * - SPI_SLV_UNDER_RUN - 18 - WIC - 0x0 - 在从机发送模式下,当数据发送的第一个时钟脉冲出现而软件尚未向 TX_FIFO 加载任何值时,设置此标志 * - SPI_SLV_OVER_RUN - 19 - WIC - 0x0 - 在从机接收模式下,当数据发送的第一个时钟脉冲出现而 RX_FIFO 已满时,设置此标志 * - CTS_PIN - 20 - RO - 0x0 - 此位由硬件设置/重置。它是 CTS 输入引脚的状态。-0:CTS 引脚为低电平。-1:CTS 引脚为高电平 * - TX_FIFO_EMPTY - 21 - RO - 0x1 - 发送 FIFO 空,当软件向发送 FIFO 发送第一个 TX 数据时清除此状态位 * - RX_FIFO_FULL - 22 - RO - 0x0 - 接收 FIFO 满,当软件从接收 FIFO 获取 RX 数据时清除此状态位 * - FRAME_ERR_FLAG - 23 - WIC - 0x0 - 在智能卡模式下发送数据时,当达到最大发送尝试次数而未成功(卡 NACK 数据帧)时设置此位。在 LIN 模式下检测到断字段时,将设置此位。-0:未检测到帧错误/无断字段 -1:检测到帧错误或断字符 * - NE_FLAG - 24 - WIC - 0x0 - 接收噪声检测标志。当在接收帧上检测到噪声(投票不完全相等)时,硬件设置此位。通过向此位写入 1 由软件清除 * - 保留 - 31:25 - / - 0x0 - / UART_DIV ^^^^^^^^^^^^^ 地址偏移:0x18 .. list-table:: UART_DIV 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - BAUD_DIV - 20:0 - RW - 0x0 - 波特率 = fusart_clk/(BAUD_DIV+1)。如果分数波特率生成器禁用,则 BAUD_DIV[18:0] 是软件的实际分频器。如果分数波特率生成器启用,则 BAUD_DIV[20:3] 是实际分频器的尾数部分,BAUD_DIV[2:0] 是小数部分,可设置如下:-3'b000: 0 -3'b001: 0.125 -3'b010: 0.25 -3'b011: 0.375 -3'b100: 0.5 -3'b101: 0.625 -3'b110: 0.75 -3'b111: 0.875 * - 保留 - 31:21 - / - 0x0 - / 注意:无论分数波特率生成器是否启用,BAUD_DIV[20:0] 都不应设置为 0 或 1。以下两个主要原因: 1. 当 BAUD_DIV[21:0] 寄存器设置为 0 时,USART 中的计数器将下溢。 2. 由于对采样数据有噪声检测逻辑,因此 RX 长度应大于 2 个 USART 时钟周期,且 BAUD_DIV[21:0] 寄存器不应设置为 1。 UART_SETUP ^^^^^^^^^^^^^ 地址偏移:0x1C .. list-table:: UART_SETUP 格式 :widths: 25 10 10 15 40 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - PARTTY_EN - 0 - RW - 0x0 - 奇偶校验位生成和检查配置位字段:-1'b0:禁用奇偶校验位生成和检查 -1'b1:启用奇偶校验位生成和检查 * - PARTTY_SEL - 1 - RW - 0x0 - 奇偶校验选择 -1'b0:偶校验 -1'b1:奇校验 * - SEPARATE_EN - 2 - RW - 0x0 - 启用此位可使 TX 和 RX 在 CPU 或 DMA 模式下独立工作 -1'b0:TX 和 RX 均由 USART_SETUP[15] 寄存器中的 DMA_EN 位控制 -1'b1:RX 由 USART_SETUP[20] 寄存器中的 RX_DMA_EN 位控制,TX 由 USART_SETUP[15] 寄存器中的 DMA_EN 位控制 * - 保留 - 3 - / - 0x0 - / * - BIT_LENGTH - 6:4 - RW - 0x3 - 字符长度位字段:-3'b000:5 位 -3'b001:6 位 -3'b010:7 位 -3'b011:8 位 -3'b100:9 位 * - CLK_EN - 7 - RW - 0x0 - 时钟使能:此位允许用户启用 CK 引脚 -1'b0:CK 引脚禁用 -1'b1:CK 引脚启用。仅在 TX 模式且 clk_en=1 时,tx_clk_o 才能输出 * - CPOL - 8 - RW - 0x0 - 时钟极性:此位允许用户在同步模式下选择 CK 引脚上时钟输出的极性。它与 CPHA 位配合使用以产生所需的时钟/数据关系 -1'b0:稳态低电平:传输窗口外 CK 引脚上的稳态低电平值 -1'b1:稳态高电平:传输窗口外 CK 引脚上的稳态高电平值 * - CPHA - 9 - RW - 0x0 - 时钟相位:此位允许用户在同步模式下选择 CK 引脚上时钟输出的相位。它与 CPOL 位配合使用以产生所需的时钟/数据关系 -1'b0:第一次转换:第一次时钟转换是第一个数据捕获边沿 -1'b1:第二次转换:第二次时钟转换是第一个数据捕获边沿 * - LBCL - 10 - RW - 0x0 - 最后一位时钟脉冲:此位允许用户选择在同步模式下是否必须在 CK 引脚上输出与发送的最后数据位(MSB)关联的时钟脉冲 -1'b0:不输出:最后数据位的时钟脉冲不输出到 CK 引脚 -1'b1:输出:最后数据位的时钟脉冲输出到 CK 引脚 * - HDSEL - 11 - RW - 0x0 - HDSEL:单工模式选择 -1'b0:禁用:未选择单工模式 -1'b1:启用:选择单工模式 * - SMARTCARD_EN - 12 - RW - 0x0 - 智能卡模式使能。此位用于启用智能卡模式。-1'b0:智能卡模式禁用 -1'b1:智能卡模式启用 * - RTSE - 13 - RW - 0x0 - RTS 使能:-1'b0:RTS 硬件流控制禁用 -1'b1:RTS 模式启用,仅当 RX FIFO 中有空间时才请求数据,预期在当前字符发送后停止数据传输。当可以接收数据时,RTS 输出被断言(即为 0) * - CTSE - 14 - RW - 0x0 - CTS 使能:-1'b0:CTS 硬件流控制禁用 -1'b1:CTS 模式启用,仅当 CTS 输入被断言(接低电平)时才发送数据。如果在数据发送期间 CTS 输入被取消断言,则传输在停止前完成。如果在 CTS 取消断言期间将数据写入 RX FIFO,则传输将推迟到 CTS 被断言 * - DMA_EN - 15 - RW - 0x0 - DMA_EN:选择模式 -1'b0:CPU 模式,TX 数据来自 ICB 或其他总线 -1'b1:DMA 模式,TX 数据来自 DMA。注意:此位基于 SEPARATE_EN 寄存器控制 RX 通道,当 SEPARATE_EN 启用时,此位仅用于 TX 通道 * - VOTE_MAJORITY_EN - 16 - RW - 0x1 - 在数据帧中启用 2/3 多数逻辑 -1'b0:关闭 2/3 多数逻辑 -1'b1:开启 2/3 多数逻辑 * - SAMPLE_POSITION - 18:17 - RW - 0x2 - 当实际分频为偶数时,可以选择数据帧中的采样位置:-2'b00:抖动:一个数据帧向上,另一个在相邻帧向下 -2'b01:向下 -2'b10:向上 * - FRACTION_BAUD - 19 - RW - 0x0 - 分数波特率 -1'b0:关闭分数波特率生成器 -1'b1:开启分数波特率生成器 * - RX_DMA_EN - 20 - RW - 0x0 - RX 通道 DMA 模式使能,当 SEPARATE_EN 位启用时,此位由软件断言或取消断言;当 SEPARATE_EN 位禁用时,此位由 SETUP[15] 寄存器断言或取消断言。-1'b0:CPU 模式 -1'b1:DMA 模式 * - RS485_EN - 21 - RW - 0x0 - RS-485 模式使能 -1'b0:禁用 RS-485 模式 -1'b1:启用 RS-485 模式 * - DE_ASSERTION_EARLY_EN - 22 - RW - 0x0 - 在 START 条件之前一个位时间提前启用 RS-485 的 DE 信号断言 -1'b0:DE 将在 START 条件发生时断言 -1'b1:DE 将在 START 条件之前一个位时间断言 * - DE_DEASSERTION_DELAY_EN - 23 - RW - 0x0 - 在 STOP 条件之后一个位时间延迟启用 RS-485 的 DE 信号取消断言 -1'b0:DE 将在 STOP 条件发生时断言 -1'b1:DE 将在 STOP 条件之后一个位时间断言 * - DE_INV - 24 - RW - 0x0 - 启用 RS-485 的 DE 信号极性 -1'b0:DE 引脚信号使用标准逻辑电平(VDD=1/空闲,Gnd=0/标记)-1'b1:DE 引脚信号值被反转(VDD=0/标记,Gnd=1/空闲) * - MSBFIRST - 25 - RW - 0x0 - 最高有效位优先。此位由软件设置和清除。-1'b0:数据以数据位 0 优先发送/接收,跟随起始位 -1'b1:数据以 MSB(位 7/8)优先发送/接收,跟随起始位 * - DATAINV - 26 - RW - 0x0 - 二进制数据反转。此位由软件设置和清除。-1'b0:来自数据寄存器的逻辑数据以正/直接逻辑发送/接收(1=H,0=L)-1'b1:来自数据寄存器的逻辑数据以负/反向逻辑发送/接收(1=L,0=H)。奇偶校验位也被反转 * - TXINV - 27 - RW - 0x0 - TX 引脚有效电平反转。此位由软件设置和清除。-1'b0:TX 引脚信号使用标准逻辑电平(VDD=1/空闲,Gnd=0/标记)-1'b1:TX 引脚信号值被反转(VDD=0/标记,Gnd=1/空闲) * - RXINV - 28 - RW - 0x0 - RX 引脚有效电平反转。此位由软件设置和清除。-1'b0:RX 引脚信号使用标准逻辑电平(VDD=1/空闲,Gnd=0/标记)-1'b1:RX 引脚信号值被反转(VDD=0/标记,Gnd=1/空闲) * - SWAP - 29 - RW - 0x0 - 交换 TX/RX 引脚。此位由软件设置和清除。-1'b0:TX/RX 引脚按标准引脚定义使用 -1'b1:TX 和 RX 引脚功能交换。这可以在与另一个 UART 交叉连接的情况下工作 * - CFG_STOP_BIT - 31:30 - RW - 0x3 - 停止位配置:-2'b00:0.5 位 -2'b01:1 位 -2'b10:1.5 位 -2'b11:2 位 UART_RX_SIZE ^^^^^^^^^^^^^ 地址偏移:0x24 .. list-table:: UART_RX_SIZE 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - RX_SIZE - 19:0 - RW - 0x0 - 接收传输模式下的总数据大小 -读取:返回 RX 传输的剩余大小 -写入:设置接收传输模式的总数据大小 * - 保留 - 31:20 - / - 0x0 - / UART_TX_SIZE ^^^^^^^^^^^^^^^^ 地址偏移:0x30 .. list-table:: UART_TX_SIZE 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TX_SIZE - 19:0 - RW - 0x0 - 发送传输模式下的总数据大小 -读取:返回 TX 传输的剩余大小 -写入:设置发送传输模式的总数据大小 * - 保留 - 31:20 - / - 0x0 - / UART_SPI_SLAVE ^^^^^^^^^^^^^^^^^^ 地址偏移:0x34 .. list-table:: UART_SPI_SLAVE 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - SLV_EN - 0 - RW - 0x0 - 同步从机模式使能 -1'b0:禁用同步从机模式 -1'b1:启用同步从机模式 * - DIS_NSS - 1 - RW - 0x0 - 当 DIS_NSS 位设置时,忽略 NSS 引脚输入 -1'b0:SPI 从机选择取决于 NSS 输入引脚 -1'b1:SPI 从机始终被选中且忽略 NSS 输入引脚。注意:NSS 和 CTS 共享同一焊盘 * - 保留 - 31:2 - / - 0x0 - / UART_RX_IDLE ^^^^^^^^^^^^^ 地址偏移:0x44 .. list-table:: UART_RX_IDLE 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - IDLE_TOUT_NUM - 31:0 - RW - 0xffff - RX 线路空闲超时值 UART_RX_WM ^^^^^^^^^^^^^^^ 地址偏移:0x48 .. list-table:: UART_RX_WM 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - WM_TOUT_NUM - 31:0 - RW - 0xffff - RX 水位线超时值 UART_RX_FIFO_LEFT_ENTRY ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x4C .. list-table:: UART_RX_FIFO_LEFT_ENTRY 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - LEFT_ENTRY - 4:0 - RO - 0x0 - RX FIFO 条目数 * - 保留 - 31:5 - / - 0x0 - / UART_TX_FIFO_LEFT_ENTRY ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x50 .. list-table:: UART_TX_FIFO_LEFT_ENTRY 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - LEFT_ENTRY - 4:0 - RO - 0x0 - TX FIFO 条目数 * - 保留 - 31:5 - / - 0x0 - / UART_TX_DATASIZE ^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x54 .. list-table:: UART_TX_DATASIZE 格式 :widths: 25 10 10 15 40 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - TX_DATASIZE_NUM - 1:0 - RW - 0x0 - TX 数据大小值 -2'b00:字节传输 -2'b10:字传输。注意:仅当 TX-FIFO/RX-FIFO 宽度为 32 位时才支持字传输 * - 保留 - 31:2 - / - 0x0 - / UART_RX_DATASIZE ^^^^^^^^^^^^^^^^^^^ 地址偏移:0x58 .. list-table:: UART_RX_DATASIZE 格式 :widths: 25 10 10 15 40 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - RX_DATASIZE_NUM - 1:0 - RW - 0x0 - RX 数据大小值 -2'b00:字节传输 -2'b10:字传输。注意:仅当 TX-FIFO/RX-FIFO 宽度为 32 位时才支持字传输 * - 保留 - 31:2 - / - 0x0 - / SMARTCARD_SETUP ^^^^^^^^^^^^^^^^^^^ 地址偏移:0x60 .. list-table:: SMARTCARD_SETUP 格式 :widths: 25 10 10 15 40 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - AUTO_RETRY_CNT - 2:0 - RW - 0x0 - 智能卡自动重试计数。此位字段指定智能卡模式下发送和接收的重试次数。在发送模式下,它指定在生成发送错误(TX_FRAME_ERR_FLAG,status[23])之前的自动重传重试次数。在接收模式下,它指定在生成接收错误(RX_ERROR_PARITY,status[5])之前的错误接收尝试次数。0x0:重传禁用 - 发送模式下无自动重传。0x1 到 0x7:自动重传尝试次数(在发出错误信号之前) * - NACK_EN - 3 - RW - 0x0 - 智能卡 NACK 使能 -1'b0:禁用奇偶校验错误情况下的 NACK 传输 -1'b1:启用奇偶校验错误期间的 NACK 传输 * - TX_PUE - 4 - RW - 0x0 - TX 引脚上拉使能 -1'b0:禁用 TX 引脚上拉电阻 -1'b1:启用 TX 引脚上拉电阻 * - 保留 - 31:5 - / - 0x0 - / SMARTCARD_TIMING ^^^^^^^^^^^^^^^^^^ 地址偏移:0x64 .. list-table:: SMARTCARD_TIMING 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - GUARD_TIME - 7:0 - RW - 0x0 - 保护时间值。此位字段用于以波特时钟周期数编程保护时间值。这在智能卡模式下使用 * - PSC - 15:8 - RW - 0x0 - 预分频器值 PSC[7:0] = 预分频器值。PSC[7:0] 用于编程预分频器,以分频 USART 源时钟来提供智能卡时钟。寄存器中的值(8 个有效位)乘以 2 得到源时钟频率的分频因子:0x0:源时钟除以 1 0x1:源时钟除以 2 0x2:源时钟除以 3 0x3:源时钟除以 4 ... 0xff:源时钟除以 256 * - 保留 - 31:16 - / - 0x0 - / IP_VERSION ^^^^^^^^^^^^^^^ 地址偏移:0x68 .. list-table:: IP_VERSION 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - VERSION - 31:0 - RO - 0x0003_0004 - 32 位版本号 -[31:24]:保留 -[23:16]:主版本 -[15:8]:次版本 -[7:0]:修订版本 UART_ADVANCED_SETUP ^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x7C .. list-table:: UART_ADVANCED_SETUP 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - MMLEN - 0 - RW - 0x0 - 多处理器静默模式使能 • 1'b1:静默模式使能,RX 可切换到静默模式 • 1'b0:静默模式禁用,RX 不能切换到静默模式 * - WAKE_MOD - 1 - RW - 0x0 - 多处理器接收器唤醒模式 • 1'b0:RX 空闲线模式 • 1'b1:地址标记模式 * - ADD7 - 2 - RW - 0X0 - 7 位地址检测或 4 位地址检测模式 • 1'b0:4 位地址检测模式 • 1'b1:7 位地址检测模式 * - ADD - 10:3 - RW - 0X0 - USART 节点地址 * - LIN_EN - 11 - RW - 0x0 - LIN 模式使能 • 1'b1:LIN 模式使能 • 1'b0:LIN 模式禁用 * - LIN_LBDL - 12 - RW - 0x0 - LIN 模式断检测长度 • 1'b1:11 位断检测 • 1'b0:10 位断检测 * - IRDA_EN - 13 - RW - 0x0 - IRDA 模式使能 • 1'b1:IRDA 模式使能 • 1'b0:IRDA 模式禁用 * - IRDALP_EN - 14 - RW - 0x0 - IRDA 低功耗模式使能 • 1'b1:IRDA 低功耗使能 • 1'b0:IRDA 低功耗禁用 * - RTU_EN - 15 - RW - 0x0 - MODBUS 模式使能 • 1'b1:MODBUS RTU 模式使能 • 1'b0:MODBUS RTU 模式禁用 * - UELM - 16 - RW - 0x0 - USART 在低功耗模式下使能 • 1'b1:USART 可以从低功耗模式唤醒 MCU • 1'b0:USART 不能从低功耗模式唤醒 MCU * - WLFS - 18:17 - RW - 0x0 - USART 从低功耗模式唤醒中断标志选择 • 2'b00:RX 地址匹配 • 2'b01:RX 起始位 • 2'b10:RXNE(RX CDC FIFO 非空)/RXFF(RX CDC FIFO 满)• 2'b11:保留 * - ABR_EN - 19 - RW - 0x0 - 自动波特率使能 • 1'b1:自动波特率使能 • 1'b0:自动波特率禁用 * - ABR_MOD - 21:20 - RW - 0x0 - 自动波特率检测模式 • 2'b00:起始位检测模式 • 2'b01:下降沿检测模式 • 2'b10:0x7f 检测模式 • 2'b11:0x55 检测模式。注意:7 位模式下不支持 0x7f 和 0x55 * - 保留 - 31:22 - / - 0x0 - / UART_ADVANCED_STATUS ^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x80 .. list-table:: UART_ADVANCED_STATUS 格式 :widths: 20 10 10 15 45 :header-rows: 1 * - 字段 - 位 - 访问 - 复位值 - 描述 * - RWUFMM - 0 - RW - 0x0 - RX 从静默模式唤醒状态:• 1'b1:RX 在静默模式 • 1'b0:RX 在活动模式 * - LIN_SBKF - 1 - W1S - 0x0 - LIN 模式发送断字段标志 • 1'b1:断字段已发送 • 1'b0:无断字段发送 * - LIN_LBDF - 2 - W1C - 0x0 - LIN 模式断检测标志 • 1'b1:断字段已检测 • 1'b0:断字段未检测 * - LFCMF - 3 - W1C - 0x0 - MODBUS 模式 LF 匹配标志 • 1'b1:MODBUS ASCII LF 匹配 • 1'b0:MODBUS ASCII LF 不匹配 * - WFLF - 4 - W1C - 0x0 - USART 从低功耗模式唤醒标志 • 1'b1:检测到唤醒 • 1'b0:未检测到唤醒 * - ABRF - 5 - W1C - 0x0 - 自动波特率标志,当自动波特率完成时,设置此位 * - ABRE - 6 - W1C - 0x0 - 自动波特率错误,当自动波特率失败时,设置此位