CAP 模块
- 捕捉模式:一种输入模式,对输入的信号进行边沿的捕获,从而获得周期等时间信息。
- 普通 PWM 输出:一种输出模式,产生普通 PWM 信号。
CAP 模块 CAP0/ 1/ .../ 5 均为相同模块,各个模块的信号均相同,但会增加标号 0/1/…/5,用于区分不同模块的信号。例如 CNT_CLK0 代表 CAP0 的计数器时钟信号 CNT_CLK。

-
CAP0 与 CAP0/ 1/ .../ 5 的结构基本一致,SYS_CLK 为 CAP 模块工作时钟,典型值为 200MHz;
-
CAP0 主要由计数功能模块、PWM 功能模块、捕捉功能模块和中断功能模块组成,其中 PWM 功能模块与捕捉功能模块是二选一功能。
功能描述
计数器功能
捕捉模式以及简单 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 的数值加载至计数器,从而达到计数器相位的同步效果。另外 CAP0/ 1/ .../ 5 的输入同步信号的连接方式,可以参考 计数同步。
- 输出同步
通过寄存器 CAP_SYNC_OUT,可以选择 CAP_SYNCI 信号或 CAP_CNT_PRD 信号输出。

捕捉输入功能

-
输入捕捉信号选择
输入捕捉信号除了支持外部的引脚信号捕捉之外,还可以支持内部的 EPWM 信号。
-
输入滤波
CAP 模块在捕捉输入功能下,输入信号 CAP0/ 1/ .../ 5_IO 均需要经过输入滤波模块,产生 CAP0/ 1/ .../ 5_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 模块的中断信号源或逻辑示例如下:

寄存器列表
偏移地址 | 缩写 | 寄存器描述 | 章节 |
---|---|---|---|
0x0000 | CAP_CNT_V | CAP Counter 计数数值 | 0x0000 CAP_CNT_V |
0x0004 | CAP_CNT_PH | CAP Counter 计数同步相位 | 0x0004 CAP_CNT_PH |
0x0008 | CAP_REG0 | CAP_REG0 寄存器 | 0x0008 CAP_REG0 |
0x000C | CAP_REG1 | CAP_REG1 寄存器 | 0x000C CAP_REG1 |
0x0010 | CAP_REG2 | CAP_REG2 寄存器 | 0x0010 CAP_REG2 |
0x0014 | CAP_REG3 | CAP_REG3 寄存器 | 0x0014 CAP_REG3 |
0x0018 | CAP_CONF1 | CAP 配置寄存器 1 | 0x0018 CAP_CONF1 |
0x001C | CAP_CONF2 | CAP 配置寄存器 2 | 0x001C CAP_CONF2 |
0x0020 | CAP_INT_EN | CAP 中断使能寄存器 | 0x0020 CAP_INT_EN |
0x0024 | CAP_FLG | CAP 标记寄存器 | 0x0024 CAP_FLG |
0x0028 | CAP_FLG_CLR | CAP 标记清除寄存器 | 0x0028 CAP_FLG_CLR |
0x002C | CAP_SW_FRC | 软件强制 CAP 事件产生寄存器 | 0x002C CAP_SW_FRC |
0x0030 | CAP_IN_FLT | CAP 输入滤波寄存器 | 0x0030 CAP_IN_FLT |
0x0034 | CAP_IN_SRC | CAP 输入选择寄存器 | 0x0034 CAP_IN_SRC |
0x00FC | CAP_VER | CAP 子模块版本寄存器 | 0x00FC CAP_VER |
CAP 模块寄存器描述
0x0000 CAP_CNT_V
默认值:0x00000000 |
CAP Counter 计数数值 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R/W |
0x0 | CAP_CNT_V CAP Counter Value,CAP 计数器的计数值。 对此字段进行读操作,可以读取此时 CAP 计数器对此字段进行写操作,可以设置 CAP 计数器的计数值,CAP 计数器立马更新此计数值,计数方式维持原有的设置进行 |
0x0004 CAP_CNT_PH
默认值:0x00000000 |
CAP Counter 计数同步相位 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R/W |
0x0 | CAP_CNT_PH CAP Counter Phase,CAP 计数器的同步相位。 当出现同步信号时,此时 CAP 计数器进行同步,加载此寄存器的相位值进行计数。 |
0x0008 CAP_REG0
默认值:0x00000000 |
CAP_REG0 寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R or R/W |
0x0 | CAP_REG0, CAP Register 0,CAP 寄存器 0。 在 Capture 模式下,此寄存器为只读,用于捕捉事件 0 的捕捉寄存器,捕捉计数器数值。在普通 PWM 模式下,此寄存器为可读写,此寄存器用于计数器周期值 CAP_CNT_PRDV。 |
0x000C CAP_REG1
默认值:0x00000000 |
CAP_REG1 寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R or R/W |
0x0 | CAP_REG1 CAP Register 1,CAP 寄存器 1。 在 Capture 模式下,此寄存器用于捕捉事件 1 的捕捉寄存器,捕捉计数器数值。在普通 PWM 模式下,此寄存器用于计数器比较值 CAP_CNT_CMPV。 |
0x0010 CAP_REG2
默认值:0x00000000 |
CAP_REG2 寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R or R/W |
0x0 | CAP_REG2 CAP Register 2,CAP 寄存器 2。 在 Capture 模式下,此寄存器用于捕捉事件 2 的捕捉寄存器,捕捉计数器数值。在普通 PWM 模式下,此寄存器用于计数器周期值 CAP_CNT_PRDV 的影子寄存器。 |
0x0014 CAP_REG3
默认值:0x00000000 |
CAP_REG3 寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R or R/W |
0x0 | CAP_REG3 CAP Register 3,CAP 寄存器 3。 在 Capture 模式下,此寄存器用于捕捉事件 3 的捕捉寄存器,捕捉计数器数值。在普通 PWM 模式下,此寄存器用于计数器比较值 CMPV 的影子寄存器。 |
0x0018 CAP_CONF1
默认值:0x00000000 |
CAP 配置寄存器 1 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:14 |
- |
- | - |
13:9 |
R/W |
0x0 | CAP_IN_EDG_EVN_DIV Capture Input Edge Event
Divisor,输入捕捉信号的边沿除数,经过此除数可以将翻转频次较高的信号处理为翻转频次较低的信号。
|
8 |
R/W |
0x0 | CAP_REG_LD_EN Capture Register Load
Enable,捕捉寄存器加载使能,即发生捕捉事件 0/1/2/3 时,使能捕捉寄存器 0/1/2/3
进行计数器数值的捕捉。
|
7 |
R/W |
0x0 | CAP_EVNT3_RST Capture Event3 Reset,捕捉事件 3 触发后进行
CAP 计数器的复位。
|
6 |
R/W |
0x0 | CAP_EVNT3_POL Capture Event3 Polarity Set,捕捉事件 3
的极性控制。
|
5 |
R/W |
0x0 | CAP_EVNT2_RST Capture Event2 Reset,捕捉事件 2 触发后进行
CAP 计数器的复位。
|
4 |
R/W |
0x0 | CAP_EVNT2_POL Capture Event1 Polarity Set,捕捉事件 1
的极性控制。
|
3 |
R/W |
0x0 | CAP_EVNT1_RST Capture Event1 Reset,捕捉事件 1 触发后进行
CAP 计数器的复位。
|
2 |
R/W |
0x0 | CAP_EVNT1_POL Capture Event1 Polarity Set,捕捉事件 1
的极性控制。
|
1 |
R/W |
0x0 | CAP_EVNT0_RST Capture Event0 Reset,捕捉事件 0 触发后进行
CAP 计数器的复位。
|
0 |
R/W |
0x0 | CAP_EVNT0_POL Capture Event0 Polarity Set,捕捉事件 0
的极性控制。
|
0x001C CAP_CONF2
默认值:0x00000000 |
CAP 配置寄存器 2 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:12 |
- |
- | - |
11 |
R/W |
0x0 | CAP_PWM_OUT_INIT Capture PWM Output Initial Value,PWM 输出初始值,即在
PWM 模式下,未使能 CAP Counter 时的输出值。
|
10 |
R/W |
0x0 | CAP_PWM_POL Capture PWM Output Polarity,PWM 的输出极性。
|
9 |
R/W |
0x0 | CAP_MODE_SEL Capture Mode Select,捕捉模式选择。
|
8 |
R/WAC |
0x0 | CAP_SW_FRC_SYNC Capture Software Force Synchronous
Signal,软件产生强制的同步信号。
|
7:6 |
R/W |
0x0 | CAP_SYNC_OUT Capture Synchronous Output Select,同步输出信号选择。
|
5 |
R/W |
0x0 | CAP_SYNC_IN_EN Capture Synchronous Input Enable,同步输入使能,使能 CAP
计数器进行同步,同步值为 PH,同步使能信号为 IN 或者软件产生的强制同步信号。
|
4 |
R/W |
0x0 | CAP_CNT_EN Capture Counter Enable,捕捉计数器使能。
|
3 |
R/WAC |
0x0 | CAP_EVNT_RST Capture Event Reset,复位捕捉事件的起点,从捕捉事件 0 重新开始新的捕捉。
|
2:1 |
R/W |
0x0 | CAP_OS_EP Capture One-shot End Point,单次捕捉终点设置。
|
0 |
R/W |
0x0 | CAP_OS_MOD_EN Capture One-shot Mode Enable,单次捕捉使能。
|
0x0020 CAP_INT_EN
默认值:0x00000000 |
CAP 中断使能寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:8 |
- |
- |
- |
7 |
R/W |
0x0 | CAP_CNT_CMP_INT_EN Capture Counter Compare Interrupt
Enable,捕捉计数器计数达到比较值的中断使能。
|
6 |
R/W |
0x0 | CAP_CNT_PRD_INT_EN Capture Counter Period Interrupt
Enable,捕捉计数器计数达到周期值的中断使能。
|
5 |
R/W |
0x0 | CAP_CNT_OVFL_INT_EN Capture Counter Overflow Interrupt
Enable,捕捉计数器上溢出中断使能。
|
4 |
R/W |
0x0 | CAP_EVNT3_INT_EN Capture Event3 Interrupt Enable,捕捉事件 3
的中断使能。
|
3 |
R/W |
0x0 | CAP_EVNT2_INT_EN Capture Event2 Interrupt Enable,捕捉事件 2
的中断使能。
|
2 |
R/W |
0x0 | CAP_EVNT1_INT_EN Capture Event1 Interrupt Enable,捕捉事件 1
的中断使能。
|
1 |
R/W |
0x0 | CAP_EVNT0_INT_EN Capture Event0 Interrupt Enable,捕捉事件 0
的中断使能。
|
0 |
- |
- |
- |
0x0024 CAP_FLG
默认值:0x00000000 |
CAP 标记寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:8 |
- |
- | - |
7 |
R |
0x0 | CAP_CNT_CMP_FLG Capture Counter Compare
Flag,捕捉计数器计数达到比较值的状态标记。
|
6 |
R |
0x0 | CAP_CNT_PRD_FLG Capture Counter Period
Flag,捕捉计数器计数达到周期值的状态标记。
|
5 |
R |
0x0 | CAP_CNT_OVFL_FLG Capture Counter Overflow Flag,捕捉计数器上溢出状态标记。
|
4 |
R |
0x0 | CAP_EVNT3_FLG Capture Event3 Flag,捕捉事件 3 的状态标记。
|
3 |
R |
0x0 | CAP_EVNT2_FLG Capture Event2 Flag,捕捉事件 2 的状态标记。
|
2 |
R |
0x0 | CAP_EVNT1_FLG Capture Event1 Flag,捕捉事件 1 的状态标记。
|
1 |
R |
0x0 | CAP_EVNT0_FLG Capture Event0 Flag,捕捉事件 0 的状态标记。
|
0 |
R |
0x0 | CAP_INT_FLG Capture Interrupt Flag,捕捉模块的中断信号标记。
|
0x0028 CAP_FLG_CLR
默认值:0x00000000 |
CAP 标记清除寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:8 |
- |
- | - |
7 |
R/WAC |
0x0 | CAP_CNT_CMP_CLR Capture Counter Compare Flag
Clear,捕捉计数器计数达到比较值的状态标记清除。
|
6 |
R/WAC |
0x0 | CAP_CNT_PRD_CLR Capture Counter Period Flag
Clear,捕捉计数器计数达到周期值的状态标记清除。
|
5 |
R/WAC |
0x0 | CAP_CNT_OVFL_CLR Capture Counter Overflow Flag
Clear,捕捉计数器上溢出状态标记清除。
|
4 |
R/WAC |
0x0 | CAP_EVNT3_CLR Capture Event3 Flag Clear,捕捉事件 3 的状态标记清除。
|
3 |
R/WAC |
0x0 | CAP_EVNT2_CLR Capture Event2 Flag Clear,捕捉事件 2 的状态标记清除。
|
2 |
R/WAC |
0x0 | CAP_EVNT1_CLR Capture Event1 Flag Clear,捕捉事件 1 的状态标记清除。
|
1 |
R/WAC |
0x0 | CAP_EVNT0_CLR Capture Event0 Flag Clear,捕捉事件 0 的状态标记清除。
|
0 |
- |
- | - |
0x002C CAP_SW_FRC
默认值:0x00000000 |
软件强制 CAP 事件产生寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:8 |
- |
- | - |
7 |
R/WAC |
0x0 | CAP_SW_FRC_CNT_CMP Capture Software Force Counter
Compare,强制捕捉计数器计数达到比较值的信号产生。
|
6 |
R/WAC |
0x0 | CAP_SW_FRC_CNT_PRD Capture Software Force Counter
Period,强制捕捉计数器计数达到周期值的信号产生。
|
5 |
R/WAC |
0x0 | CAP_SW_FRC_CNT_OVFL Capture Software Force Counter
Overflow,强制计数器上溢出信号的产生。
|
4 |
R/WAC |
0x0 | CAP_SW_FRC _EVNT3 Capture Software Force Event3,强制捕捉事件的 EVNT3
的产生。
|
3 |
R/WAC |
0x0 | CAP_SW_FRC _EVNT2 Capture Software Force Event2,强制捕捉事件的 EVNT2
的产生。
|
2 |
R/WAC |
0x0 | CAP_SW_FRC _EVNT1 Capture Software Force Event1,强制捕捉事件的 EVNT1
的产生。
|
1 |
R/WAC |
0x0 | CAP_SW_FRC_EVNT0 Capture Software Force Event0,强制捕捉事件的 EVNT0
的产生。
|
0 |
- |
- |
- |
0x0030 CAP_IN_FLT
默认值:0x00000000 |
CAP 输入滤波寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:16 |
- |
- |
- |
15:8 |
R/W |
0x0 | CAP_SMP_CTL_PRD Capture Input Sample Control Period,输入采样周期。
|
7:4 |
R/W |
0x0 | CAP_IN_PRE_FLT, CAP Input Pre Filter Enable,CAP
输入信号的预滤波使能,预滤波采样周期为 CLK。一般使用,无需使能,默认旁通即可。
|
3:0 |
R/W |
0x0 | CAP_IN_FLT_SEL, Capture Input Filter
Seclect,输入滤波功能选择,此字段只有在输入捕捉模式有效。
|
0x0034 CAP_IN_SRC
默认值:0x00000000 |
CAP 输入选择寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:5 |
- |
- | - |
4:0 |
R/W |
0x0 | CAP_IN_SRC_SEL, Capture Input Source
Seclect,输入信号源选择,此字段只有在输入捕捉模式有效。
|
0x00FC CAP_VER
默认值:0x00000100 |
CAP 子模块版本寄存器 | ||
---|---|---|---|
位域 |
类型 |
默认值 |
描述 |
31:0 |
R |
0x0000_0100 |
版本寄存器 V1.1 |