prólogo
El LPC29xx cubre sistemas de administración de energía complejos y prácticos. Esta nota de aplicación presenta las técnicas necesarias para poner el dispositivo LPC29xx en modo de apagado mientras mantiene su capacidad de responder a su entorno.
hardware
Esta nota de aplicación utiliza la placa de evaluación Keil MCB2900 versión 1 con LPC2919/01. Los interruptores de la placa conectados a las interrupciones externas 4 y 5 se utilizan como entradas. Las interrupciones externas se pueden cambiar a otros puertos cambiando la “definición” en el código, por lo que también se pueden usar otras placas. La configuración de software del hardware se detalla en el capítulo de software.
Al quitar la resistencia R6 de 0 Ω del MCB2900, se puede medir la corriente de suministro en el dominio VDD (1v8). No se considera el dominio VDDE (3v3), ya que depende en gran medida del entorno del dispositivo. Los valores actuales proporcionados en esta nota de aplicación son para un dispositivo a temperatura ambiente y no representan el mínimo o máximo garantizado. Para obtener especificaciones detalladas, consulte la hoja de datos.
software
IDE
El código provisto fue desarrollado con uVision MDK V3.24 de Keil. Esta herramienta tiene una función útil que coloca funciones en la memoria volátil. Parte del código debe colocarse en la memoria volátil como se describe en el párrafo 4.1.6.
Configuración de código
El programa utiliza dos interrupciones externas para salir de los modos de activación y suspensión. El archivo “extint.h” configura qué pines están conectados a interrupciones externas y qué interrupciones se utilizan. Puede definir interrupciones externas 0-7. En el MCB2900, los botones P1.30 y P1.31 están conectados a las interrupciones externas 4 y 5.
#define EXINT_sueño 4
#define EXINT_wake 5
Los usuarios también tienen la opción de un menor consumo de energía a costa de tiempos de recuperación ligeramente más largos. En el párrafo 4.3 se dan más detalles al respecto.
#define SWITCH_CLOCKS_TO_XTAL 0
Compilar y flashear código
El proyecto está configurado para ejecutarse desde el FLASH interno del LPC2900. Después de compilar, puede descargar (flash) y ejecutar el código. La depuración solo es posible antes de ingresar al modo de apagado (PD), ya que el modo PD desactiva todos los relojes, incluido el reloj JTAG. La conexión entre la MCU y el depurador se pierde en el modo PD y solo se puede restaurar reiniciando.
Descripción del programa
El programa principal hace parpadear el LED conectado a P1.27 mientras espera que se presione un botón en P1.30 (definido como botón de activación) o P1.31 (definido como botón de suspensión). El controlador de interrupción externo establece un indicador cuando se presiona el botón de activación o suspensión, y este indicador se sondea en el bucle del programa principal. Si se presiona el botón de activación (P1.30), el LED se alterna y activa la MCU si está en modo de apagado. Si se presiona el botón de suspensión (P1.31), el software llama a la función ‘GOSleepMode()’ que maneja el cambio de reloj y la configuración de la PMU para hacer la transición de la MCU al estado PD. El estado del sistema se muestra en la pantalla LCD.
entrar en modo de suspensión
Se requiere cierta preparación para configurar la fuente de activación y preparar la MCU para ingresar a PD. Este párrafo detalla cada acción requerida.
deshabilitar interrupciones
Las interrupciones del núcleo deben deshabilitarse antes de deshabilitar cualquier parte de la MCU. Este requisito garantiza que los controladores de interrupciones no lean ni escriban en los periféricos o la memoria deshabilitados. Se genera una excepción cuando esto sucede. Las interrupciones se vuelven a habilitar una vez que se completa la secuencia de activación.
__inhabilitar_irq();
__disable_fiq();
Cambiar el sistema a LPosc
Después de desactivar las interrupciones, el reloj del sistema debe cambiarse a LPosc (Oscilador de baja potencia) funcionando nominalmente a 475 KHz. LPosc no se puede apagar, por lo que el reloj del sistema principal está garantizado al despertar. LPosc se puede usar más tarde, pero se debe tener cuidado de no desactivar el reloj hasta el núcleo mientras se está ejecutando. Aunque el núcleo cambia automáticamente a otra fuente de reloj cuando el reloj está deshabilitado, se recomienda permitir que su código controle por completo el reloj del núcleo.
El cambio a LPosc se realiza configurando el bit correspondiente en el registro ‘SYS_CLK_CONF’. SYS_CLK_CONF = BLOQUEO AUTOMÁTICO | DIV1;
Configuración del bit de activación
Habilitar los bits de activación en los registros ‘PMU_CLK_CFG_xxx’ desactivará el reloj en la hoja de reloj especificada cuando se establezcan los bits de apagado en los registros ‘PMU_PM’. La configuración del bit PD apaga simultáneamente todos los relojes que tienen configurados los bits de activación. Un evento de activación borra el bit de apagado y vuelve a sincronizar todos los periféricos. Se requiere un reloj en una hoja de reloj en particular para acceder a los registros “PMU_CLK_CFG_xxx”. Puede verificar si el reloj está disponible en los registros ‘CGU_xxx_STAT’.
El proceso anterior es la única forma de desactivar el reloj hasta el núcleo, ya que el bit RUN en el registro de configuración del reloj no se puede borrar. Establecer el bit PD debe ser la última acción antes de ingresar al modo de suspensión. Discutiremos cuándo y cómo hacer esto más adelante.