17.1.2 Interrupts During Doze
System behavior for interrupts that may occur during Doze mode are
configured using the ROI and DOE bits. Refer to the example below for details about system behavior in
all cases for a transition from Main to ISR back to Main.
Doze Software Example
// Mainline operation bool somethingToDo = FALSE; void main() { initializeSystem(); // DOZE = 64:1 (for example) // ROI = 1; GIE = 1; // enable interrupts while (1) { // If ADC completed, process data if (somethingToDo) { doSomething(); DOZEN = 1; // resume low-power } } } // Data interrupt handler void interrupt() { // DOZEN = 0 because ROI = 1 if (ADIF) { somethingToDo = TRUE; DOE = 0; // make main() go fast ADIF = 0; } // else check other interrupts... if (TMR0IF) { timerTick++; DOE = 1; // make main() go slow TMR0IF = 0; } }
Note: User software can change the DOE
bit in the ISR.