工具与软件:
尊敬的 Vivek Singh Hareesh JanakiramanBaskaran Chidambaram Veena Kamath :
我们使用的是 TMS320F28388D 微控制器。 下面有一些关于 CM 内核上的看门狗功能的疑问。
-
对于看门狗、使用内部振荡器频率(INTOSC1)作为时钟源、其值为10 MHz。 我们 根据预分频器(WDCLK = PREDIVCLK/XX)和预分频器(PREDIVCLK = INTOSC1/YY)配置计算了看门狗倒计数时间(ms)。
-
如果看门狗倒计时时间的推导值为0.2048ms 并且窗口值设置为10 (用于 SysCtl_setWatchdogWindowValue (10))、则看门狗窗口的总持续时间将为0.2048ms * 10 = 2.048ms。 如果我们的理解有误、请纠正我们。
-
传递给 SysCtl_setNMIWatchdogPeriod (NMI_WATCHDOG_PERIOD)的参数单位是多少、还是只是一个数字计数器值? 如果它只是一个计数器值、那么如果我们通过了 NMI_WATCHDOG_PERIOD = 10、设置的 NMI 看门狗周期是否会计算为0.2048ms * 10 = 2.048ms?
-
当在 CM 内核上启用 NMI 但未进行处理(通过不调用 SYSCTL_clearWatchdogStatus ()和 SYSCTL_clearAllNMIRQs ()))时、在 NMI_WATCHDOG_PERIOD 到期后、看门狗溢出将触发 NMI、该 NMI 最终将复位 CM 内核。
-
CM 内核因看门狗溢出复位后、CPU1是否需要显式调用 Device_bootCM ()函数来使 CM 内核脱离复位状态、如果是、是否可以通过 CM 内核复位在 CPU1上触发 NMI 来实现 NMI、然后通过在 NMI 处理程序中调用 Device_bootCM ()来处理 NMI (请参阅以下代码)、或者是否有其他方法可用?
-
// 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.