Cómo emitir el comando SLEEP en Attiny

3

Quiero poner un Attiny13 a dormir. En resumen, el capítulo 7 de la hoja de datos dice que debe hacer lo siguiente:
    establecer el modo de suspensión
    habilitación de reposo (establecer bit SE)
    emitir comando SLEEP

Generalmente esto se hace con la ayuda de la biblioteca 'sleep.h' y luego se traduce a

set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();

Si no quiero usar la biblioteca sleep.h, el modo de suspensión y la habilitación de suspensión son fáciles de configurar a través de 3 bits (SM [1: 0] y SE), pero ¿cómo emito el comando SLEEP? Si veo cómo la biblioteca sleep.h realmente lo hace, se define como __asm__ __volatile__ ( "sleep" "\n\t" :: ); Eso parece extraño, ¿realmente tengo que emitir la palabra "dormir" en algún lugar de un programa para tener la capacidad de dormir? ¿No puedo establecer un registro en alguna parte? La biblioteca Sleep.h parece una gran cantidad de sobrecarga si solo quiero poner un chip en suspensión

    
pregunta diy_bloke

1 respuesta

4

La instrucción asm permite la entrada del ensamblaje directamente; en este caso, el AVR tiene una instrucción explícita para poner el microcontrolador en suspensión. No puede hacer esto con un registro, debe hacerlo emitiendo las instrucciones de ensamblaje relevantes.

No hay necesidad de hacer esto usted mismo, sin embargo, sleep.h no es una biblioteca, sino un archivo de encabezado que forma parte de avr-libc, e incluirlo y usarlo no tendrá mayores gastos que hacerlo usted mismo; el compilador incorporará las partes relevantes, y cualquier parte no utilizada del archivo de encabezado no terminará en el resultado compilado.

    
respondido por el Nick Johnson

Lea otras preguntas en las etiquetas