Thread 中讨论的其他器件:CCStudio
您好!
我一直在尝试通过电子邮件23.5提出这一问题、没有答案...
现在、由于发现并修复了一些其他错误(DMA 测试)、我终于能够运行2.3.1 SafeTI IAR RM48演示应用程序来尝试在那里重现问题。
根据此帖子、此测试中不应再出现任何问题
https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/497516/1800406#1800406
我不同意、是的、可以实现永远的循环 doe 不再存在、但测试会向应用发出实际组3错误信号。
在调用该测试后、代码首先进入 FIQ 处理程序(预计会出现)、然后进入 DATA_ABORT 处理程序。 在数据中止中、代码进入此分支、该分支不会屏蔽错误(猜可能清除诊断模式会阻止 for 永远循环)
/*由于闪存包装程序测试2位 ECC 故障注入而导致的 DAbort? *
否则、如果(0!=(sl_flashWREG->FDIAGCTRL & 0x7)){
maskDAbort = false;
/*尽管没有必要,但关闭诊断模式*/
sl_flashWREG->FDIAGCTRL &= 0xFFF0FFF8;//清除诊断使能键*/
callbkParam1 = sl_flashWREG->FUNCHERRADD;
callbkParam2 = sl_flashWREG->FEDACCSTATUS;
ESM_ApplicationCallback (((uint32)(ESM_Grp3_MASK | ESM_G3ERR_FMC_Uncorr)、callbkParam1、callbkParam2、callbkParam3);
}
由于数据中止调用不是通过标志屏蔽的(演示应用端(ESM 回调)"愚蠢地"清除了组3 ESM 位、甚至向其发出了棘手的实际错误信号)、这种"看起来在演示应用中工作"甚至很难实际不工作。 如果您向数据中止处理程序中添加了一个小错误处理(while (1)-loop、用于非屏蔽中止的代码将在那里并保留在那里。
if (false =maskDAbort){
/*提取错误地址并向应用程序报告*/
//while (1)
//{
//};
}
需要有关如何屏蔽该错误的正确说明、还需要修复演示应用。 此外、我认为组3 ESM 错误应该被置于 SafeTI 代码(sl_selftest.c)内(在无法避免此数据中止的情况下)、就像针对每个其他组3错误那样、当前该测试只清除 sl_selftest.c 内的组2错误 当然、用于 SafeTI 测试的组3 ESM 通道的堆栈不能位于 ESM_Application_callback 内部、在这里会向实际错误发出信号。
此测试在不清除此诊断密钥的情况下运行(它会恢复 sl_selftest.c 中的设置)
sl_flashWREG->FDIAGCTRL &= 0xFFF0FFF8;//清除诊断使能键*/
数据中止处理程序中的代码注释也是指 ECC 2位故障注入测试、因此不应在任何其他测试中输入此分支?
如果在 SL_FLAG_GET 说明此测试处于活动状态并且启用了模式7的诊断(如果(7U =(SL_flashWREG->FDIAGCTRL & 0x7U)))中存在检查数据中止处理程序、则- -通过当前0中的方式,似乎有一个错误!= sl_flashWREG->FDIAGCTRL & 0x7U,如果选择了任何诊断模式,则会进入该分支...
当未启用 FIQ 时,此测试在我的实际应用程序中的 CPU 启动阶段有效,但由于我们捕获到每个非屏蔽错误,代码被停止:)。 因此、根本原因实际上必须是启用 FIQ、这会导致数据中止、而这不会在演示应用程序或 SafeTI 代码中进行处理 (SafeTI 代码应检查是否启用了 FIQ、还要求生成组3错误、并在将 ST_PASS 返回给调用方之前将其返回)。
在这里、我在运行期间运行该测试时的真实应用报告
==data_abort==
DFSR:0x1008
DFAR:0x20000000
状态:0x8
读:正确
AxiDec:错误
===========================