Part Number: TMS320F28388D
Tool/software:
Hello Vivek Singh Hareesh JanakiramanBaskaran Chidambaram Veena Kamath and Team,
We are using TMS320F28388D microcontroller. We have below queries on watchdog feature on CM core.
-
For watchdog, the internal oscillator frequency (INTOSC1) as a clock source is used and its value is 10 MHz. We have calculated the Watchdog Countdown Time (ms) from the predivider (WDCLK = PREDIVCLK / XX) and prescaler (PREDIVCLK = INTOSC1 / YY) configurations.
-
If the derived value of the Watchdog Countdown Time is 0.2048 ms and the window value is set to 10 (to be used in SysCtl_setWatchdogWindowValue(10)), then the total duration of the watchdog window would be 0.2048 ms * 10 = 2.048 ms. correct us if our understanding is wrong.
-
What are the units of the parameter passed to SysCtl_setNMIWatchdogPeriod(NMI_WATCHDOG_PERIOD), or is it just a numerical counter value? If it is only a counter value, then if we pass NMI_WATCHDOG_PERIOD = 10, will the set NMI Watchdog Period be calculated as 0.2048 ms * 10 = 2.048 ms?
-
When NMI is enabled on the CM core and not handled (by not calling SysCtl_clearWatchdogStatus() and SysCtl_clearAllNMIFlags()), after the NMI_WATCHDOG_PERIOD expires, the watchdog overflow will trigger an NMI, which will eventually reset CM core.
-
After the CM core resets due to a watchdog overflow, does CPU1 need to explicitly call the Device_bootCM() function to bring the CM core out of reset and if so, can this be achieved by triggering an NMI on CPU1 from the CM core reset, which is then handled by calling Device_bootCM() within the NMI handler (Refer below code) or is there an alternative approach available?
-
// 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); }
Could you please assist us in answering the above queries?
Thanks & Regards,
Vikram Tathe


