大家好、我正在调用诊断库 sl_SelfTest_VIM ()提供的接口、其中输入参数设置位 VIM_SRAM_奇 偶校验_TEST。 在诊断过程中、如果发生中断、诊断将失败。 它已经过验证、当 VIM 奇偶校验被中断时、在中断后、程序将进入 VIM_FBPARERR 奇偶校验中断、清除并设置一些标志位、从而导致标志位检查、错误的正常代码、我想问原因是什么、 为什么输入 VIM_FBIERR 中断、VIM 检查诊断过程不能被中断?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、我正在调用诊断库 sl_SelfTest_VIM ()提供的接口、其中输入参数设置位 VIM_SRAM_奇 偶校验_TEST。 在诊断过程中、如果发生中断、诊断将失败。 它已经过验证、当 VIM 奇偶校验被中断时、在中断后、程序将进入 VIM_FBPARERR 奇偶校验中断、清除并设置一些标志位、从而导致标志位检查、错误的正常代码、我想问原因是什么、 为什么输入 VIM_FBIERR 中断、VIM 检查诊断过程不能被中断?
我们的项目可能很难在您的开发板上进行验证。 我修改了3137开发板上的例程。 初始化完成后、VIM 奇偶校验被循环诊断、然后将在1S 中生成 RTI 中断。 几秒钟后、将出现 VIM 奇偶校验诊断失败、我添加了串行端口打印信息以供观察。该论坛似乎无法上传压缩文件、某些代码显示在:下面
while 循环调用以下代码、并且仅调用这段代码、因此发生的概率将更高:
/*boot time software test of VIM SRAM Parity test*/ retVal = SL_SelfTest_VIM(VIM_SRAM_PARITY_TEST); if(TRUE==retVal) { s_stMCUDiagRslt.stMCUDiagPwRslt.usVimFuncTestRslt &= ~VIM_TEST_RAMPARITY; } else { s_stMCUDiagRslt.stMCUDiagPwRslt.usVimFuncTestRslt |= VIM_TEST_RAMPARITY; PrintfUart("VIM err \n"); }
设置 RTI 的中断、每1秒生成一次中断、重复此:
#pragma WEAK(rtiNotification) void rtiNotification(uint32 notification) { /* enter user code between the USER CODE BEGIN and USER CODE END. */ /* USER CODE BEGIN (9) */ if (rtiNOTIFICATION_COMPARE0 == notification) {/* 1m中断 */ TimerCount0INT(); PrintfUart("Timer int \n"); } if(rtiNOTIFICATION_COMPARE1 == notification) { TimerIobusINT(); } /* USER CODE END */ }
我的测试结果如下:
大家好、由于 E2E 未能发送完整的项目文件、请通过电子邮件发送、请进行检查、谢谢
您好、Xiaohong、
我在 LS1224 launchpad 上运行测试、但无法产生以下问题:
1.我的 sys_main()文件:
RTI 每1000ms 比较一次中断
在 main()中反复调用 vimParityCheck()
while (1){
vimParityCheck();
}
2.在 vimParityCheck()中:
等待 RTI 比较中断:
/*翻转 VIM RAM 奇偶校验位置中的一个位*/
VIMRAMPARLOC ^= 0x1U;
while (RTI_INT =0){
asm (" nop");
}
/*禁用奇偶校验测试模式*/
VIM_PARCTL = 0x0000000AU;
/*导致奇偶校验错误*/
vimramread = VIMRAMLOC;
RTI_INT ==0;
while (RTI_INT =0){
asm (" nop");
}
您好、Xiaohong、
我注意到、如果中断被启用、一段时间奇偶校验位不会翻转。 如果我禁用中断、VIM 奇偶校验自检工作正常:
rtiDisableNotification (rtiNOTIFICATION_COMPARE0);
/*启用奇偶校验和奇偶校验测试模式*/
VIM_PARCTL = 0x0000010AU;
/*翻转 VIM RAM 奇偶校验位置中的一个位*/
VIMRAMPARLOC ^= 0x1U;
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
另一种权变措施是读回奇偶校验位并确保其翻转:
/*启用奇偶校验和奇偶校验测试模式*/
VIM_PARCTL = 0x0000010AU;
/*翻转 VIM RAM 奇偶校验位置中的一个位*/
执行{
VIMRAMPARLOC ^= 0x1U;
}while (VIMRAMPARLOC!=(vimRAMPAR_bk ^ 0x1);
其中 vimRAMPAR_bk 为原始值