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.

[参考译文] TM4C1294NCPDT:CAN#39;t 复位定时器值

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/589249/tm4c1294ncpdt-can-t-reset-timer-value

器件型号:TM4C1294NCPDT

我正在尝试在周期性向上计数模式下使用 tm4c1294上的计时器之一。 一切都正常、除了我似乎无法重置计数值。

以下是我的初始化代码:

SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
TimerConfigure (Timer1_base、timer_CFG_PERIODIC_UP);
TimerEnable (Timer1_base、timer_A); 

下面是我尝试复位计时器的方法:

HWREG (Timer1_base + TIMER_O_TAV)= 0; 

即使在我向 TAV 写入0之后、我也看不到 TAV 或 TAR 寄存器被复位为零。 它们只是继续计数。

有人能解释如何重置计时器吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Jo、
    您是否尝试过 TimerLoadSet()? 由于您处于周期模式,TimerLoadSet()可用于加载新值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我首先尝试了 TimerLoadSet()。

    我注释了除这个计时器之外的所有代码。 现在发生的所有事情是、如上所示对计时器进行初始化、然后我有一个包含复位代码的 while 循环。 如果我使用 HWREG(),它看起来是重置定时器 B,但不是定时器 A。TimerLoadSet()没有作用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jo-jo、
    您能否单步执行针对 HWREG (Timer1_base + timer_O_TAV)= 0的反汇编、并查看是否将正确的值加载到目标寄存器? TIMER_O_TAV 应偏移量为0x50、TIMER_O_TBV 应偏移量为0x54。 另请从寄存器浏览器窗口观看寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对手臂组件有点生锈、但看起来还可以。 最后一条指令是 STR r0、[R1]。 R0的值为0x0、R1为0x40031050、这是定时器1 TAV 寄存器。

    我一直在监视寄存器。 当我单步执行 STR 指令时、TAV 的值为0x0317B235。 当然、它并不总是那么重要、看起来它仍然在运行。 TBV 的结尾是0x31A、这可能是正确的、因为时钟运行得太快、调试器暂停之前它可能计数到高电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我相信您已经配置了32位模式。 在32位模式下、高16位对应 GPTMTBV。 如果你看看 TAV 寄存器的高16位、它是0x317、TBV 在经过一些增量后读出为0x31A。

    写入 GPTMTAV 后、您是否看到 GPTMTAR 发生了变化? 当 GPTMTAV 被写入时、该值在下一个时钟周期内被载入 GPTMTAR 寄存器。

    您是否可以在16位模式下运行? 我想知道16位模式是否会产生不同的结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将 TimerConfigure()调用更改为:

    TimerConfigure (Timer1_base、timer_CFG_A_PERIODIC_UP);

    我认为这会使我进入16位模式。 但是、它的行为仍然是相同的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我希望能够看到寄存器被清零、然后当我看到 TBV 寄存器也发生变化时、我认为一定是错误的。 既然您已经指出了 TBR 和 TAR 是如何连接的、我想它毕竟可以正常工作。 我想调试器中存在我所期望的滞后。

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

    您好、Jo-jo、

     很高兴您现在清楚了。 只想对16位模式配置进行评论。 对于16位模式、您需要使用 TIMER_A 进行如下配置、以进行周期性递增计数。  

    TimerConfigure (Timer1_base、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PERIODICY_UP);