Un microcontrolador es un sistema electrónico digital programable integrado en un único chip. Desde el punto de vista hardware el microcontrolador está formado por módulos y conexiones. Un módulo se puede ver como una caja negra que se encarga de una determinada tarea. Las conexiones conectan los módulos.
Uno de los módulos del microcontrolador es el
módulo de reloj. Este módulo se encarga de la
generación y distribución de señales de reloj, tanto para los dispositivos como para los periféricos. El hecho de conocer este módulo es de vital importancia para implementar soluciones de bajo consumo de energía y obtener mayor precisión en nuestras aplicaciones.
El módulo de reloj incluye
fuentes de reloj y señales de reloj. El módulo de reloj genera las señales de reloj haciendo uso de las fuentes de reloj. Las
fuentes de reloj son circuitos osciladores internos o externos al microcontrolador que generan señales eléctricas de frecuencia fija. Estas fuentes de reloj
presentan parámetros configurables mediante software.
Una señal de reloj es una señal cuadrada que en el caso del microcontrolador reciben todos los circuitos secuenciales (CPU, periféricos, memoria) y que nos permiten sicronizar el funcionamiento.. Dentro del microcontorlador existen varias señaels de reloj para la CPU y los distintos periféricos y varias fuentes de reloj que generan estas señales. El microcontrolador tiene tres fuentes de reloj para la CPU y periféricos. Dichas
fuentes de reloj son LFXT1CLK, VLOCLK y DCOCLK. A su vez presenta las siguientes
señales de reloj ACLK, MCLK y SMCLK.
Las fuentes de reloj se pueden configurar haciendo uso de los registros de configuración del sistema de relojes. Se tienen cuatro registros de 8 bits que nos permiten configurar dichas fuentes:
- Registro DCOCLT: nos permite configurar los parámeros del oscilador RC de la fuente de reloj DCOCLK. El estado inicial tras un reset es 0x60.
- Registro BCSCTL1: nos permite configurar parámetros del DCO (circuito, no fuente, la fuente sería DCOCLK), la señal ACLK y el oscilador XT2. El estado inicial tras un reset es 0x87.
- Registro BCSCTL2: nos permite configurar la selección de las fuentes de reloj para las señales MCLK y SMCLK. El estado inicial tras un reset es 0x00.
- Registro BCSCTL3: configura los parámetros relacionados con el oscilador XT1 y XT2. El estado inicial tras un reset es 0x05.
Cuando encendemos el dispositivo (evento RESET ==> señal POR ==> señal PUC), los registros de configuración del sistema de relojes toman un valor por defecto. Ese valor por defecto va a determinar el estado de arranque del sistema de relojes tras el encendido del microcontrolador y en consecuencia va a determinar las señales MCLK, SMCLK y ACLK. Se tiene que la fuente por defecto es DCOCLK y ésta trabaja a una frecuencia de 1,1 MHz.
Podría haber únicamente una señal de reloj y una fuente para todo el microcontrolador, pero este sistema de relojes está pensado para optimizar rendimiento y las necesidades de consumo. Así para el caso de que se necesite rendimiento se hace uso de un reloj de alta frecuencia de inicio rápido y alto consumo (DCOCLK) para ejecutar el código lo más rápido posible. En caso de necesitar ajo consumo se hace uso de fuentes de baja frecuencia (LFXT1CLK y VLOCLK). Los relojes que no se vayan a utilizar se apagan para que no consuman.
Señales de reloj.
Se tienen las siguientes señales de reloj:
- MCLK (master clock): puede ser generada por cualquiera de las fuentes (VLOCLK, DCOCLK y LFXT1CLK). Es el reloj de la CPU y del sistema. La frecuencia de la señal puede ser dividida entre 1, 2, 4 y 8.
- SMCLK (sub-main clock): señal que va a los periféricos. Puede ser generada por cualquiera de las fuentes (DCOCLK, VLOCLK, LFXT1CLK). Puede ser dividido por 1, 2, 4 y 8.
- ACLK (auxiliary clock): señal que va a los periféricos. Se obtiene a partir de la fuente VLOCLK o un cristal externo (LFXT1CLK). La frecuencia puede ser dividida entre 1, 2, 4 y 8. Se usa para proveer a los periféricos una señal de reloj cuando la CPU está a pagada.
Fuentes de reloj.
- LFXT1CLK: se trata de un oscilador que puede trabajar en baja o alta frecuencia. Cuando trabaja en baja frecuencia usa un oscilador externo donde la frecuencia es de 32768 Hz = 2^15, conectándolo entre los terminales XIN y XOOUT. Cuando trabaja en alta frecuencia (400 kHz a 16MHz) pueden conectarse cristales de mayor frecuencia o resonadores en los mismos terminales que en el modo de baja frecuencia. Para el caso del cristal externo, en caso de tener que usar dicho cristal es necesario soldarlo a la placa. También es posible introducir señales externas de reloj sólo en el pin XIn. Habrá que asegurarse de que la frecuencia de esa señal externa esté dentro de los parámetros enunciados en el datasheet del dispositivo. Observemos que operando en baja frecuencia, la frecuencia es bastante baja en comparación de otras fuentes como DCOCLK. Frecuencia baja implica bajo consumo (se suele hablar en este caso de ultra bajo consumo). Se utiliza para genera las señales MCLK, SMCLK y ACLK. Es excluyente con VLOCLK, es decir, no podemos usar a la vez las dos fuentes. Esta fuente se utiliza cuando se precisa una mayor precisión y estabilidad. La frecuencia de la señales que se generan a partir de esta fuente será la indicada en las características y ésta tendrá una variación despreciable con el tiempo y la temperatura. Una desventaja importante es que cuando encendemos el dispositivo, el cristal requiere ciertos milisegundos para estabilizarse y poder oscilar a la frecuencia indicada. Se puede deshabilitar por software poniendo a 1 el bit OSCOFF del registro de estado. Esto se puede hacer siempre y cuando LFXT1CLK no sea la fuente de reloj de las señales MCLK y SMCLK. Por tanto sólo se puede deshabilitar si se está usando para la señal ACLK y no se usa para las otras señales.
- VLOCLK (Very Low Power, Low Frecuency Oscilator): oscilador de bajo consumo y frecuencia. El oscilador (circuito) recibe el nombre de VLO, mientras que la fuetne VLOCLK. El oscilador es RC y es interno. Trabaja con una frecuencia típica de 12 kHz. Esa frecuencia es fija, es decir, no la podemos cambiar por software, pero ésta puede cambiar por cuestiones de temperatura y alimentación (0.5 % /ºC y 4% /V). Se mueve en el margen de 4 a 20 kHz. Se utiliza en aplicaciones de bajo consumo. Es excluyente con la fuente LFXT1CLK, es decir, si está seleccionado VLOCLK se desactiva la fuetne LFXT1CLK. Deshabilitado por software poniendo a 1 el bit OSCOFF del registro de estado. Se utiliza para generar las señales MCLK (que va a la CPU) y ACLK (que va a los periféricos). En general esta fuente de reloj se usa en aplicaciones en las cuales no sea necesaria la precisión y sea necesario el bajo consumo. Se trata de un oscilador de baja precisión, frecuencia y muy bajo consumo pero poco estable a cambios en la temperatura. Para la configuración de este reloj se trabaja con los registros de configuración del sistema de relojes:
- BCSCTL1: configurando los bits XT2OFF.
- BCSCTL2: configurando los bits SELMx (0|1), SELS y DIVMx (0|1).
- DCOCLK (Digitally Controlled Oscillator): es un oscilador interno (RC, resistencia-condensador serie) denominado DCO de alta frecuencia. Se usa para generar las señales MCLK (CPU) y SMCLK (periféricos). Esta fuente genera una señal cuya frecuencia varía con la temperatura, voltaje o de un microcontrolador a otro. Esa frecuencia se puede programar mediante los bits de los registros de configuración DCOCTL y BCSCTL1. El dispositivo ha sido calibrado de fábrica con 4 frecuencias: 1, 8, 12 y 16 MHz. El fabricante almacena en la flash (0x1000- 0x10FF) el valor que deben tomar los registros DCOCTL y BCSCTL1 para que la fuetne genera una señal a esa frecuencia concreta. En el archivo de cabecera, existen unas constantes simbólicas con el nombre CALB1_XMHZ CALDCO_XMHZ (donde X varía entre 1, 8, 12 y 16). El valor de estas constantes es una dirección de memoria. Esa dirección de memoria se corresponde con una zona de la flash donde el fabricante ha almacenado un valor que hace que el dispositivo trabaje a una frecuencia concreta. Las constantes que empiezan con el nombre de CALBC1_ es el valor que hay que almacenar en el registro de configuración BCSCTL1, mientras que las que empiezan por CALDCO es el valor que hay que almacenar en el registro de configuración DCOCTL. Una de las desventajas de usar la calibración de fábrica es el hecho de que Texas Instrument realiza sus calibraciones a 30ºC y 3V. Si nuestro sistema ha de operar lejos de estos valores, la calibración no será buena. Algunas consideraciones de esta fuente de reloj son las siguientes:
- Una ventaja de esta fuente de reloj es el bajo tiempo de encendido (en menos de 1 us tenemos una señal de reloj estable con la frecuencia deseada).
- Se puede deshabilitar por software, siempre que DCOCLK no sea la fuente de reloj de las señales MCLK o SMCLK en modo activo. Para ello se pone a 1 el bit SCG0 del registro de estado.
- Es el reloj por defecto tras la señal (PUC y por tanto tras la señal POR) operando a 1,1 MHz aproximadamente.
- Para el caso de trabajar con señales de reloj calibradas se tiene un error máximo del 6% en la frecuencia.
- Para el caso de trabajar con señales de reloj no calibradas, el error máximo en la frecuencia puede ser del 23%.
- XT2CLK: se trata de una fuente opcional de alta frecuencia que puede ser usada con un cristal estándar, resonador o reloj externo trabajando en un rango de 400 kHz-16MHz.
Resumen.
- Elección de las fuetnes VLOCLK o LFXT1CLK: a través de los bits 4 y 5 (LFXT1Sx) del registro de configuración del sistema de relojes BCSCLT3.
- Elección de la fuente de la señal MCLK: mediante los bits 6 y 7 (SELMx) del registro BCSCTL2.
- Elección de la fuente de la señal SMCLK: mediante el bit 3 del registro BCSCTL2.
- Elección de la fuente de la señal ACLK al elegir entre VLOCLK y LFXT1CLK: a través de los bits 4 y 5 del registro BCSCLT3.
- Dividir la frecuencia de MCLK: (bit 4-5) del registro BCSCTL2.
- Dividir la frecuencia de SMCLK: (bit 2-1) del registro BCSCTL2.
- Dividir la frecuencia de ACLK: (bit 5-4) del registro BCSCTL1.
- Determinar la frecuencia de la fuetne DCOCLK: (RSELx registro BCSCTL1 y MODx, DCOx del registro DCOCTL).
- Habilitación/Deshabilitación de la fuente DCOCLK: bit SCGO0 del registro de estado. Si se pone a 1 se deshabilita, a 0 se habilita.
- Habilitación/Deshabilitación de la fuente VLOCLK y LFXT1CLK: mediante el bit OSCOFF del registro de estado. Si se pone a 1 deshabilitado, a 0 habilitado. Hay que tener en cuenta que con ese bit se puede habilitar/deshabilitar los dos puesto que las dos fuentes son excluyentes.