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.

[参考译文] TMS570LS1114:诊断库提供的 VIM 模块的奇偶校验诊断在外部被中断、从而导致诊断失败

Guru**** 2393835 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1102732/tms570ls1114-the-parity-diagnosis-of-the-vim-module-provided-by-the-diagnostic-library-is-interrupted-externally-causing-the-diagnosis-failure

器件型号:TMS570LS1114

大家好、我正在调用诊断库 sl_SelfTest_VIM ()提供的接口、其中输入参数设置位 VIM_SRAM_奇 偶校验_TEST。 在诊断过程中、如果发生中断、诊断将失败。 它已经过验证、当 VIM 奇偶校验被中断时、在中断后、程序将进入 VIM_FBPARERR 奇偶校验中断、清除并设置一些标志位、从而导致标志位检查、错误的正常代码、我想问原因是什么、 为什么输入 VIM_FBIERR 中断、VIM 检查诊断过程不能被中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Xiaohong、

    奇偶校验测试将奇偶校验错误注入 VIM 通道1 (0xFFF82008)。 VIM 通道1被保留、并且在测试中 VIM 奇偶校验错误中断(ESM 中断)也被禁用。 VIM RAM 奇偶校验测试不应影响其它外部中断。

    您能否共享代码、以便我可以在电路板上进行检查?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的项目可能很难在您的开发板上进行验证。 我修改了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");

    e2e.ti.com/.../7571.sys_5F00_main.c

    e2e.ti.com/.../4744.sys_5F00_selftest.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HI,QJ,可以删除蓝色部分中的代码、也就是说、中断中断中断的位置是不确定的、当我调用 SL_SelfTest_VIM ()诊断库时、它的接口

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    添加了蓝色部分、以确保 VIM 奇偶校验测试被 RTI 比较中断中断中断中断中断。

    如果删除了蓝色部分、我不确定测试是否中断。

    我的测试中的 vimparityCheck ()类似于 sl_Selftest_VIM()。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Xiaohong、

    我提出了这个问题。 如果  启用 INT、我将研究 VIM 奇偶校验是如何失败的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢、期待您的回答、谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、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 为原始值  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然感到困惑、为什么中断时会出现不成功的反向现象、程序为什么会进入 VIM_FBIERR 中断?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于我们的外部中断无法关闭、但我们需要及时响应、因此我尝试使用您提供的第二种方法进行验证、但仍然发生 VIM 奇偶校验错误、这无法解决当前问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的实验表明、中断会影响 VIM RAM 自检、因此需要在执行自检之前禁用中断。