This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] GPTM 边沿计数/时间捕获模式

Guru**** 2225540 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/785114/gptm-edge-count-time-capture-modes

器件型号:TM4C1294KCPDT

数据表似乎错误地声明当 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 //捕获模式

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 BP101:

    [报价用户="BP101"]当软件写 GPTM 控制(GPTMCTL)寄存器的 TnEN 位时,定时器将启用以进行事件捕获。[/QUERP]

    我真的看不到这句话有什么问题。 它只是说启用了 GPTM 定时器模块、并在 TnEN 位置位后为事件捕获做好准备。 确定性还有其他配置也需要进行。 例如、您需要通过将 TBCMR 位编程为0来选择边沿计时模式或边沿计数模式、并将1选择边沿计时模式。 您当然可以对措辞提出挑剔、但我个人很清楚、您还必须将 TnCMR 位编程为0以选择边沿计数模式。  

     我想知道为什么不 将 TivaWare API TimerConfigure 与 TIMER_CFG_A_CAP_COUNT 一同使用。 这将正确地为 EDGE_COUNT 模式配置计时器。 至于 #define TIMER_TBMR_TBCMR、任何 driverlib API 甚至都不使用该定义。 我同意、对于希望使用这些宏的用户、它本可以添加另一个#define 来区分边沿时间或边沿计数。