0% encontró este documento útil (0 votos)
110 vistas26 páginas

Guía de Configuración RTC

Este documento describe la configuración y funcionamiento del reloj de tiempo real (RTC) en el microcontrolador. El RTC mantiene la hora y fecha incluso cuando el sistema está apagado utilizando muy poca energía. Se configura a través de varios registros para habilitarlo, establecer interrupciones y calibrarlo. Mantiene 8 contadores de tiempo y generará interrupciones en eventos programados o cada incremento de contador.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
110 vistas26 páginas

Guía de Configuración RTC

Este documento describe la configuración y funcionamiento del reloj de tiempo real (RTC) en el microcontrolador. El RTC mantiene la hora y fecha incluso cuando el sistema está apagado utilizando muy poca energía. Se configura a través de varios registros para habilitarlo, establecer interrupciones y calibrarlo. Mantiene 8 contadores de tiempo y generará interrupciones en eventos programados o cada incremento de contador.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 26

RTC

Configuración básica

El RTC se configura utilizando los siguientes registros:

1. Alimentación: en el registro PCONP (Tabla 46), configure los bits


PCRTC.
Observación: Al reiniciar, el RTC está habilitado. Consulte la
Sección 27.7 para ver las opciones de ahorro de energía.

2. Reloj: el RTC utiliza la salida de reloj de 1 Hz del oscilador RTC


como el único reloj fuente. La frecuencia del reloj periférico para
acceder a los registros es CCLK / 8.

3. Interrupciones: Vea la Sección 27.6.1 para el manejo de


interrupciones RTC. Las interrupciones están habilitadas en el NVIC
utilizando el registro de activación de configuración de interrupción
apropiado.

Características

• Mide el paso del tiempo para mantener un calendario y un reloj.


Proporciona segundos, minutos, horas, día del mes, mes, año, día de
la semana y día del año.

• Diseño de potencia ultra baja para admitir sistemas alimentados por


batería. Menos de 1 microamperio requerido para la operación de la
batería. Utiliza energía de la fuente de alimentación de la CPU cuando
está presente.

• 20 bytes de almacenamiento con respaldo de batería y operación


RTC cuando se corta la alimentación la CPU
• Oscilador dedicado de ultra baja potencia de 32 kHz. Pin de fuente
de alimentación de batería dedicado. La fuente de alimentación RTC
está aislada del resto del chip. El contador de calibración permite un
ajuste mejor que ± 1 sec / día con una resolución de 1 sec. Se pueden
generar interrupciones periódicas a partir de incrementos de cualquier
campo de los registros de tiempo y segundos valores fraccionales
seleccionados

. • La alarma de interrupción puede generarse para una fecha / hora


específica

Descripción

El reloj de tiempo real (RTC) es un conjunto de contadores para medir


el tiempo cuando el sistema está encendido, y opcionalmente cuando
está apagado. Utiliza muy poca potencia sobre todo cuando sus
registros no están siendo accedidos por la CPU, y especialmente en
los modos de potencia reducida. En el LPC17xx, el RTC es
sincronizado por un oscilador separado de 32 kHz que produce una
referencia de tiempo interno de 1 Hz. Los RTC funciona con su propio
pin de fuente de alimentación, VBAT, que se puede conectar a una
batería, conectaao externamente a un suministro de 3V, o dejado
flotando. El dominio de potencia RTC se muestra en forma conceptual
en la Figura 130. Una vista detallada de la parte de la hora del RTC
se muestra en la Figura 131.
Arquitectura
Descripción del pin

Descripción del registro

El RTC incluye varios registros, que se muestran en la Tabla 507.


Descripciones detalladas de los registros siguen. En estas
descripciones, para la mayoría de los registros, la columna
Restablecer valor muestra "NC", lo que significa que estos registros no
se modifican mediante un reinicio. El software debe Inicializar estos
registros entre el encendido y la puesta en funcionamiento del RTC.

Los registros se dividen en cinco secciones por funcionalidad.


Interrupciones RTC

La generación de interrupciones se controla a través del registro de


ubicación de interrupciones (ILR), contador Registro de interrupción de
incremento (CIIR), los registros de alarma y el registro de máscara de
alarma(AMR) Las interrupciones se generan solo por la transición al
estado de interrupción. El ILR habilita por separado las interrupciones
CIIR y AMR. Cada bit en CIIR corresponde a uno de los contadores de
tiempo. Si CIIR está habilitado para un contador en particular,
entonces cada vez que el contador se incrementa genera una
interrupción. Los registros de alarma permiten al usuario especificar
una fecha y tiempo para que se genere una interrupción. El AMR
proporciona un mecanismo para enmascarar la alarma. Compara. Si
todos los registros de alarma no enmascarados coinciden con el valor
en su tiempo correspondiente al contador, generara una interrupción.
La interrupción del RTC puede sacar el microcontrolador del modo de
apagado, cuando el RTC está operando desde su propio oscilador en
los pines RTCX1-2. Cuando la interrupción RTC es habilitada para la
activación y se produce el evento seleccionado, el ciclo de activación
del oscilador asociado con los pines XTAL1 / 2 se inicia.

Para obtener detalles sobre el despertador basado en RTC consulte


la Sección 4.8.8 “Activación desde modos de energía reducidos” en la
página 62 y Sección 4.9 “Temporizador de despertador” en la página
65.
Grupo de registro

Registro de ubicación de interrupción (ILR - 0x4002 4000)

El registro de ubicación de interrupción es un registro de 2 bits que


especifica qué bloques son generadores de una interrupción (ver
Tabla 508). Escribir un uno en el bit apropiado borra la interrupción
correspondiente. Escribir un cero no tiene efecto. Esto le permite al
programador leer este registro y vuelve a escribir el mismo valor para
borrar solo la interrupción que es detectada por la lectura.

Registro de control de reloj (CCR - 0x4002 4008)


El registro del reloj es un registro de 4 bits que controla el
funcionamiento del circuito de división del reloj. Cada bit del registro de
reloj se describe en la Tabla 509. Todos los bits NC en este registro
deben se inicializará cuando el RTC se encienda por primera vez.
Registro de interrupción de incremento de contador
(CIIR - 0x4002 400C
El registro de interrupción de incremento de contador (CIIR) brinda la
capacidad de generar una interrupción cada vez que se incrementa un
contador. Esta interrupción sigue siendo válida hasta que se borre
escribiendo un1 al bit 0 del registro de ubicación de interrupción (ILR
[0]).
Registro de máscara de alarma (AMR - 0x4002 4010)

El registro de máscara de alarma (AMR) permite al usuario


enmascarar cualquiera de los registros de alarma. La Tabla 511
muestra la relación entre los bits en el AMR y las alarmas. Para el
función de alarma, cada registro de alarma no enmascarado debe
coincidir con la hora correspondiente contador para que se genere una
interrupción. La interrupción se genera solo cuando el contador realiza
primera comparación y esta cambia de no coincidencia a coincidencia.
La interrupción se elimina cuando uno1 es escrito en el bit apropiado
del Registro de ubicación de interrupción (ILR). Si todos los bits de
máscara son configurado, entonces la alarma se desactiva
Registro de control auxiliar RTC (RTC_AUX - 0x4002
405C)
El registro de control auxiliar RTC contiene indicadores de interrupción
adicionales para funciones que no son parte del reloj de tiempo real
(la parte que registra el paso del tiempo y genera otras funciones
relacionadas con el tiempo).

En el LPC17xx, el único indicador de interrupción agregado es por falla


de el oscilador RTC.
Registro de habilitación auxiliar RTC (RTC_AUXEN -
0x4002 4058)
El registro de habilitación auxiliar RTC controla si las fuentes de
interrupción adicionales representados en el registro de control auxiliar
RTC están habilitados.
Registros de tiempo consolidados

Los valores de los contadores de tiempo pueden leerse opcionalmente


en un formato consolidado que permite al programador leer todos los
contadores de tiempo con solo tres operaciones de lectura. los varios
registros se empaquetan en valores de 32 bits como se muestra en la
Tabla 514, la Tabla 515 y Tabla 516. El bit menos significativo de cada
registro se vuelve a leer en el bit 0, 8, 16 o 24. Los registros de
tiempos consolidados son de solo lectura. Para escribir nuevos valores
en el tiempo Contadores, se deben utilizar las direcciones del contador
de tiempo.

Registro de tiempo consolidado 0 (CTIME0 - 0x4002 4014)

El registro de tiempo consolidado 0 contiene los valores de tiempo de


orden bajo: segundos, minutos, Horas y día de la semana.
Registro de tiempo consolidado 1 (CTIME1 - 0x4002 4018)
El registro de tiempo de consolidación 1 contiene los valores del día
del mes, mes y año.

Registro de tiempo consolidado 2 (CTIME2 - 0x4002


401C)
El registro de tiempo de consolidación 2 contiene solo el valor del día
del año.

Grupo de contador de tiempo


El valor del tiempo consta de los ocho contadores que se muestran en
la Tabla 517 y la Tabla 518. Estos Los contadores se pueden leer o
escribir en los lugares que se muestran en la Tabla 518.
[1] Estos valores simplemente se incrementan en los intervalos apropiados y se restablecen en el
punto de desbordamiento definido. No se calculan y deben inicializarse correctamente para que
tengan sentido.

Cálculo del año bisiesto


El RTC hace una comparación de bits simple para ver si los dos bits
de orden más bajo del año El contador es cero. Si es cierto, entonces
el RTC considera ese año un año bisiesto. El RTC considera todos los
años divisibles por 4 como años bisiestos. Este algoritmo es exacto
desde el año 1901 hasta el año 2099, pero falla para el año 2100, que
no es bisiesto. El único efecto del año bisiesto en el RTC es alterar la
duración del mes de febrero para el mes, día de mes y año
contadores.

Calibration register (CALIBRATION - address 0x4002


4040)
El siguiente registro se usa para calibrar el conteo de tiempo
Procedimiento de calibración

La lógica de calibración puede ajustar periódicamente el contador de


tiempo al no incrementar el contador, o incrementando el contador en
2 en lugar de 1. Esto permite calibrar el Oscilador RTC bajo algunas
condiciones típicas de voltaje y temperatura sin la necesidad de
recortar externamente el oscilador RTC. Un método recomendado
para determinar el valor de calibración es usar CLKOUT característica
para observar de manera no intrusiva la frecuencia del oscilador RTC
en las condiciones que debe recortar y calcular la cantidad de relojes
que se verán antes de que se acabe el tiempo por un segundo Ese
valor se usa para determinar CALVAL. Si el oscilador RTC se recorta
externamente, el mismo método de observación no intrusivaLa
frecuencia del oscilador RTC puede ser útil en ese proceso.
Calibración hacia atrás
Habilite el temporizador RTC y la calibración en el registro CCR
(establezca los bits CLKEN = 1 y CCALEN = 0). En el registro
CALIBRACIÓN, configure el valor de calibración CALVAL ≥ 1 y
seleccione CALDIR = 1.

• El temporizador SEC y el contador de calibración cuentan para cada


ciclo de reloj de 1 Hz.

• Cuando el contador de calibración alcanza CALVAL, se produce una


coincidencia de calibración y todo Los temporizadores RTC se
detendrán durante un ciclo de reloj para que los temporizadores no se
incrementen en El siguiente ciclo.

• Si se produce un evento de coincidencia de alarma en el mismo ciclo


que la coincidencia de calibración, la alarma la interrupción se
retrasará un ciclo para evitar una interrupción de doble alarma.

Calibración hacia adelante


Habilite el temporizador RTC y la calibración en el registro CCR
(establezca los bits CLKEN = 1 y CCALEN = 0). En el registro
CALIBRACIÓN, configure el valor de calibración CALVAL ≥ 1
yseleccione CALDIR = 0.

• El temporizador SEC y el contador de calibración cuentan para cada


ciclo de reloj de 1 Hz.

• Cuando el contador de calibración alcanza CALVAL, se produce una


coincidencia de calibración y el

Los temporizadores RTC se incrementan en 2.


• Cuando ocurre el evento de calibración, el LSB del registro ALSEC
se ve obligado a ser unopara que la interrupción de la alarma no se
pierda al omitir un segundo.

Registros de propósito general

Registros de propósito general 0 a 4 (GPREG0 a GPREG4


- direcciones0x4002 4044 a 0x4002 4054)

Estos registros se pueden usar para almacenar información importante


cuando la fuente de alimentación principal es apagada. El valor en
estos registros no se ve afectado por el reinicio del chip.

Grupo de registro de alarmas

Los registros de alarma se muestran en la Tabla 521. Los valores en


estos registros se comparan con los contadores de tiempo. Si todo
está desenmascarado (consulte la Sección 27.6.2.4 “Registro de
máscara de alarma (AMR - 0x4002 4010) "en la página 563) los
registros de alarma coinciden con su hora correspondiente contadores
entonces se genera una interrupción. La interrupción se borra cuando
se escribe un 1 en el bit 1 del registro de ubicación de interrupción
(ILR [1]).
Notas de uso de RTC
Si se usa el RTC, VBAT se puede conectar a una fuente de
alimentación independiente (generalmente un batería externa), o
dejada flotando. El dominio RTC siempre estará alimentado
internamente si VDD (REG) (3V3) está presente, incluso si no hay
energía aplicada a VBAT. Mientras el poder sea disponible en VDD
(REG) (3V3) o VBAT, el RTC retendrá su valor de tiempo y la copia de
seguridad de los registrar contenidos. Si tanto VDD (REG) (3V3) como
VBAT no están presentes, toda la información de RTC será perdida. El
incremento de RTC se detendrá o será impredecible si se pierde la
fuente del reloj, interrumpido o alterado el conteo.
RTC / Calibración / rtc_calib

00001 /
************************************************
*********************** /
00019 #include "LPC17xx.h"
00020 #include "lpc17xx_clkpwr.h"
00021 #include "lpc17xx_libcfg.h"
00022 #include "debug_frmwrk.h"
00023 #include "lpc17xx_rtc.h"
00024
00025 / * Grupo de ejemplo
---------------------------------------------
-------------- * /
00032 / ************************** VARIABLES
PRIVADAS ******************** ***** /
00033 uint8_t menú [] =
00034
"************************************************
******************************** \ n \ r "
00035 "Hola NXP Semiconductors \ n \ r"
00036 "Demo de calibración RTC \ n \ r"
00037 "\ t - MCU: LPC17xx \ n \ r"
00038 "\ t - Núcleo: ARM CORTEX-M3 \ n \ r"
00039 "\ t - Comunicar vía: UART0 - 115200 bps \
n \ r"
00040 "Este ejemplo describe cómo calibrar RTC \
n \ r"
00041
"************************************************
******************************** \ n \ r " ;
00042
00043 / ************************** FUNCIONES
PRIVADAS ******************** ***** /
00044 vacío print_menu ( vacío );
00045 void RTC_IRQHandle ( void );
00046
00047 / * ----------------- INTERRUPT RUTINAS DE
SERVICIO -------------------------- * / /
00048 /
************************************************
********************* /
00053 vacío RTC_IRQHandler ( vacío )
00054 {
00055 uint32_t secval;
00056
00057 / * Esta es la interrupción del contador de
incrementos * /
00058 if (RTC_GetIntPending (LPC_RTC,
RTC_INT_COUNTER_INCREASE))
00059 {
00060 secval = RTC_GetTime (LPC_RTC,
RTC_TIMETYPE_SECOND);
00061
00062 / * Enviar información de depuración * /
00063 _DBG ( "Segundo:" ); _DBD (secval);
00064 _DBG_ ( "" );
00065
00066 // Borrar interrupción pendiente
00067 RTC_ClearIntPending (LPC_RTC,
RTC_INT_COUNTER_INCREASE);
00068}
00069}
00070
00071 / * ------------------------- FUNCIONES
PRIVADAS -------------------- ---------- * /
00072 /
************************************************
********************* /
00077 vacío print_menu ( vacío )
00078 {
00079 _DBG (menú);
00080}
00081
00082 / * ------------------------- FUNCIÓN
PRINCIPAL -------------------- ---------- * /
00083 /
************************************************
********************* /
00088 int c_entry ( nulo )
00089 {
00090 / * Inicializar depuración a través de
UART0
00091 * - 115200bps
00092 * - 8 bits de datos
00093 * - Sin paridad
00094 * - 1 bit de parada
00095 * - Sin control de flujo
00096 * /
00097 debug_frmwrk_init ();
00098
00099 // imprimir pantalla de bienvenida
00100 print_menu ();
00101
00102 / * En este ejemplo:
00103 * Suponga que el RTC necesita ajustarse
periódicamente después de cada 5 segundos.
00104 * Y el contador de tiempo necesita
incrementando el contador en 2 en lugar de 1
00105 * Observaremos el contador del temporizador
después de la calibración a través de la pantalla
en serie
00106 * /
00107 // Módulo Init RTC
00108 RTC_Init (LPC_RTC);
00109
00110 / * Activar rtc (comienza a aumentar el
contador de ticks y el segundo registro de
contador) * /
00111 RTC_ResetClockTickCounter (LPC_RTC);
00112 RTC_Cmd (LPC_RTC, ENABLE);
00113
00114 // Establecer hora actual = 0
00115 RTC_SetTime (LPC_RTC, RTC_TIMETYPE_SECOND,
0);
00116
00117 / * Ajuste de calibración del temporizador
00118 * Valor de calibración = 5s;
00119 * Dirección = Calibración directa
00120 * Entonces, después de cada 5s, la lógica
de calibración puede ajustar periódicamente el
contador de tiempo
00121 * incrementando el contador en 2 en lugar
de 1
00122 * /
00123 RTC_CalibConfig (LPC_RTC, 5,
RTC_CALIB_DIR_FORWARD);
00124 RTC_CalibCounterCmd (LPC_RTC, ENABLE);
00125
00126 / * Establecer el CIIR para la segunda
interrupción del contador * /
00127 RTC_CntIncrIntConfig (LPC_RTC,
RTC_TIMETYPE_SECOND, ENABLE);
00128
00129 / * Activar interrupción RTC * /
00130 NVIC_EnableIRQ (RTC_IRQn);
00131
00132 / * Bucle para siempre * /
00133 mientras (1);
00134 retorno 1;
00135}
00136
00137
00138 / * Con los conjuntos de herramientas ARM y
GHS, el punto de entrada es main (), esto
00139 permite que el enlazador genere código
envoltorio para configurar pilas, asignar
00140 área de almacenamiento dinámico, e inicializar y
copiar código y segmentos de datos. Para GNU
00141 conjuntos de herramientas, el punto de entrada es a
través de __start () en crt0_gnu.asm
00142 , y ese código de inicio configurará pilas y datos *
/
00143 int main ( nulo )
00144 {
00145 return c_entry ();
00146}
00147
00148 #ifdef DEBUG
00149 /
*************************************************
******************************
00150 * @brief Informa el nombre del archivo fuente y el
número de línea fuente
00151 * donde se produjo el error CHECK_PARAM.
00152 * @param [in] file Puntero al nombre del archivo
fuente
00153 * @param [en] línea afirmar_param número de fuente
de línea de error
00154 * @return Ninguno
00155 *************************************************
****************************** /
00156 void check_failed (archivo uint8_t *, línea
uint32_t)
00157 {
00158 / * El usuario puede agregar su propia
implementación para informar el nombre del archivo y el
número de línea,
00159 ex: printf ("Valor de parámetros incorrecto: archivo
% s en la línea% d \ r \ n", archivo, línea) * /
00160
00161 / * Bucle infinito * /
00162 mientras (1);
00163}
00164 #endif
00165
00166 / *
00167 * @}
00168 * /

También podría gustarte