ARM Errata 838869是否适用于Cortex-M7?矛盾资料求证
Cortex-M7是否受ARM勘误838869影响?NXP SDK中DSB屏障的作用是什么?
背景矛盾信息
用户整理了三处相互矛盾的信息:
- ARM官方Cortex-M7勘误文档SDEN-1068427(v11.0)未列出勘误ID 838869。
- ST的STM32H7勘误表(ES0445 Rev 5)将838869归类为仅影响Cortex-M4。
- NXP MCUXpresso SDK中存在如下代码定义:
/*! @name ISR exit barrier * @{ * * ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping * exception return operation might vector to incorrect interrupt. * For Cortex-M7, if core speed much faster than peripheral register write speed, * the peripheral interrupt flags may be still set after exiting ISR, this results to * the same error similar with errata 83869. */ #if (defined __CORTEX_M) && ((__CORTEX_M == 4U) || (__CORTEX_M == 7U)) #define SDK_ISR_EXIT_BARRIER __DSB() #else #define SDK_ISR_EXIT_BARRIER #endif
解答
1. 官方勘误对Cortex-M7与838869的界定
目前没有ARM或主流芯片厂商的官方勘误确认Cortex-M7受838869影响:
- ARM官方的Cortex-M7勘误文档完全未提及该ID,说明838869是Cortex-M4专属的硬件设计缺陷,与M7核心无关。
- ST作为主流MCU厂商,其STM32H7(搭载Cortex-M7)的勘误表明确标注838869仅影响Cortex-M4,进一步验证了这一点。
2. NXP SDK中DSB屏障的作用
NXP在SDK中为Cortex-M7加入__DSB()是应对外设写入延迟的预防性措施,而非修复838869勘误:
- 从代码注释可知,Cortex-M7的问题根源是核心运行速度远快于外设寄存器的写入速度:当ISR中清除外设中断标志后,核心可能在寄存器写入操作完成前就执行中断返回,此时外设中断标志仍处于置位状态,会引发类似838869的错误(错误触发下一次中断)。
__DSB()(数据同步屏障)指令的作用是确保所有未完成的内存访问操作(包括外设寄存器写入)完成后,再执行后续的中断返回操作,从而避免这种时序问题导致的异常。
内容的提问来源于stack exchange,提问作者mastupristi
相关产品推荐
相关产品推荐

