Estoy intentando poner en reposo un procesador m4 de cortezax (m3 con extensiones dsp) por poco menos de un segundo. Quiero poder decirle que se duerma, luego un segundo más tarde, o cuando se presiona un botón, retome justo donde lo dejé. He buscado en el manual de referencia y los modos VLPS o LLS parecen ajustarse a mis necesidades. Idealmente, me gustaría una función de retardo glorificado, para que se duerma por un segundo. No sé cómo comenzar a ingresar a ese modo o cómo programar el NVIC. Estoy usando C en metal desnudo.
Cualquier ayuda sería muy apreciada.
Aquí está el código:
#include "IntervalTimer.h"
//The following is where the SLEEPDEEP flag is at
#define SCR (*((volatile unsigned long *) 0xE000ED10))
volatile uint32_t timerCounter0;
boolean printNow = false;
void timerCallback0() {
timerCounter0++;
printNow = true;
}
void setup() {
SCR = SCR | 0x04; //Set SLEEPDEEP
Serial.begin(true);
IntervalTimer timer0;
timer0.begin(timerCallback0, 1000000);
}
void loop() {
if (printNow) {
Serial.println(timerCounter0);
printNow = false;
asm("wfi\n");
}
}