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.

[参考译文] TMS320F28377D:ECC 测试 NMI 会在 NMI 看门狗计数器到期之前触发处理器复位

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/857632/tms320f28377d-ecc-test-nmi-triggers-processor-reset-before-the-nmi-watchdog-counter-expires

器件型号:TMS320F28377D

您好!

我尝试测试 ECC 逻辑、代码如下所示:

/*数据中的双位错误*/

 FECC_CTRL.bit.ECC_TEST_EN = 0;

FADDR_TEST.ALL =

FDATAH_TEST =

FDATAL_TEST =

Fecc_test.all = ;

FECC_CTRL.bit.ECC_SELECT = 0;

FECC_CTRL.bit.ECC_TEST_EN = 1;

FECC_CTRL.bit.do_ECC_CALC = 1;

 NMIFLGCLR.ALL = 0x0E7F;//清除 NMI 标志*/

 if (fecc_status.bit.UNC_ERR!= 1)

/* ECC 逻辑不起作用,错误*/

上述代码在不生成处理器复位的情况下工作正常。 但是、如果我在 IF 条件之后移动指令"NMIFLGCLR.ALL = 0x0E7F;"、处理器将持续复位。

我想首先检查"NMIINT"标志是否已设置、然后我要清除该标志、而不仅仅是清除该标志。 但是、一旦我在"Do_ECC_CALC = 1"之后执行任何小操作(即使是简单的分配)、处理器就会被复位。

当我在复位时检查 NMIWDCNT 时、它仅为"0xAA"或0xAB"、甚至不接近 设置为0xFFFF 的 NMIWDPRD、

我能够测试数据和 ECC 中的单个位错误、而不会出现任何问题。 唯一的问题是不可纠正的错误(数据/ECC 中的双位错误或地址中的单位错误)。

我使用的是 CCS8.1.0.00011。

谢谢你。

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

    Gobind、

    您是从 RAM 还是闪存执行此代码? 请确认。

    谢谢、此致、
    Vamsi

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

    您好、Vamsi、

    我们正在从 RAM 执行该代码。

    谢谢你。

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

    Gobind、

    我请我们的系统控制专家在这方面提供进一步的帮助。

    谢谢、此致、

    Vamsi

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

    Gobind、

    您是否在应用中定义了 NMI ISR?  如果是、NMI 中断应将您的应用程序转至指示 NMIINT 的 ISR。  您可以清除 ISR 中的标志。  

    在您最初的问题上、我请我们的系统控制专家为您提供帮助。

    谢谢、此致、
    Vamsi

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

    您好!

    [引用]当我在复位时检查 NMIWDCNT 时、它仅为"0xAA"或0xAB"、甚至不接近 设置为0xFFFF 的 NMIWDPRD、[/引用]

    这不应该发生。   复位时如何读取 NMIWDCNT?

    另外、正确的方法是使用正确的 NMI 处理程序、并且在处理程序中、应清除该标志。 NMI 处理程序中有什么代码?

    此致、

    Vivek Singh

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

    当我自由运行时、它在接收到 NMI 并查看"Registers"窗口以查看计数器的值后复位并暂停。

    没有写入 NMI 处理程序。 我想确保我在技术参考手册中提到的正确时间获得中断。

    谢谢你。

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

    Gobind、

    NMI 没有问题。 复位后、计数器将被清除、如果有另一个 NMI、则重新启动。 您是手动停止 CPU 还是有断点? 最好写入 NMI 处理程序、然后检查处理程序内的计数器值。

    此致、

    Vivek Singh  

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

    我不是手动停止 CPU。 它接收 NMI 并自动停止。  

    我可以尝试使用 NMI 处理程序、但我想知道以下代码1)的工作原理和2)的工作原理。 在2)中、在我清除 NMI 标志之前只有一个 IF 条件、我确信 NMI 看门狗计数器不会仅通过执行一条 if 语句而过期。

    1)

    FECC_CTRL.bit.do_ECC_CALC = 1;

     NMIFLGCLR.ALL = 0x0E7F;//清除 NMI 标志*/

     if (fecc_status.bit.UNC_ERR != 1)

    /* ECC 逻辑不起作用,错误*/

    2)

    FECC_CTRL.bit.do_ECC_CALC = 1;

    if (fecc_status.bit.UNC_ERR != 1)

    /* ECC 逻辑不起作用,错误*/

    NMIFLGCLR.ALL = 0x0E7F;//清除 NMI 标志*/

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

    很抱歉耽误你的回答。

    在情况1中、NMI 标志 可能在 NMI 生成之前被清除、因此您不会看到问题。 在这种情况下、即使只有一条指令也会起作用。 您需要按照正确的步骤来处理 NMI。

    此致、

    Vivek Singh

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

    没错。 但问题是、从0xFFFF 开始的整个 NMI WD 计数器如何只在一条指令中过期?

    计数器从以下位置开始:

    FECC_CTRL.bit.do_ECC_CALC = 1;

    我在执行单个 IF 条件后清除该标志。  

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

    它不会在一条指令中过期。 如果被清零、一条指令可能导致 NMI 根本不触发、因此您不会看到复位。 如多次所述、请具有 NMI 处理程序、并且 MAP 正确。

    此致、

    Vivek Singh

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

    嗯、我想我明白了您现在所说的话。 我将使用 NMI 处理程序进行检查、并在正常情况下进行更新。

    非常感谢。