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.

[参考译文] TM4C129XKCZAD:使用中断的糟糕闪存编程性能-闪存计时

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/571460/tm4c129xkczad-poor-flash-programming-performance-with-interrupts---flash-clocking

器件型号:TM4C129XKCZAD

我使用闪存镜像模式进行故障恢复。  我已经编写了一个基于中断的例程来更新后台的镜像区域、 并且基于中断的代码比基于非中断的代码慢得多。

非 IRQ 代码(Tivaware 例程):~8s。  中断代码:~200s  

闪存更新路由是连接到闪存中断的状态机。   它执行一个擦除、缓冲写入周期。   运行时、CPU 利用率约为2%。

如果我从空闲循环中移除 WFI、我将获得良好的性能。   在睡眠期间、闪存控制器的计时正在进行一些操作。

我看不到任何位来控制它。  有人在听吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    一个简短的后续行动。 我已经将 SCGCEEPROM 位置位、以便在睡眠期间为 EEPROM 计时、但我找不到任何与闪存控制器类似的位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Robert

    微控制器的睡眠模式参数配置是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯。 有很多! 您能更具体吗?

    我想这些是您想了解的内容。

    SYSCTRL、偏移量0xD10 = 0 (无深度睡眠)
    RSCLKCFG、偏移量0x0B0 = 0x3300 0001

    也许我可以通过在闪存编程期间关闭自动时钟门控来解决这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    固定的。 我关闭了 RSCLKCFG 中的 ACG 位。

    这个听起来像是一个勘误表-某种时钟正在被选通、但它没有控制位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯、它的 sorta 工作正常-

    我使用 SysCtlPeripheralClockGating (false)禁用 ACG、并使用 SysCtlPeripheralClockGating (true)将其重新打开。

    重新启用似乎不起作用。 我有一个时钟门控计时器、用于测量活动。 此后、使用情况永远不会下降。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Robert

    当使用自动时钟门控时、请确保要求激活的外设(例如定时器)的 SCGC 位被设定为1。 在睡眠模式中、闪存处于激活状态。 但是、闪存可能会受到 FLASHPM 的 SLPPWRCFG 寄存器设置的影响。 相同的设置是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好、 感谢您的提示。

    我在睡眠期间启用了许多外设。  可能超出我的要求、尤其是 GPIO。  

    我不知道 SLPPWRCFG 寄存器。  我不使用它。  在我的板上、它的默认值为零。

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

    当 SLPPWRCFG 寄存器设置为0时、闪存应保持活动状态。 我唯一能想到的是在闪存操作完成后以及在中断被置为有效之前闪存控制器可能被选通的时钟。 根据数据表"进入睡眠或深度睡眠之前完成所有闪存操作"。 因此、如果 CPU 启动闪存操作并进入 WFI 仅由中断唤醒、那么它可能不是来自闪存控制器的中断、而是器件上的其他一些中断源。