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.

[参考译文] MSP430FR4133:确保 FRAM 已被访问的最快方法是什么?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1183651/msp430fr4133-what-is-the-fastest-way-to-guarantee-fram-has-been-accessed

器件型号:MSP430FR4133

大家好、TI 论坛、

我正在读取 MSP430FR4133的勘误表、我遇到了勘误表编号 GC5。 建议的解决方法之一是:

在 LPM 唤醒后、清除 GCCTL1.UBDIFG 和 GCCTL1.CBDIFG、然后在第一次有效 FRAM 访问完成后重新初始化 GCCTL0寄存器。 对于有效的 FRAM 访问、用户必须 考虑可能的高速缓存命中次数、这取决于实现情况。

我计划实施此变通办法、但我对如何保证我将访问 FRAM 而不是高速缓存感到困惑。 由于高速缓存为16字节、如果读取17字节、我能保证 FRAM 访问吗? 这是实现这一目标的最快/最有效的方法吗?

此外、微控制器如何确定要存储在缓存中的信息? 最后、如果缓存从 FRAM 加载新数据、根据变通办法、这是否算作"有效 FRAM 访问"? 或者、如果微控制器内核进行访问、它是否仅是有效的 FRAM 访问?

谢谢!

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

    您的代码驻留在 FRAM 中、因此很可能自行完成所有任务。 由于 ISR 中的位置将由运行的非 ISR 代码从缓存中弹出、因此您将自动获得 FRAM 访问权限。

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

    尊敬的 David:

    谢谢您的回复! 我以前没有真正处理过高速缓存系统、所以这对我来说还是有点困惑。 当 MCU 从中断中唤醒后、您如何知道高速缓存将满 ISR 位置? 我找不到任何地方谈论高速缓存如何决定存储什么、那么您认为这是什么?

    其次、变通办法的措辞建议我不想在唤醒后立即重新初始化 GCCTL0寄存器、因为可能尚未访问 FRAM。 我确信、一旦运行了数十行代码、我可以安全地假设到那时已经访问了 FRAM、但是否有更精确的方法来确定何时进行访问?

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

    高速缓存通过在高速缓存未命中时读取4个字来加快 FRAM 访问速度。 在顺序代码中、这意味着4次读取中的3次将来自高速缓存。 设备之间的缓存行有所不同(或至少文档中的说明有所不同)、但似乎该设备具有四条64位缓存行。 缓存缺失将导致 FRAM 读取64位、从而替换其中一条线的内容。

    正常代码执行将从 ISR 中以外的位置加载高速缓存。 因此、当中断被处理时、除了异常情况外、ISR 中的首次代码提取将导致缓存缺失和 FRAM 读取。 异常情况是、自上次运行 ISR 以来、执行 ISR 外部极少的代码。 和一个非常小的 ISR。

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

    尊敬的 David:

    感谢您简要介绍高速缓存、这非常有意义! 听起来、只要在 ISR 之间运行足够的代码、我可以很安全地假设 ISR 的处理将导致有效的 FRAM 访问、之后我可以安全地重新初始化  GCCTL0寄存器。

    感谢您的帮助!