何时实现对设备的 Cortex 写入

When is a Cortex write to a device realised

当写入 Cortex M0 上的设备寄存器(在我的例子中,是在 STM32L073 上)时,会出现一个问题,即在 a) 对设备内存的访问顺序和 b) 决定更改外设配置实际上已经完成到任何依赖项都有效的程度。

举个具体的例子,把内部稳压器改成不同的电压。您将更改写入 PWR->CR,并从 PWR->CSR 读取状态。我看到代码是这样的:

Write to PWR->CR to set the voltage range
Spin until (PWR->CSR & voltage flag) becomes zero

我认为这里有三个问题:

  1. 访问排序。这是设备内存,因此相对于其他设备访问事务保留事务顺序。我认为这意味着在写入 CR 和从 CSR 读取之间不需要 DSB。一个链接的问题和答案是:[ARM CortexA]Difference between Strongly-ordered and Device Memory Type

  2. 设备内存可以缓冲。当从 CSR 读取时,是否有可能仍在处理对 CR 的写入。这意味着电压标志将被清除并且代码将继续。其实旗子还没升起来呢!

  3. 硬件响应时间。写入和最终效果之间是否存在延迟?实际上,这应该始终记录在案 - 对于 STM32,文档明确表示当 CR 寄存器更改时会设置标志。

这里是否存在竞争条件的可能性?真正让我担心的是缓冲——当发生外设读取时,外设写入仍在进行中。

Access ordering.

访问是严格有序的,你不需要屏障指令来回读同一个寄存器。

Device memory can be buffered. Is there a possibility that a write to CR

是的,这是可能的。但这不是因为缓冲,而是因为总线传播时间。在特定操作通过所有桥接之前可能需要几个时钟。

Hardware response time. Is there a latency between the write and the effects becoming final

即使有延迟,从您的角度来看也不重要。如果您在 CR 寄存器中设置位并在状态寄存器中等待结果。只需等待状态位具有预期值即可。