<!-- 本文件由脚本自动转换生成，请勿手动编辑 -->

> **《LKS32MC08x User Manual》MCPWM** . 完整目录见 [README.md](README.md)
>
> **声明**：本文档由芯片用户手册自动转换生成，仅供检索与查阅参考。Markdown 格式可被自由编译、修改，本文档不构成正式技术文件，相关内容以凌鸥创芯官方网站正式发布的手册为准。
>
> 南京凌鸥创芯电子有限公司 . (C) 2019, 版权归凌鸥创芯所有 . 机密文件，未经许可不得扩散

# MCPWM

## 概述

MCPWM模块，是一个精确控制电机驱动波形输出的模块。

包含一个16位递增计数器，用于提供一个基础周期。计数器的时钟分频有1/2/4/8四种选项，产生的的分频时钟频率分别为96MHz、48MHz、24MHz和12MHz。

包含四组PWM生成模块。

\- 可以产生4对（互补信号）不交叠的或8路边沿对齐的（边沿模式）PWM信号；

\- 支持边沿对齐PWM

\- 中心对齐PWM

\- 移相PWM

同时可以产生4路与MCPWM同时基的定时信息，用于触发ADC模块同步采样，进行与MCPWM的联动。

包含一组急停保护模块，用于不依赖CPU软件的处理快速关断MCPWM模块输出。MCPWM模块可输入4路急停信号，其中两路来自芯片IO，两路来自片内比较器的输出。当急停事件发生时（支持有效电平极性选择），把所有MCPWM输出信号复位到规定状态，以避免短路发生。

对急停信号有独立滤波模块。

MCPWM的每个输出IO支持两种控制模式：PWM硬件控制或者软件直接控制（用于EABS软刹车，或BLDC方波换相控制）。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图 13-1 MCPWM模块框图

为了保证定时精度，通常采用96MHz的时钟作为MCPWM模块工作频率。

### Base Counter模块

该模块主要是由一个递增计数器组成，其计数门限值为MCPWM_TH，计数器从t0时刻开始从-TH递增计数，在t1时刻过0点，在t2时刻计数到TH完成一次计数循环，回到-TH，重新开始计数。计数周期为(TH×2+1)×计数时钟周期。

在t0/t1(本次t0即上一次t2)可产生定时事件中断，MCPWM_IF.T0_IF和MCPWM_IF.T1_IF将被置位。

可通过寄存器配置MCPWM_TCLK.BASE_CNT_EN控制Base Counter的启动和停止。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-2
Base Counter t0/t1时序

在运行MCPWM模块前，用户一般需将对应的比较门限值MCPWM_TH00~MCWM_TH31，死区寄存器MCPWM_DTH00~MCWM_DTH31以及PWM周期MCPWM_TH配置好。在实际运行过程中，也可动态改变比较门限值和PWM周期寄存器，可通过写MCPWM_UPDATE寄存器实现手动更新，也可以通过配置MCPWM_SDCFG.T1_UPDATE_EN及MCPWM_SDCFG.T0_UPDATE_EN进行硬件自动更新。硬件更新，仅在t0及t1时刻（可配置t0或t1更新和t0
t1时刻都更新）才能产生更新事件，硬件把加载寄存器的值载入到实际运行的寄存器中。而更新事件的发生频率可以配置，即每间隔N个t0及t1时刻才发生更新。无论是否发生更新，t0/t1时刻均可产生相应的中断。若硬件把加载寄存器的值到载入实际运行的寄存器后，产生装载中断。

通过配置MCPWM_SDCFG寄存器选择更新发生在t0或者t1或者二者皆可，配置更新间隔数，间隔数为1~16。最频繁的更新配置为更新发生在t0和t1，连续发生。最低速的更新配置为更新发生在t1，每16个t1更新一次。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-3 MCPWM更新机制

### Fail 信号处理

FAIL信号即急停信号，主要用于在出现异常时迅速关断功率管，以免造成不可逆的硬件损坏。该信号处理模块主要是根据实际情况设置急停事件，实现快速关断PWM的输出。有2路
fail 信号输入MCPWM，即 FAIL0~FAIL1，分别可以来自芯片 I0
MCPWM_BKIN\[1:0\]或芯片内部比较器的输出CMP\[1:0\]。

08x MCU FAIL信号分布表

||||
|---|---|---|
||MCPWM CH0/1/2/3||
||Fail0|Fail1|
|MCPWM_BKIN0|√||
|MCPWM_BKIN1||√|
|CMP0|√||
|CMP1||√|

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-4 MCPWM FAIL逻辑示意图

Filter滤波模块的时钟，来自系统主时钟MCLK的门控时钟FCLK\[3\]，并经过两级分频，第一级分频由MCPWM_TCLK.CLK_DIV控制，进行1/2/4/8倍分频。第二级分频可实现1~16倍的分频，如果Fail信号来自MCPWM_BKIN\[1:0\]则使用MCPWM_TCLK.IO_FLT_CLKDIV\[3:0\]作为第二级的分频系数；如果Fail信号来自芯片内部比较器输出，则使用MCPWM_TCLK.CMP_FLT_CLKDIV\[3:0\]作为第二级的分频系数，如图
13-5所示。

MCPWM模块使用分频后的时钟进行Fail信号滤波，滤波宽度固定为16个周期，即输入信号必须保持至少16个时钟（两级分频后的时钟）周期稳定后，硬件才判定其为有效输入信号。滤波时间常数的公式为，其中T<sub>MCLK</sub>为MCLK/FCLK\[3\]的时钟周期，96MHz对应10.4ns。MCPWM_TCLK.FLT_CLKDIV根据配置情况可能是MCPWM_TCLK.IO_FLT_CLKDIV或MCPWM_TCLK.CMP_FLT_CLKDIV。

T = T<sub>MCLK</sub>×(MCPWM_TCLK.CLK_DIV)×(MCPWM_TCLK.FLT_CLKDIV+1)×16

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图 13-5
MCPWM Fail信号滤波时钟生成逻辑

一旦发生Fail事件，即

图13-4最终输出Fail信号，硬件将IO输出强制变为MCPWM_FAIL.CHxN_DEFAULT和
MCPWM_FAIL.CHxP_DEFAULT寄存器所指定的故障缺省值，此时MCPWM_FAIL.CHxN_DEFAULT和
MCPWM_FAIL.CHxP_DEFAULT的值直接输出到IO口，不再受到MCPWM_FAIL.FAIL_POL等极性控制的影响。

**来自比较器的FAIL信号为模拟比较器输出的原始信号，未经过比较器数字接口模块的滤波处理，但是可以被MCPWM的通道信号进行开窗控制，开窗控制设置见比较器数字接口模块。FAIL信号进入MCPWM模块后，可以通过设置MCPWM_TCLK进行滤波。**

### MCPWM 特殊输出状态

电机控制中经常会用到全零和全1输出状态，以下互补模式设置可以得到期望的输出。

1.  如果THn0≥THn1，芯片处于恒0状态（CH\<n\>P关闭，CH\<n\>N开启），无死区
2.  如果THn0=-TH，THn1=TH，芯片处于恒1状态（CH\<n\>P开启，CH\<n\>N关闭），无死区

### IO DRIVER模块

该模块根据实际MCPWM的寄存器配置情况，将IO设置到相应电平。IO
Driver模块的整体数据流程图如下：

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-6 IO Driver模块数据流程图

#### MCPWM 波形输出-中心对齐模式

4个MCPWM IO
Driver采用独立的控制门限，独立死区宽度（每一对互补IO的死区需要独立配置，即4个死区配置寄存器），共享数据更新事件。

采用TH\<n\>0和TH\<n\>1控制第\<n\>个MCPWM
IO的启动、关闭动作，n为1/2/3/4。

当计数器CNT值向上计数达到TH\<n\>0时，在t3时刻关闭CH\<n\>N，经过死区延时DTH0，打开CH\<n\>P。

当计数器CNT值向上计数达到TH\<n\>1时，在t4时刻关闭CH\<n\>P，经过死区延时DTH1，打开CH\<n\>N。

采用独立的启动和关闭时间控制，可以提供相位控制的能力。

死区延时保证CH\<n\>P/CH\<n\>N不会同时为高，避免短路发生。

t3/t4时刻均会产生相应中断。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-7
MCPWM时序TH\<n\>0和TH\<n\>1-互补模式

#### MCPWM波形控制-中心对齐推挽模式

互补推挽模式。第一个周期内，在t3时刻CH\<n\>P置1，在t4时刻，CH\<n\>P变低。第二个周期内，在t3时刻CH\<n\>N置1，在t4时刻，CH\<n\>N变低。

t3/t4均会产生相应中断。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-8
MCPWM时序TH\<n\>0和TH\<n\>1-互补模式

#### MCPWM波形输出-边沿对齐模式

边沿对齐模式中，在t0时刻CH\<n\>P/CH\<n\>N同时置0，在t3时刻，CH\<n\>N变高，在t4时刻，CH\<n\>P变高。

t3/t4均会产生相应中断。

边沿对齐模式下，CH\<n\>P/CH\<n\>N无需死区保护。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-9
MCPWM时序边沿对齐模式

#### MCPWM波形控制-边沿对齐推挽模式

边沿对齐推挽模式。第一个周期内，在t0时刻CH\<n\>P置1，在t3时刻，CH\<n\>P变低。第二个周期内，在t0时刻CH\<n\>N置1，在t3时刻，CH\<n\>N变低。

t0/t3均会产生相应中断。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-10
MCPWM时序TH\<n\>0和TH\<n\>1边沿对齐推挽模式

#### MCPWM IO死区控制

MCPWM IO是一对互斥控制信号CH\<n\>P/CH\<n\>N，控制如下图所示的电路，

当CH\<n\>P为高/CH\<n\>N为低时，Vout输出高（VDD）；

当CH\<n\>P为低/CH\<n\>N为高时，Vout输出低（VSS）；

当CH\<n\>P为高/CH\<n\>N为高时，Vout输出不确定，但是会产生VDD到VSS的短路；

当CH\<n\>P为低/CH\<n\>\_为低时，Vout输出不确定。

必须避免CH\<n\>P/CH\<n\>N同时为高的情况，死区的引入，可以有效避免VDD到VSS的短路。

四组MCPWM IO的死区宽度可独立调整。

对于互补模式MCPWM IO自动插入死区。

对于边沿对齐模式，MCPWM IO无死区。

在IO
Driver模块中增加CH\<n\>P/CH\<n\>N冲突检测，发生冲突时，自动将IO拉低，同时给出错误中断（中断保持，直到CPU写0）。

MCPWM
IO也可通过软件配置的方式输出，此时，死区控制通过软件实现，如果PWM模式为互补，仍然由硬件保证不同时为高或者为低。

CH\<n\>P/CH\<n\>N，在IO上可以互换。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图13-11
MCPWM IO控制示意图

#### MCPWM IO极性设置

CH\<n\>P/CH\<n\>N的有效电平可以配置为高有效/低有效，每个IO的有效电平单独可配。CH\<n\>P/CH\<n\>N输出到IO的位置通过软件配置可以互换。

#### MCPWM IO自动保护

当发生急停事件（Fail事件），应立刻将CH\<n\>P/CH\<n\>N自动切换到关闭状态。需要注意关闭电平配置（MCPWM_FAIL.CHxN_DEFAULT和MCPWM_FAIL.CHxP_DEFAULT控制默认电平）。

- 芯片正常工作后，IO默认输出的电平是寄存器MCPWM_FAIL.CHxN_DEFAULT和MCPWM_FAIL.CHxP_DEFAULT指定值，当用户配置完毕，MCPWM正常工作后，配置MCPWM_FAIL.MCPWM_OE（即MOE）为1，IO输出电平受到MCPWM
  IO模块控制。
- 当发生Fail短路状况时，硬件立即切换到IO默认输出电平。
- 当芯片调试中，CPU Halt时，PWM停止输出，输出FAIL\[15:8\]的值。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图14-1 UART 发送与接收中断

### 波特率配置

UART输入时钟为系统主时钟，波特率通过两级分频实现。

波特率=UART模块时钟/（256\*UARTx_DIVH+UARTx_DIVL+1)

可以通过SYS_CLK_DIV2对UART模块时钟进行分频，

UART模块时钟=系统主时钟/(1+SYS_CLK_DIV2)

表14-1 UART波特率配置示例

|||||
|---|---|---|---|
|UART波特率|SYS_CLK_DIV2|UART_DIVH|UART_DIVL|
|300|0x0007|0x9C|0x3F|
|600|0x0003|0x9C|0x3F|
|1200|0x0001|0x9C|0x3F|
|2400|0x0000|0x9C|0x3F|
|4800|0x0000|0x4E|0x1F|
|9600|0x0000|0x27|0x0F|
|19200|0x0000|0x13|0x87|
|38400|0x0000|0x09|0xC3|
|43000|0x0000|0x08|0xB8|
|56000|0x0000|0x06|0xB1|
|57600|0x0000|0x06|0x82|
|115200|0x0000|0x03|0x40|

注意，波特率配置系数仅为示例，可能不唯一。

### 收发端口互换(TX/RX互换)

UART模块支持Tx与Rx端口互换。通过将Tx对应的GPIO配置为输入使能，Rx对应的GPIO配置为输出使能，即可实现Tx与Rx端口的互换。此时，GPIO第二功能仍选择为UART，UART本身配置无需修改。

此外，如果要使用一个GPIO同时作为Tx和Rx，需要将IO分时复用为输入或输出，对应Rx或Tx，即可实现单口半双工逻辑。

### DMA配置

UART模块，支持DMA操作。实现DMA搬移数据，能极大减轻CPU的负担。UART采用DMA操作，有以下注意事项。

接收和发送，不能同时使用DMA。只能接收，或者只能发送使用DMA。

发送模式，有两种配置DMA的方案。

方案1：若UARTx_IE.TX_BUF_EMPTY_RE配置有效。UARTx模块将预取第一个字节，准备发送；一旦数据进入发射队列，UARTx_IE.UARTx_BUFF即为空，硬件自动会请求DMA搬移下一个字节直至数据搬移完毕。DMA搬移完毕后，将产生DMA完成中断，但是UARTx很可能没有发送完毕最后一个字节，若立即操作UARTx，将可能会产生异常。建议在DMA中断处理程序中，开启UARTx_IE.TX_DONE_IE中断，UARTx将最后一个字节发送完毕，产生发送完成中断，在UARTx中断处理函数里面，再关闭UARTx_IE.TX_DONE_IE。

方案2：若UARTx_IE.TX_DONE_RE配置有效。建议UART初始化阶段不要清除TX_DONE标志。当前传输的数据长度为Len，DMA配置传输的字节数为Len，开启DMA中断，DMA传输完毕后，UART也发送完毕，软复位UARTx模块并重新初始化UARTx，可开启下一次UARTx的发送。

【图片已删除】为控制知识库体积，本文档不携带图片，相关图示请查阅凌鸥创芯官网发布的正式手册。

图14-2 UART DMA 发送对比

## 寄存器

### 地址分配

UART0与UART1实现完全相同。

UART0 基地址0x4001_2800。

UART1 基地址0x4001_2C00。

表14-2
UARTx地址分配列表

||||
|---|---|---|
|名称|偏移地址|说明|
|UARTx_CTRL|0x00|UART控制寄存器|
|UARTx_DIVH|0x04|UART波特率设置高字节寄存器|
|UARTx_DIVL|0x08|UART波特率设置低字节寄存器|
|UARTx_BUFF|0x0C|UART收发缓冲寄存器|
|UARTx_ADR|0x10|485通信地址匹配寄存器|
|UARTx_STT|0x14|UART状态寄存器|
|UARTx_IE|0x18|UART中断使能寄存器|
|UARTx_IF|0x1C|UART中断标志寄存器|
|UARTx_INV|0x20|UART IO翻转使能|

### UARTx_CTRL UARTx 控制寄存器 ( x = 0,1)

UART0_CTRL地址：0x4001_2800

UART1_CTRL地址：0x4001_2C00

复位值：0x0

表14-3 UARTx控制寄存器UARTx_CTRL

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
||||||||||MDMASTER_BIT9|MD_EN|CK_EN|CK_TYPE|BIT_ORDER|STOP_LEN|DAT_LEN|
||||||||||RW|RW|RW|RW|RW|RW|RW|
||||||||||0|0|0|0|0|0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[6\]|MDMASTER_BIT9|Multi-drop Master模式时，第9个数据位值|
|\[5\]|MD_EN|使能Multi-drop，0:禁用, 1:使能|
|\[4\]|CK_EN|使能校验，0:禁用, 1:使能|
|\[3\]|CK_TYPE|奇偶校验，0:EVEN 1:ODD|
|\[2\]|BIT_ORDER|先发送的比特，0:LSB , 1:MSB|
|\[1\]|STOP_LEN|停止位长度，0:1bit，1:2bit|
|\[0\]|DAT_LEN|数据长度，0:8bit，1:7bit|

### UARTx_DIVH UARTx 波特率设置高字节寄存器 ( x = 0,1)

UART0_DIVH地址：0x4001_2804

UART1_DIVH地址：0x4001_2C04

复位值：0x0

表14-4
UARTx波特率设置高字节寄存器UARTx_DIVH

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||DIVH||||||||
|||||||||RW||||||||
|||||||||0||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7:0\]|DIVH|波特率设置高字节BAUDRATE =主时钟/(1+DIVL+256\*DIVH)|

### UARTx_DIVL UARTx 波特率设置低字节寄存器 ( x = 0,1)

UART0_DIVL地址：0x4001_2808

UART1_DIVL地址：0x4001_2C08

复位值：0x0

表14-5
UARTx波特率设置低字节寄存器UARTx_DIVL

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||DIVL||||||||
|||||||||RW||||||||
|||||||||0||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7:0\]|DIVL|波特率设置低字节BAUDRATE =主时钟/(1+256\* UARTx_DIVH+UARTx_DIVL)|

### UARTx_BUFF UARTx 收发缓冲寄存器 ( x = 0,1)

UART0_BUFF地址：0x4001_280C

UART1_BUFF地址：0x4001_2C0C

复位值：0x0

表14-6
UARTx收发缓冲寄存器UARTx_BUFF

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||BUFF||||||||
|||||||||RW||||||||
|||||||||0||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7:0\]|BUFF|写:发送数据缓存读：接收数据寄存器|

UART的Tx_buffer和Rx_buffer共享地址0x0C地址。其中，Tx_buffer是只写的，Rx_buffer是只读的。因此读访问UARTx_BUFF是访问UARTx_RX_BUFF，写访问UARTx_BUFF是访问UARTx_TX_BUFF。

### UARTx_ADR UARTx 地址匹配寄存器 ( x = 0,1)

UART0_ADR地址：0x4001_2810

UART1_ADR地址：0x4001_2C10

复位值：0x0

表14-7
UARTx地址匹配寄存器UARTx_ADR

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||ADR||||||||
|||||||||RW||||||||
|||||||||0||||||||

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7:0\]|ADR|用作485通信时的匹配地址|

### UARTx_STT UARTx 状态寄存器 ( x = 0,1)

UART0_STT地址：0x4001_2814

UART1_STT地址：0x4001_2C14

复位值：0x0003

表14-8
UARTx状态寄存器UARTx_STT

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
||||||||||||||ADR_MATCH|TX_DONE|TX\_ BUF_EMPTY|
||||||||||||||R|R|R|
||||||||||||||0|1|1|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:3\]||未使用|
|\[2\]|ADR_MATCH|Multi-drop模式下，地址匹配标志位。1：匹配；0：未匹配。|
|\[1\]|TX_DONE|发送完成（此时发送缓存如不为空，则可以继续发送缓存中的数据）1：完成；0：未完成。|
|\[0\]|TX_BUF_EMPTY|发送缓存状态位。1：空；0：非空。|

### UARTx_IE UARTx 中断使能寄存器 ( x = 0,1)

UART0_IE地址：0x4001_2818

UART1_IE地址：0x4001_2C18

复位值：0x0

表14-9
UARTx中断使能寄存器UARTx_IE

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||TX_BUF_EMPTY_RE|RX_DONE_RE|TX_DONE_RE|CK_ERR_IE|STOP_ERR_IE|TX_BUF_EMPTY_IE|RX_DONE_IE|TX_DONE_IE|
|||||||||RW|RW|RW|RW|RW|RW|RW|RW|
|||||||||0|0|0|0|0|0|0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:8\]||未使用|
|\[7\]|TX_BUF_EMPTY_RE|发送缓冲区空DMA请求使能，默认值为0。0：关闭；1：开启。|
|\[6\]|RX_DONE_RE|接收完成DMA请求使能，默认值为0。0：关闭；1：开启。|
|\[5\]|TX_DONE_RE|发送完成DMA请求使能，默认值为0。0：关闭；1：开启。|
|\[4\]|CK_ERR_IE|校验错误中断开关，默认值为0。0：关闭；1：开启。|
|\[3\]|STOP_ERR_IE|停止位错误中断开关，默认值为0。0：关闭；1：开启。|
|\[2\]|TX_BUF_EMPTY_IE|发送缓冲区空中断开关，默认值为0。0：关闭；1：开启。|
|\[1\]|RX_DONE_IE|接收完成中断开关，默认值为0。0：关闭；1：开启。|
|\[0\]|TX_DONE_IE|发送完成中断开关，默认值为0。0：关闭；1：开启。|

### UARTx_IF UARTx 中断标志寄存器 ( x = 0,1)

UART0_IF地址：0x4001_281C

UART1_IF地址：0x4001_2C1C

复位值：0x0005

表14-10
UARTx中断使能寄存器UARTx_IF

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
||||||||||||CK_ERR_IF|STOP_ERR_IF|TX_BUF_EMPTY_IF|RX_DONE_IF|TX_DONE_IF|
||||||||||||RW1C|RW1C|RW1C|RW1C|RW1C|
||||||||||||0|0|1|0|1|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:5\]||未使用|
|\[4\]|CK_ERR_IF|校验错误中断标志，高有效，写1清零。|
|\[3\]|STOP_ERR_IF|停止位错误中断标志，高有效，写1清零。|
|\[2\]|TX_BUF_EMPTY_IF|发送缓冲区空中断标志，高有效，写1清零。|
|\[1\]|RX_DONE_IF|接收完成中断标志，高有效，写1清零。|
|\[0\]|TX_DONE_IF|发送完成中断标志，高有效，写1清零。|

上电后发送缓冲区空标志TX_BUF_EMPTY_IF和发送完成中断标志TX_DONE_IF默认为1。

中断标志写1清零，一般不建议用如下\|=方式清零，因为\|=是先读取中断标志，将对应位改为1再写入清零，如果同时有其他中断标志置位，会被一起清零，而这通常不是软件所期望的。例如，如下写法本意是清零TX_DONE_IF，但如果同时RX_DONE_IF在写入执行前置1了，则软件先读取回UARTx_IF值为0x2，然后执行或操作0x2\|0x1=0x3，然后写入，同时对RX_DONE_IF和TX_DONE_IF进行了清零，可能导致UART少进入一次因接收数据产生的中断，从而少接收到一字节数据。

*UARTx_IF\|=0x1;*

如果希望清零TX_DONE_IF标志位，应以如下方式，直接对BIT0写1.

*UARTx_IF=0x1;*

### UARTx_INV UARTx IO 翻转寄存器 ( x = 0,1)

UART0_INV地址：0x4001_2820

UART1_INV地址：0x4001_2C20

复位值：0x0

表14-11
UARTx中断使能寄存器UARTx_INV

|||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|||||||||||||||TXD_INV|RXD_INV|
|||||||||||||||RW|RW|
|||||||||||||||0|0|

||||
|---|---|---|
|位置|位名称|说明|
|\[31:2\]||未使用|
|\[1\]|TXD_INV|TXD输出极性使能开关，默认值为0。0：正常输出；1：取反输出。正常输出极性，是指软件发送1，硬件发送的即是1；取反输出极性，是指软件发送1，硬件发送的是0。|
|\[0\]|RXD_INV|RXD输入极性使能开关，默认值为0。0：正常输入；1：取反输入。正常输入极性，是指硬件接收1，软件接收的即是1；取反输入极性，是指硬件接收1，软件接收到的是0。|

