Tool/software:
Hello all,
In the application I am developing I have encountered extremely rare situations where the C28x CPU1 processor appears to be getting hung up and I suspect that it is getting caught up in an ISR.
I have the Watchdog timer configured as follows:
void InitWatchdog(void)
{
//--- Configure Watchdog
SysCtl_setWatchdogPredivider(SYSCTL_WD_PREDIV_512); // WDPRECLKDIV = INTOSC1/512
SysCtl_setWatchdogPrescaler(SYSCTL_WD_PRESCALE_2); // WDCLK=OSCCLK/512/2
SysCtl_setWatchdogWindowValue(0); // Minimum window threshold value (disabled)
//--- Set Watchdog Mode (Reset / Interrupt)
SysCtl_setWatchdogMode(SYSCTL_WD_MODE_INTERRUPT); // watchdog generates an interrupt
//--- Enable / Disable Watchdog
SysCtl_enableWatchdog(); // Enable watchdog
SysCtl_serviceWatchdog();
//--- Enable Watchdog interrupt
Interrupt_register(INT_WAKE, &wakeISR); // Re-map watchdog wake interrupt signal to call the ISR function
Interrupt_enable(INT_WAKE); // Enable WAKEINT in PIE group 1 and enable INT1 in IER to enable PIE group 1
} // end of InitWatchdog()
Ideally I want the wakeISR() to fire and reboot the module as I have it configured but it is not occurring, presumably because PIE interrupts do not have the ability to execute while another one is running. Instead they are queued up according to priority.
Is there a way to configure the Watchdog timer to fire a non-maskable interrupt when it expires so that it will be able to interrupt any other ISRs or will I have to enable nesting and nest the wakeISR inside of all other interrupts?
Best regards,
-Jakub