主题中讨论的其他器件:HALCOGEN、 TMS570LC4357
大家好、
首先、如果这最终出现在错误的论坛中、我们深表歉意。 我导航到 Hercules 论坛并尝试创建新主题、但使用我正在使用的实际器件型号时、我的帖子似乎 会分配 给"其他微控制器论坛"。
问题1:
在任何情况下、我都会遇到将可纠正(即单个位)错误注入 VIM RAM 地址空间内的某个字的故障注入的问题。 我在 Halcogen 中生成了一个项目、在这里我启用 ESM 组1第83行(正如我理解的那样、这是可纠正的 VIM RAM ECC 错误。) 我还验证了 VIM RAM ECC 在 VIM 配置下被启用。 我将 ESM 组1第83行错误设置为使一个 ESM 低级 IRQ (即非 FIQ)事件有效、然后在 hl_notification.c 中由 Halcogen 提供的 esmGroup1Notification 回调中输出一些调试信息
为了触发 ECC 错误、我遵循了 TMS570LC4357 TRM VIM 一章中规定的程序:
-我确保 ECCENA 被置位并且 VIM RAM 已经被初始化。 (这已经由我从 main()调用的 vimInit()处理)
-然后、我通过将 0x5 << 8写入 ECCCTL 来启用 ECC 位映射(更具体地说、我将绝对掩码写入:0xA << 0 | 0x5 << 8 | 0xA << 16 | 0xA << 24写入 ECCCTL)
之后,我尝试读取 VIM ECC 地址空间内的一个字(我映射了一个包含 u32条目数组的易失性结构),翻转6个 LSB 中的一个,并将该字写回... 或-执行相同的操作、但要执行 VIM RAM 本身内的向量条目。
在上述两种情况下、我都获得了一个到 esmGroup1通知的 IRQ 和向量(来自 HL_ESM.c 内的 esmLowInterrupt)。 当我打印出通道参数时、我可以看到它是正确的(当我重新添加 ISR 关闭的偏移时、我看到它是 ESM 通道83的通知)。 但是、似乎 ISR 一直被反复调用、我无法从中断上下文中退出。 这是尽管查看了 TI 的 ISR 代码、但根据 TRM、ISR 通过向 SR4写入1<<19来清除错误标志是很明显的。
出于完整性考虑、我使用的是 Halcogen 04.07.01、主要针对 GCC 工具。 我使用的是基于标准上游交叉存根项目构建的 GCC 10.2、具有必要的大端字节序多库支持。
Halcogen 项目是以 TMS570LC43x 为目标的标准项目、启用 LIN1高电平、RTI 比较0和 ESM 低电平 IRQ。
谢谢!
-AG
