Introducción al modo de ahorro de energia en los microcontroladores ARM cortex M4

Introducción
Esta es una referencia con los detalles más importantes del modo de ahorro de energía o modo SLEEP en los microcontroladores ARM cortex M4. Este modo es de suma importancia para reducir el consumo de potencia, principalmente en sistemas basados en baterias con carga limitada como redes de Sensores o Internet de las cosas.
Una vez que el microcontrolador entra al modo de ahorro de energía este puede ser despertado por una interrupcion para trabajar unicamente cada vez que el evento de interrupcion ocurra.
Por lo tanto, en este escrito encontraras los detalles más importantes respespecto a la configuración del modo de ahorro de energía en estos microcontroladores. Para ello mostramos la construcción de una funcion en keil para entrar a este modo. En nuestro curso completo encontraras más detalles de este método y ejemplos prácticos usando manejadores de interrupcciones para despertar al microcontrolador.
curso completo (click aqui)
Administración de energía:
Los modos de suspensión del procesador Cortex-M4F reducen el consumo de energía:
■ El modo sleep:
Detiene el reloj del procesador.
■ El modo sleep profundo:
Detiene el reloj del sistema, apaga el PLL y la memoria Flash. El bit SLEEPDEEP del registro de control del sistema (SYSCTRL) selecciona qué modo de suspensión se usa.
Entrar en los modos sleep:
Esta sección describe los mecanismos que el software puede usar para poner el procesador en uno de los modos de ahorro de energía. El sistema puede generar eventos de activación espurios, por ejemplo, una operación de depuración activa el procesador. Por lo tanto, el software debe poder volver a configurar el procesador en modo de ahorro de energia después de tal evento. Un programa puede tener un bucle inactivo para volver a poner el procesador en modo sleep.
Esperando por un evento de interrupccion:
La instrucción en esamblador wait for interrupt (WFI), causa inmediatamente que el microcontrolador pase a modo de ahorro de energía.
Cuando el procesador ejecuta la instrucción WFI, se detiene el flujo de programa y el microcontrolador entra al modo sleep.
Adicionalmente se tiene el modo esperar por un evento usando la instrucción (WFE). Esta instruccion esta fuera del alcance del curso pero si usted quiere antenderla puede ir directamente a la hoja de datos en la pagina 114.
Despertar del modo sleep.
Es el mecanismo que permite despertar al procesador del modo de ahorro de energía dependiendo del mecanismo que cause el modo de ahorro de energía ya sea WFI o WFE.
Despertar del modo de energía WFI.
Normalmente el procesador se despierta cuando el NVIC detecta una excepción/Interrupción con suficiente prioridad. Algunos sistemas embebidos pueden ejecutar rutinas de restatauracion del sistema justo despues de despertar de una interrupcion/excepción pero antes de ejecutar la rutina de interrupción. Esto para evitar posibles fallos durante la ejecuccion de la rutina de interrupción o segun sea conveniente para el funcionamiento del sistema.
Para realizar esto último se requiere poner a 1 lógico el bit del PRIMASK y poner a 0 lógico el bit FAULTMASK.
Entonces is la interrupcion occurre (si esta es de mayor prioridad) el procesador retarda antender a la rutina de interrupción hasta que se coloque a cero lógico el bit PRIMASK.
Esta es una referencia con los detalles más importantes del modo de ahorro de energía o modo SLEEP en los microcontroladores ARM cortex M4. Este modo es de suma importancia para reducir el consumo de potencia, principalmente en sistemas basados en baterias con carga limitada como redes de Sensores o Internet de las cosas.
Una vez que el microcontrolador entra al modo de ahorro de energía este puede ser despertado por una interrupcion para trabajar unicamente cada vez que el evento de interrupcion ocurra.
Por lo tanto, en este escrito encontraras los detalles más importantes respespecto a la configuración del modo de ahorro de energía en estos microcontroladores. Para ello mostramos la construcción de una funcion en keil para entrar a este modo. En nuestro curso completo encontraras más detalles de este método y ejemplos prácticos usando manejadores de interrupcciones para despertar al microcontrolador.
curso completo (click aqui)
Administración de energía:
Los modos de suspensión del procesador Cortex-M4F reducen el consumo de energía:
■ El modo sleep:
Detiene el reloj del procesador.
■ El modo sleep profundo:
Detiene el reloj del sistema, apaga el PLL y la memoria Flash. El bit SLEEPDEEP del registro de control del sistema (SYSCTRL) selecciona qué modo de suspensión se usa.
Entrar en los modos sleep:
Esta sección describe los mecanismos que el software puede usar para poner el procesador en uno de los modos de ahorro de energía. El sistema puede generar eventos de activación espurios, por ejemplo, una operación de depuración activa el procesador. Por lo tanto, el software debe poder volver a configurar el procesador en modo de ahorro de energia después de tal evento. Un programa puede tener un bucle inactivo para volver a poner el procesador en modo sleep.
Esperando por un evento de interrupccion:
La instrucción en esamblador wait for interrupt (WFI), causa inmediatamente que el microcontrolador pase a modo de ahorro de energía.
Cuando el procesador ejecuta la instrucción WFI, se detiene el flujo de programa y el microcontrolador entra al modo sleep.
Adicionalmente se tiene el modo esperar por un evento usando la instrucción (WFE). Esta instruccion esta fuera del alcance del curso pero si usted quiere antenderla puede ir directamente a la hoja de datos en la pagina 114.
Despertar del modo sleep.
Es el mecanismo que permite despertar al procesador del modo de ahorro de energía dependiendo del mecanismo que cause el modo de ahorro de energía ya sea WFI o WFE.
Despertar del modo de energía WFI.
Normalmente el procesador se despierta cuando el NVIC detecta una excepción/Interrupción con suficiente prioridad. Algunos sistemas embebidos pueden ejecutar rutinas de restatauracion del sistema justo despues de despertar de una interrupcion/excepción pero antes de ejecutar la rutina de interrupción. Esto para evitar posibles fallos durante la ejecuccion de la rutina de interrupción o segun sea conveniente para el funcionamiento del sistema.
Para realizar esto último se requiere poner a 1 lógico el bit del PRIMASK y poner a 0 lógico el bit FAULTMASK.
Entonces is la interrupcion occurre (si esta es de mayor prioridad) el procesador retarda antender a la rutina de interrupción hasta que se coloque a cero lógico el bit PRIMASK.
Crear la funcion para entrar en modo de ahorro de energia
En Keil que es el compilador que estamos utilizando se requiere de hacer una rutina hibrida de C y Ensamblador como lo hicimos para los retardos usando ASM.
__asm void
sleep(void)
{
WFI
BX LR ;//the link register is providing the address to branch to.
}
Como puedes observar usamos (__asm void) para hibridar y posteriormente nombramos a nuestra rutuna como sleep. Este nombre es arbritrario, por ejemplo algunos autores nombran a la funcion como:
Wait_For_Interrupt()
quiza sea una mejor descripción ya que sleep() es muy general y no indica claramente que el procesador entrará a modo de ahorro de energía y esperará hasta que el NVIC lo despierte.
Por último es importante notar que en la rutina se emplea la instrucción de ensamblador WFI para llevar al procesador a modo de horro de energia, enseguida de la instrucción BX que simplemente hace que el micro brinque a la siguiente instruccion que se estaba ejecutando antes de ser llamada.
En Keil que es el compilador que estamos utilizando se requiere de hacer una rutina hibrida de C y Ensamblador como lo hicimos para los retardos usando ASM.
__asm void
sleep(void)
{
WFI
BX LR ;//the link register is providing the address to branch to.
}
Como puedes observar usamos (__asm void) para hibridar y posteriormente nombramos a nuestra rutuna como sleep. Este nombre es arbritrario, por ejemplo algunos autores nombran a la funcion como:
Wait_For_Interrupt()
quiza sea una mejor descripción ya que sleep() es muy general y no indica claramente que el procesador entrará a modo de ahorro de energía y esperará hasta que el NVIC lo despierte.
Por último es importante notar que en la rutina se emplea la instrucción de ensamblador WFI para llevar al procesador a modo de horro de energia, enseguida de la instrucción BX que simplemente hace que el micro brinque a la siguiente instruccion que se estaba ejecutando antes de ser llamada.