功能描述
计数器功能
捕捉模式以及简单 PWM 输出模式,采用相同的计数器模块,使用 32-bit 计数器。
计数时钟
CAP 模块计数器的时钟无分频系数控制,直接由 SYS_CLK 驱动。
计数器在计数值等于 CAP_CNT_PRDV (即 PWM 模式下寄存器 CAP_REG0) 可产生 CAP_CNT_PRD 信号。
计数器在计数值等于 CAP_CNT_CMPV(即 PWM 模式下寄存器 CAP_REG1)可产生 CAP_CNT_CMP 信号。
在计数值达到 0xFFFF_FFFF 时可产生 CAP_CNT_OVFL 信号。
计数同步
CAP 模块的计数器支持外部输入信号同步计数器,并支持输出同步信号。
- 输入同步
当输入同步信号 CAP_SYNCI 有效,计数器将同步相位寄存器 CAP_CNT_PH 的数值加载至计数器,从而达到计数器相位的同步效果。另外 的输入同步信号的连接方式,可以参考 。
- 输出同步
通过寄存器 CAP_SYNC_OUT,可以选择 CAP_SYNCI 信号或 CAP_CNT_PRD 信号输出。

捕捉输入功能

-
输入捕捉信号选择
输入捕捉信号除了支持外部的引脚信号捕捉之外,还可以支持内部的 EPWM 信号。
-
输入滤波
CAP 模块在捕捉输入功能下,输入信号 _IO 均需要经过输入滤波模块,产生 _IO_PRCS 信号。
输入滤波功能,主要是用于滤除噪音信号,功能描述可以参考 EPWM 模块的输入滤波章节。
- 捕捉边沿预处理
捕捉边沿预处理功能,主要用于对输入信号进行降低频率的处理。 通过配置寄存器字段 CAP_IN_EDG_EVN_DIV 对输入信号 CAP_IO 的边沿翻转进行处理。如设置 CAP_IN_EDG_EVN_DIV = 0x1(如下图中对应配置的例子),输入信号的每两次的翻转边沿才触发一次翻转,从而得到信号 CAP_IO_DIV,这样的预处理可以降低输入信号的翻转频次。

-
捕捉控制
CAP 模块支持对四次捕捉事件,在捕捉事件到来后,捕捉控制模块会触发对应的捕捉寄存器 CAP_0/ 1/ 2/ 3 进行记录 CAP 的计数器的数值。
捕捉事件 EVENT0/ 1/ 2/ 3 可以根据需求,通过寄存器字段 CAP_EVNT0/ 1/ 2/ 3_POL,设置事件为上升沿捕捉或下降沿捕捉,以及通过寄存器字段 CAP_EVNT0/ 1/ 2/ 3_RST 配置发生捕捉事件后是否复位计数器,这样的配置方式可以计算出两次边沿的时间差值。
-
捕捉寄存器
CAP 模块配有四个捕捉寄存器 CAP_REG0/ 1/ 2/ 3,每个寄存器对应一个捕捉事件 CAP_EVNT0/ 1/ 2/ 3,当输入信号满足捕捉事件的特性,则产生捕捉信号 CAP_EVNT0/ 1/ 2/ 3,对计数器的数值进行捕捉。
捕捉事件依次按照 EVENT0、EVEMT1、EVENT2、EVENT3 进行,所以捕捉到的计数器数据依次写入寄存器 CAP_REG0、CAP_REG1、CAP_REG2、CAP_REG3。
捕捉状态可以通过寄存器字段 CAP_OS_MOD_EN 配置为连续捕捉模式或单次捕捉模式。连续捕捉模式,那么从 EVENT0 执行到 EVETN3 后,继续从 EVENT0 执行到 EVENT3,按照顺序循环进行。
单次捕捉模式,通过配置寄存器字段 CAP_OS_EP 配置需要捕捉的事件次数,当从 EVENT0 执行到所需的事件次数后,CAP 模块不再进行捕获,CAP_REG0/ 1/ 2/ 3 寄存器的数据锁存当前数据。
普通 PWM 输出功能

PWM 周期以及比较值寄存器
在普通 PWM 模式下,寄存器 CAP_REG0/ 1/ 2/ 3 的复用情况如下所示:
-
CAP_REG0 作为 CAP_CNT_PRD 使用,用于设置 PWM 输出信号的周期值,并且在计数值达到此值时,PWM 输出的信号设置为高。
-
CAP_REG1 作为 CAP_CNT_CMP 使用,用于设置 PWM 输出信号的比较值,并且在计数值达到此值时,PWM 输出的信号设置为低,用来调节 PWM 信号的脉宽。
-
CAP_REG2 作为 CAP_CNT_PRD 的影子寄存器使用,影子寄存器在计数器的数值达到 PRD 时更新。
-
CAP_REG3 作为 CAP_CNT_CMP 的影子寄存器使用,影子寄存器在计数器的数值达到 PRD 时更新。
因此对 CAP_CNT_PRD 写操作,CAP_CNT_PRD 直接更新,若对影子寄存器 CAP_CNT_PRD_SHD 写操作,则在计数器数值达到周期值时才进行更新。CAP_CNT_CMP 寄存器的更新方式也是同理。
另外,PWM 的输出极性可以利用寄存器 CAP_PWM_POL,配置 PWM 最终输出的极性,即有效电平为高还是低。
中断信号
- CAP_EVNT0
- CAP_EVNT1
- CAP_EVNT2
- CAP_EVNT3
- CAP_CNT_PRD
- CAP_CNT_CMP
- CAP_CNT_OVFL
可以配置寄存器 CAP_INT_EN,选择是否使能对应的信号进行或逻辑运算。
CAP 模块的中断信号源或逻辑示例如下:

