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.

[参考译文] TMS570LC4357:RTI 计时器寄存器溢出/翻转时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1382831/tms570lc4357-queiry-on-rti-timer-register-overflow-rollover

器件型号:TMS570LC4357

工具与软件:

您好!
对于 RTI、我们有以下实现来 读取计时器0:

 Timer_h = STATIC_SN74(RTI_BASE[FRC0]<Uint32>);
  Timer_l = static_SN74(RTI_BASE[UC0]<Uint32>);


但是、对于下面提到的情况、我们认为计时器读取的值可能不正确:

当 FRC0 = 0时、URC 0 = 0xFFFFFFFF

 Timer_h  =  STATIC_SN74(RTI_BASE[FRC0]<Uint32> );

//timer_h 为0

 TIMER_l = STATIC_CAST (RTI_BASE[UC0]);

//timer_l 将为0、因为 UC0将在前一个指令(回滚)之后增加其定时器计数、即0xFFFFFFFF +1 => 0。

而且 timer_h 将为0、但期望 timer_h 应为1。

 

是否有 解决方案来处理这种情况 ?

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

    尊敬的 Bharath:

    请参阅 TRM 中的以下突出显示行

     仅当 UC0值与 CPUC0匹配时、才会发生 FRC0递增。 并且验证下面给出的 FRCx 公式

    如果 CPUCx 值不为零、则 FRCx 在对 CPUCx+1 RTI 时钟进行计数后将递增、这意味着 UC0值应与 CPUCx 匹配、然后在下一个时钟脉冲(即 CPUCx+1)时、FRCx 值将递增1、ucx 值将为零。

    在本例中、我假设您保持 CPUCx 为零、在这种情况下、如公式 FRCx 将在计数2^32+1 RTI 时钟后递增。 因此、这意味着 ucx 将从零开始、并达到0xFFFFFFFF (即2^32 -1)、然后 在下一个 RTI 时钟时 、ucx 将变为零(即2^32)、这意味着我们的 ucx 现在与 CPUCx 匹配、但 FRCx 仍将为零、因为根据公式、FRCx 仅在计数 2^32+1 RTI 时钟后才会递增。 因此、在下一个 RTI 时钟时、FRCx 将递增1、并且 ucx 计数器值将变为零。

    我希望这可以澄清这种行为、现在如果您希望在 ucx 达到0xFFFFFFFF 后使 FRCx 递增、则应将 CPUCx 寄存器值保留为0xFFFFFFFF。 如果这样配置、那么在 ucx 与下一个 RTICLK 脉冲的0xFFFFFFFF 匹配后、ucx 将变为零、且 FRCx 将递增1。

    ——
    谢谢、此致、
    Jagadish。