数据表似乎错误地声明当 ENABLE 位置1时、边沿计数(捕捉)模式启动。 我在一段时间前注意到这个问题、并在 定时器配置中添加了 Tivaware 捕捉位集 define TnMR。 但是、即使 POR 默认为0x0、同一段忽略了 TnCMR 位的任何注释也必须清除、Tivaware define 会设置 TnCMR (0x00000004)任何人添加到 HWREG 调用中都不会获得预期的资源。 数据表主题 顺序 在 边沿计时模式之前具有边沿计数。 还 定义 了(TIMER_TAMR_TACMR)边沿计时模式的默认计时器。
通过阅读数据表 GPTM 分析、这个问题并不明显。 Tivaware omits distinction (HW_TIMER.h) 定义 为 通过 GPTMTnMR 寄存器中的 TnCBR 位正确设置针对边沿或时间的两个捕捉模式。 GPTMCFG 寄存器不设置边沿捕获模式默认值、GPTMTnMR 底部的脚注说明该模式在 GPTMCFG 中设置。 然而、GPTMCFG 只设置定时器溢出的点、 并且与 GPTMTnMR 位 缺省值0x0保留的方式没有关系。
通过为每 种模式(边沿/时间)添加一个单独的定义、可以很容易地校正 CCP 捕获模式的整个主题、因为它与 HWREG 调用相关 、以符号方式设置 寄存器位。
13.3.3.3输入边沿计数模式
在边沿计数模式中、定时器被配置为24位递增或递减计数器、包括带有存储在 GPTM Timer n 预分频(GPTMTnPR)寄存器中的高计数值和 GPTMTnR 寄存器中低位的可选预分频器。 在此模式下、定时器能够捕获三种类型的事件:上升沿、下降沿或上升/下降沿。 要使定时器处于边沿计数模式、必须将 GPTMTnMR 寄存器的 TnCMR 位清零。 定时器计数的边沿类型由 GPTMCTL 寄存器的 TnEVENT 位域决定。 在递减计数模式中的初始化期间、GPTMTnMATCHR 和 GPTMTnPMR 寄存器被配置为 GPTMTnILR 和 GPTMTnPR 寄存器以及 GPTMTnMATCHR 和 GPTMTnPMR 寄存器中的值之间的差值等于必须计数的边沿事件的数量。 在递增计数模式中、定时器从0x0开始计数到 GPTMTnMATCHR 和 GPTMTnPMR 寄存器中的值。
请注意、在执行递增计数时、GPTMTnPR 和 GPTMTnILR 的值必须大于 GPTMTnPMR 和 GPTMTnMATCHR 的值。 第961页的列出了相应的值
当定时器启用时加载到定时器寄存器中。
当软件写 GPTM 控制(GPTMCTL)寄存器的 TnEN 位时、定时器将启用以进行事件捕获。
GPTMTnMR REG2、REG3:
1:0 TnMR RW 0x0 GPTM Timer B 模式
TnMR 值如下定义:
值描述
0x0保留
0x1单次触发定时器模式
0x2周期定时器模式
0x3捕获模式
2 GPTM Timer B 捕获模式
TnCMR 值如下定义:
值描述
0边沿计数模式
1边沿计时模式
#define TIMER_TAMR_TACMR 0x00000004 // GPTM Timer A 捕获模式 (0x00000000)
#define TIMER_TAMR_M 0x00000003 // GPTM Timer A 模式
#define TIMER_TAMR_1_SHOT 0x00000001 //一次性计时器模式
#define TIMER_TAMR_TAMR_PERIOD 0x00000002 //周期定时器模式
#define TIMER_TAMR_TAMR_CAP 0x00000003 //捕获模式
#define TIMER_TBMR_TBCMR 0x00000004 // GPTM Timer B 捕获模式(0x00000000)
#define TIMER_TBMR_TBMR_M 0x00000003 // GPTM Timer B 模式
#define TIMER_TBMR_TBMR_1_SHOT 0x00000001 //单次触发定时器模式
#define TIMER_TBMR_TBMR_PERIOD 0x00000002 //周期定时器模式
#define TIMER_TBMR_TBMR_CAP 0x00000003 //捕获模式