您好!
我使用的是 TMS570LS3137处理器。 我已启用闪存 ECC 保护、并执行以下操作:
- 启用闪存 ECC 错误检测(FEDACCTRL1.EDACEN = 0xA)
- 启用内核事件总线导出(调用 coreEnableEventBusExport 汇编函数)
- 启用闪存 ECC 检查(调用 coreEnableFlashEcc 汇编函数)。
在位于闪存开头的引导加载程序中、我需要读取闪存中写入应用程序的位置、以确定是否对应用程序进行了编程。 如果未对应用软件进行编程、当我读取未写入的闪存位置时、会发生 ECC 组3错误、但电路板上未连接 nERROR 引脚、因此 DSP 不会复位、并生成数据中止异常(0x10)。 我在数据中止异常上放置了一个中断函数、我想清除错误并继续执行。
当我第一次读取未编程的闪存地址时、会生成数据中止、并且该错误也会被检测为 ECC 错误。 寄存器 ESMSR3为0x80、因为发生了 FMC -不可纠正的错误;寄存器 FEDACSTATUS 为0x100、因为发生了总线1不可纠正的错误。 这很好。
然后、我通过执行以下操作来清除该错误:
- 通过写入 FEDACSTATUS = 0x00FFFFFF 来清除所有报告的闪存错误
- 通过写入 ESMSR3 = 0xFFFFFFFF 来清除所有组3 ESM 错误
- 通过写入 ESMEKR 位 eKEY = 5来禁用 ERROR 引脚
然后、我从中止异常返回、代码恢复正常执行。
我的问题是、当我再次读取未编程的闪存地址时、会生成数据中止异常、但这次 ECC 机制似乎未检测到错误、因为 ESMSR3为0、 FEDACSTATUS 也为0。
我是否还需要清除/复位其他内容以允许 ECC 机制检测另一个错误?
谢谢、
Martin