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.

[参考译文] TM4C123GH6PM:休眠模块写入/读取时序

Guru**** 2611705 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/770755/tm4c123gh6pm-hibernate-module-write-read-timing

器件型号:TM4C123GH6PM

在 TM4C 数据表的第7.3.1节(寄存器访问时序)中、时序要求如下所述:

"...休眠寄存器只能写入两次访问之间的时间间隔... 软件必须保证在连续写入休眠寄存器或连续写入和读取之间插入该延迟。"

鉴于读取通常以全外设时钟速率执行(无需插入任何延迟)、我想知道 在写入一个寄存器后是否可以读取不同的休眠寄存器、而无需等待 WRC 或任何类似的延迟机制。 很明显、在不等待的情况下读回同一个寄存器将失败、但是否可以读取另一个寄存器? 下面是我尝试执行的操作(这是在 ISR 中):

/*读取屏蔽的中断状态。 //
ulStatus = HibernateIntStatus (TRUE);

HibernateIntClear (ulStatus)

//*获取当前匹配(触发此中断的时间)。 */
ulMatchS = HibernateRTCMatchGet (0); 

目前 、HibernateIntClear 调用在 WRC 位上等待忙后才返回、我已经测量到 ISR 中由于该调用而造成的显著时间损失。

我能否在不等待 WRC 的情况下从该匹配寄存器(或任何不是 HIB_IC 的休眠寄存器)读取数据? 如果可能的话、我想推迟检查 WRC、直到它绝对必要、我确实意识到这意味着从 driverlib 中冒险离开。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Matt、
    乍一看、我可能有与您无需等待即可阅读相同的理由、因为读取是在不同的寄存器上执行的。 但是不、我不建议绕过 WRC 轮询进行读操作。 如果在不等待 WRC 的情况下读取其他寄存器是安全的、则数据表会这样说。 这是第一个原因。 第二个原因是休眠运行在与 CPU 不同的时钟域(即32kHz)上(运行在80MHz 上)。 当信号跨越时钟域时、将执行同步。 当您写入寄存器时、内部总线正忙于尝试首先将来自 CPU 的数据同步到速度要慢得多的时钟域。 它不能同时执行读取。 如果您在写操作仍在进行时尝试读取、则读取值可能错误、或者只是垃圾、或者由于互锁机制而在内部等待。

    数据表再次显示、读取需要等待 WRC 以"安全"的方式启动。
    "软件可以利用休眠控制(HIBCTL)寄存器中的 WRC 位来确保这一点
    所需的时间间隔已过。 该位在写操作时清零、并在写操作后置位
    完成、向软件表明可以安全地开始另一个写入或读取。 软件应该
    在访问任何休眠寄存器之前、轮询 HIBCTL 以了解 WRC=1。"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查尔斯

    感谢您确认-非常感谢。