Durmiendo un ATtiny

3

He visto varios ejemplos de código de dormir un AVR donde hacen esto:

while (1) {
    // Business logic goes here

    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    sleep_cpu();
    sleep_disable();
}

Ahora, mi pregunta es, ¿por qué están configurando el modo de suspensión en el ciclo? ¿No puedes hacer esto una vez durante la configuración y terminar con esto? ¿O algo cambiaría el modo de suspensión durante el tiempo de ejecución? (¿Fantasma en la máquina?)

Nota: Sé que el sleep_cpu () debe estar en el lopp while. Me pregunto por qué o por qué no la línea

set_sleep_mode(SLEEP_MODE_PWR_DOWN);

tiene que estar dentro del bucle while.

    
pregunta David Högberg

1 respuesta

6

Esto es útil porque ilustra que puede seleccionar diferentes modos de suspensión según la lógica de control. Por ejemplo, es posible que esté tomando una lectura de ADC y, por lo tanto, desearía elegir un modo de suspensión que mantuviera el funcionamiento de ese periférico, pero desactivó otros, como la CPU, para reducir el ruido.

No es obligatorio, pero considero una buena práctica tener esa llamada justo antes de las instrucciones de suspensión para que pueda asegurarse de que está durmiendo en el estado correcto. Es posible suspender el origen de la interrupción de activación, lo que resulta en un estado comatoso.

enlace avr _sleep.html mostrará algunos buenas prácticas y ejemplos.

    
respondido por el HL-SDK

Lea otras preguntas en las etiquetas