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.

[参考译文] TMS320F28388D:CM 内核上具有看门狗功能

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1431240/tms320f28388d-watchdog-feature-on-cm-core

器件型号:TMS320F28388D

工具与软件:

尊敬的    :

我们使用的是 TMS320F28388D 微控制器。 下面有一些关于 CM 内核上的看门狗功能的疑问。  

  1. 对于看门狗、使用内部振荡器频率(INTOSC1)作为时钟源、其值为10 MHz。 我们 根据预分频器(WDCLK = PREDIVCLK/XX)和预分频器(PREDIVCLK = INTOSC1/YY)配置计算了看门狗倒计数时间(ms)。

  2. 如果看门狗倒计时时间的推导值为0.2048ms 并且窗口值设置为10 (用于 SysCtl_setWatchdogWindowValue (10))、则看门狗窗口的总持续时间将为0.2048ms * 10 = 2.048ms。 如果我们的理解有误、请纠正我们。

  3. 传递给 SysCtl_setNMIWatchdogPeriod (NMI_WATCHDOG_PERIOD)的参数单位是多少、还是只是一个数字计数器值? 如果它只是一个计数器值、那么如果我们通过了 NMI_WATCHDOG_PERIOD = 10、设置的 NMI 看门狗周期是否会计算为0.2048ms * 10 = 2.048ms?

  4. 当在 CM 内核上启用 NMI 但未进行处理(通过不调用 SYSCTL_clearWatchdogStatus ()和 SYSCTL_clearAllNMIRQs ()))时、在 NMI_WATCHDOG_PERIOD 到期后、看门狗溢出将触发 NMI、该 NMI 最终将复位 CM 内核。

  5. CM 内核因看门狗溢出复位后、CPU1是否需要显式调用 Device_bootCM ()函数来使 CM 内核脱离复位状态、如果是、是否可以通过 CM 内核复位在 CPU1上触发 NMI 来实现 NMI、然后通过在 NMI 处理程序中调用 Device_bootCM ()来处理 NMI (请参阅以下代码)、或者是否有其他方法可用?

  6. // CPU1 Code
    
    int main(void) {    
        SysCtl_enableNMIGlobalInterrupt();
        Interrupt_register(INT_NMI, nmiISR);
        SysCtl_enableCMtoCPUNMI(SYSCTL_CMTOCPU1INTCTL_CMNMIWDRST);
        Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
    } 
    __interrupt void nmiISR(void)
    {
        if (SYSCTL_STATUS_CMNMIWDRST == SysCtl_getCMInterruptStatus()){
            Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
            SysCtl_clearCMInterruptStatus(SYSCTL_STATUS_CMNMIWDRST)
        }
        // Clear NMI flags
        intStatus = SysCtl_getNMIFlagStatus();
        SysCtl_clearNMIStatus(intStatus);
    }

您可以协助我们回答上述问题吗?


谢谢、此致、

Vikram Tathe.

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

    尊敬的 Vikram:

    CM WD 由 CMCLK 计时

    C28x WD 以 INTOSC1为时钟源。

    是、当 NMIWD 超时将触发对 CM 的复位时、因此 C28 CPU1需要使 CM 退出复位。

    [报价 userid="605914" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1431240/tms320f28388d-watchdog-feature-on-cm-core "]传递给 SysCtl_setNMIWatchdogPeriod[/报价]的参数单位

    其计数器值每个周期以 WDCLK 速率递减。

    谢谢

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

    你好

    我在 CPU1上运行 LED1闪烁代码、在 CM 内核上运行 LED2闪烁代码。 我已在 CM 内核上实现了看门狗功能。

    有意地说、我不会在 CM 内核上处理不可屏蔽中断(NMI)、也不会重新加载看门狗值、从而导致 CM 内核复位以及在 CPU1内核上生成 NMI。

    到目前为止、我可以调试看门狗功能。

    但是、在 CPU1上执行 NMI 后、CM 内核不会脱离复位 LED2的状态、且不会闪烁。 这似乎是由于复位而终止了调试会话。 如何进行调试以确定 CM 内核是否脱离复位状态?

    CPU1代码如下所示。

    // CPU1 Code
    
    int main(void) {  
        ...
        SysCtl_enableNMIGlobalInterrupt();
        Interrupt_register(INT_NMI, nmiISR);
        SysCtl_enableCMtoCPUNMI(SYSCTL_CMTOCPU1INTCTL_CMNMIWDRST);
        Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
        ...
    } 
    __interrupt void nmiISR(void)
    {
        if (SYSCTL_STATUS_CMNMIWDRST == SysCtl_getCMInterruptStatus()){
            Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
            SysCtl_clearCMInterruptStatus(SYSCTL_STATUS_CMNMIWDRST)
        }
        // Clear NMI flags
        intStatus = SysCtl_getNMIFlagStatus();
        SysCtl_clearNMIStatus(intStatus);
    }

    谢谢、此致、

    Vikram Tathe.

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

    你好     

    您可以就上述问题提供帮助吗?

    谢谢、此致、

    Vikram Tathe.

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

    你好     

    您可以就上述问题提供帮助吗?

    谢谢、此致、

    Vikram Tathe.

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

    你好     

    您可以就上述问题提供帮助吗?

    谢谢、此致、

    Vikram  

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

    尊敬的 Vikram:

    在 CPU1 NMI ISR 中、CM 引导至闪存是否成功完成?

    DEVICE_BOOTCM (BOOTMODE_BOOT_TO_FLASH_SECTOR0);

    上述函数是否成功执行并完成?

    还要检查下面的寄存器、以查看 CM 是处于复位状态还是未复位状态。

    谢谢。