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.

[参考译文] CCP EdgeTime 事件捕获

Guru**** 2563960 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/787927/ccp-edgetime-event-capture

器件型号:TM4C1294KCPDT

边沿时间测量的数据表部分 似乎 是预分频器寄存器快照的拼写错误。 快照模式寄存器  用于经寄存器文本确认的周期模式和 OneShot 模式。  另一点是正确配置的边沿时间模式、它可以捕获事件中断。  捕获到的结果 GPTMTnR、GPTMnPR 寄存   器返回不稳定的值、用于稳定的输入信号 CCP 和 POS 边沿事件中断。 正在配置定时器 PIOSC 时钟源、 递减计数25ms、正边沿事件捕获20Hz-220Hz 输入信号的中断、这里没有真正的问题。

第963页的描绘出输入边沿定时模式的工作原理。 在图中、假定定时器的起始值为默认值0xFFFF、并且定时器被配置为捕捉上升沿事件。 每次检测到上升沿事件时、当前的计数值都会加载到 GPTMTnR GPTMTnPS 寄存器中、并保持该值直到检测到另一个上升沿(此时新的计数值会加载到 GPTMTnR 和 GPTMTnPS 寄存器中)。

寄存器24:GPTM Timer B 预分频快照寄存器(GPTMTnPS)、偏移量0x060 (对于16/32位宽 GPTM)、该寄存器显示了 Timer B 预分频器在周期性快照模式下的当前值。

寄存器15:GPTM Timer B 预分频寄存器(GPTMTnPR)、偏移量0x03C 该寄存器允许软件扩展单独使用的定时器的范围。 在单次触发或周期递减计数模式中、该寄存器用作定时器计数器的真预分频器。 当用作真预分频器时、预分频器在 GPTMTnR 和 GPTMTnV 寄存器中的值递增之前递减计数至0。 在所有其他独立/分离模式中、该寄存器是定时器计数器上限范围的线性扩展、在16/32位 GPTM 的16位模式中保持位23:16。

13.4.4初始化和配置文本与图13-3不同、图中显示了获取  快照预分频寄存器 GPTMTnPS 以获得返回结果的状态。  寄存器 GPTMTnPS 的中断时间为0x0!

5、如果使用预分频器、将预分频值写入 GPTM Timer n 预分频寄存器(GPTMTnPR)。

获取结果:



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

    尊敬的 Bob:

    您没有看到边沿时间数据表分析中说明为边沿时间使用快照预分频器寄存器但配置文本使用另一个寄存器的问题? Tivaware TimerConfigure()文本状态快照用于周期模式、OneShot 模式、而不是边沿时间模式。 除了为边沿捕获配置计时器之外、它似乎不能正常工作。 然而、边沿计数模式在 GPTM_TNR 寄存器的中断处理程序读取中产生一致的返回值。

    您看不到打印的捕获边沿时间、即使 CCP 输入信号为常数49.5Hz、中断也不会保持常量值? 请注意、不能通过对 CCP 中的任何边沿抖动进行分频过滤来改进打印值。 此外、边沿时间预分频器值存储在 GPTM_TNR 而非 T_NPS 寄存器的高23:16中。

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

    为了在中断处理程序中返回常量结果、必须对 GPTM_TNR 寄存器的13.4.4所述的基本配置执行什么操作? 这与 CCP 输入信号的频率不同。 递减计数达到 GPTMTnR=X 和 GPTMTnR=Y 的点似乎没有锁定到 CCP 上升沿事件、并且经常在 GPTMTnR=Z 附近自下而上 没有人关心 GPTMTnR=Z、该值不被视为有效边沿时间、看起来代表超时事件。

    即使我们从第一个中断周期中保存了 GPTMTnR=X 的情况中减去 GPTMTnR=Y、打印的值仍然不是每隔一个中断周期都一致。 减去保存的变量通常会阻止 GPTM_TNR 时间值在打印变量中增长。  49.5Hz CCP 远高于25ms、这应在 GPTM_TNR 中轻松计数到40Hz。

    25ms 计时器加载值:

    /*加载高位 TbPR 24位 CCP 边沿时间
    *对于25ms/40Hz 的最短边沿时间*/
    MAP_TimerPrescaleSet (TIMER0_BASE、TIMER_B、0x0006);
    
    /*加载低位 TbILR 25ms/40Hz 边沿时间*/
    MAP_TimerLoadSet (TIMER0_BASE、TIMER_B、0x1A80);
    
    /*为 CCP1配置边沿极性捕捉事件。 *
    MAP_TimerControlEvent (TIMER0_BASE、TIMER_B、TIMER_EVENT_POS_EDGE); 

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

    尊敬的 Bob:

    看起来很明显、我们必须在 GPTM 配置中为 PS 寄存器启用快照模式才能产生有效结果。 配置和边沿时间分析部分没有提到在 TnMR 中启用快照模式(TnSNAPS)位。

    在下面的相关文本中、有一个很愚蠢的现象:图13-3 GPTMTnR=X 和 GPTMTnR=Y 结果、即使在中断和应用程序执行期间也是可读的。 文本信息器应用程序在 X 到 Y CCP 输入周期之间的边沿时间结果被磁力停止。 最终结果是否在 GPTMTnR=Z 周期结束时连接在一起? 相对于使用寄存器信息的应用、"保留在此处"是什么意思? 如果第一个值从未被应用程序读取、而是通过 F=1/p 来比较 X 和 Y 来获得 CCP 输入频率、那么加载新值的点是什么?

    无论边沿时间、即使启用了捕捉模式、CCP 捕获也无法产生一致的结果、在中断任一方式期间、tNPS 寄存器都是0x0。 由于 TNR 保存预分频器结果位[23:16]、可能会发生0x0? 也许是时候用有用的事实更新 TM4C1294数据表了、这样客户就不会有太多困难了? Stellaris 数据表中也包含下面同样的"不准确"语句、TM4C1294数据表中添加了 tNPS 寄存器使其进一步混淆。

    数据表逐字记录:

    每次检测到上升沿事件时、当前的计数值都会加载到 GPTMTnR 和 GPTMTnPS 寄存器中、并保持该值直到检测到另一个上升沿(此时新的计数值会加载到 GPTMTnR 和 GPTMTnPS 寄存器中)。