Ir al contenido principal

Módulo de reloj en MSP430 (Unified Clock System)

El módulo de reloj del MSP430 (o como lo llama TI, Unified Clock System) es muy versátil, y es el responsable de la gran capacidad de este microcontrolador para ser uno de los mejores en lo que a bajo consumo se refiere.

launchpad msp430

Vamos a hacer un repaso general de este módulo centrándonos en las partes más relevantes ya que, por sí sólo, este módulo daría para escribir un libro en exclusiva.

MSP430 Unified Clock System

A vista de pájaro, tal y como observamos en el esquema anterior, podemos distinguir las siguientes señales:

  • Dos entradas (XIN y XT2IN) y dos salidas (XOUT y XT2OUT) que permiten conectar dos osciladores externos. Podríamos conectar tanto un cristal de cuarzo (con sus correspondientes condensadores) o una fuente de reloj externa.
  • Una señal de reloj llamada MCLK, que es la señal de reloj que utiliza  la CPU.
  • Otras dos señales de reloj ACLK y SMCLK, que utilizan los periféricos y la memoria flash.
En el siguiente esquema vemos el esquemático del módulo de reloj en más detalle.

Esquema reloj MSP430 (Unified Clock System)

Hay tres bloques principales, Por un lado, dentro del rectángulo verde tenemos las fuentes de reloj. Son las fuentes desde las que pueden alimentarse los tres relojes que ya hemos nombrado (MCLK, ACLK y SMCLK).

En el rectángulo amarillo está la lógica de selección (en realidad, parte de los multiplexores del rectángulo azul también pertenecen a esta sección), que permite conectar las fuentes de reloj a los tres relojes del sistema.

Por último, dentro del rectángulo azul están los relojes propiamente dichos. Además de los tres que ya hemos nombrado hay otro (MODCLK) que se utiliza en el conversor analógico-digital y que no vamos a tratar en este artículo.

Fuentes de reloj

Empezamos por las fuentes de reloj, que como vemos, está dividida en tres bloques.
  • El bloque OSC, que es donde se conecta la fuente de reloj externa XT1, que puede ser de alta frecuencia y de baja frecuencia (en el MSP430F5529 sólo puede ser de baja frecuencia).
  • El bloque FLL, que provee una fuente de reloj interna que puede estabilizarse usando una señal de reloj de referencia.
  • El bloque XT2 que permite obtener una fuente de reloj externa de alta frecuencia (no todos los modelos la tienen).
Como ya se ha dicho, es posible seleccionar qué fuente de reloj se conecta a las señales de reloj del sistema (recuadro azul). De esta forma, se puede ajustar de forma independiente qué frecuencia de reloj usará la CPU y los periféricos. Incluso podremos desconectar la CPU, los periféricos o ambos. Como veremos en un próximo artículo esta es la base de las configuraciones de bajo consumo.

Bloque OSC

Esta fuente de reloj está alimentada por un cristal o por una fuente de reloj externa conectada a los puertos XIN y OUT. Este bloque permite generar tres fuentes de reloj.
  • XT1CLK: Se pueden usar osciladores, cristales, o fuentes de reloj de baja frecuencia a 32768Hz o de alta frecuencia (entre 4Mhz y 32Mhz). En la placa que estamos usando para los ejemplos no se soporta el uso de señales de alta frecuencia (sólo de baja frecuencia).
  • VLOCLK: Oscilador interno de baja frecuencia (10Khz) y bajo consumo.
  • REFOCLK: Oscilador interno de baja frecuencia (32768Hz) que puede ser usado como referencia en el bloque FLL.
Podemos configurar esta fuente de reloj con los bits XT1BYPASS, XTS, XCAP y XT1DRIVE de los registros UCSCTL6 y UCSCTL7 (ver guía de usuario del MSP430 para más detalles).

Bloque XT2

Esta fuente de reloj también utiliza un cristal, un oscilador o una fuente de reloj externa. En este caso, sólo permite fuentes de alta frecuencia (4Mhz a 32Mhz). Genera una fuente de reloj llamada XT2CLK. La configuración de este bloque se lleva a cabo mediante los bits XT2BYPASS, XT2OFF y XT2DRIVE de los registros UCSCTL6 y UCSCTL7. Esta fuente de reloj se puede usar como referencia en el bloque FLL.

La descripción de los campos del registro UCSCTL6 es la siguiente.

Registro UCSCTL6_1
Registro UCSCTL6_2
Registro UCSCTL6_3

En cuanto al registro UCSCTL7, disponemos de los siguientes campos para controlar los bloques OSC y XT2.

Registro UCSCTL7_1
Registro UCSCTL7_2

Bloque FLL

Este bloque genera dos fuentes de reloj: DCOCLK y DCOCLKDIV. Se diferencian en que la segunda puede ser escalada mediante un divisor de frecuencia en el que se puede dividir la frecuencia entre 1, 2, 4, 8, 16 ó 32. Se trata de un oscilador interno controlado digitalmente. Esto quiere decir que puede ser estabilizado por el bloque FLL usando una señal de reloj externa que sea estable. La fuente DCOCLK puede ser configurada mediante los registros UCSCTL0 y UCSCTL1. El bloque FLL se puede configurar mediante los registros UCSCTL2 y UCSCTL3.

La descripción de los campos de los registros UCSCTL0 y UCSCTL1 que permiten configurar la fuente DCOCLK es la siguiente.

Registro UCSCTL0
Registro UCSCTL1

Mediante los registros UCSCTL2 y UCSCTL3 configuramos el bloque FLL.

Registro UCSCTL2
Registro UCSCTL3

Para establecer la frecuencia a la que funciona el oscilador DCO podemos modificar los valores de los bits DCORSELx, DCOx y MODx basandonos en la siguiente tabla

Frecuencias DCO

Señales de reloj

A partir de las fuentes de reloj que acabamos de ver, se generan las señales de reloj que gobiernan el microcontrolador.

ACLK (Auxiliary clock)

Esta señal es utilizada por los periféricos internos del microcontrolador, como los buses serie (I2C, SPI o UART), los timers, etc. Las fuentes de reloj que puede utilizar son XT1CLK, VLOCLK, REFOCLK, DCOCLK, DCOCLKDIV y XT2CLK. Mediante los bits SELA del registro UCSCTL4 podemos seleccionar la fuente y con los bits DIVPA y DIVA de UCSCTL5 podemos dividir la frecuencia del reloj entre 2, 4, 8, 16 y 32. (ver descripción de los registros UCSCTL4 y UCSCTL5 más abajo). Este reloj puede desactivarse activando el bit OSCOFF .

Al iniciar el microcontrolador (hablamos del MSP430F5529), la fuente de reloj de ACLK es XT1, a una frecuencia de 32768Hz.

MCLK (Master clock)

Es el reloj utilizado por la CPU. Mediante los bits SELM del registro UCSCTL4 podemos seleccionar la fuente y con los bits DIVM de UCSCTL5 podemos dividir la frecuencia del reloj entre 2, 4, 8, 16 y 32. Este reloj puede desactivarse activando el bit CPUOFF del registro de estado.

Al iniciar el microcontrolador, la fuente de reloj de MCLK es DCOCLKDIV, a una frecuencia de 1048576Hz.

SMCLK (Submain clock)

Es usado por la memoria flash. Las fuentes de reloj que puede utilizar son XT1CLK, VLOCLK, REFOCLK, DCOCLK, DCOCLKDIV y XT2CLK. Mediante los bits SELS del registro UCSCTL4 podemos seleccionar la fuente y con los bits DIVS de UCSCTL5 podemos dividir la frecuencia del reloj entre 2, 4, 8, 16 y 32. Este reloj puede desactivarse activando el bit SMCLKOFF del registro UCSCTL6.

Al iniciar el microcontrolador, la fuente de reloj de SMCLK es DCOCLKDIV, a una frecuencia de 1048576Hz.

Registro UCSCTL4_1
Registro UCSCTL4_2
Registro UCSCTL5_1
Registro UCSCTL5_2
Registro UCSCTL5_3

En el próximo artículo utilizaremos este módulo de reloj junto a los timers para generar eventos basados en tiempo y analizaremos un ejemplo de uso.

Comentarios

Entradas populares de este blog

Creando firmas de virus para ClamAV

ClamAv es un antivirus opensource y multiplataforma creado por Tomasz Kojm muy utilizado en los servidores de correo Linux. Este antivirus es desarrollado por la comunidad, y su utilidad práctica depende de que su base de datos de firmas sea lo suficientemente grande y actualizado. Para ello es necesario que voluntarios contribuyan activamente aportando firmas. El presente artículo pretende describir de manera sencilla cómo crear firmas de virus para ClamAV y contribuir con ellas a la comunidad.

Ingeniería inversa de un parche de Microsoft Windows

A estas alturas ya hemos asumido que la seguridad total en Internet es, cuanto menos, un mito. Ningún software está libre de vulnerabilidades, y por mucha auditoría, test de intrusión o pruebas de fuzzing que nos empeñemos en hacer, ninguna metodología puede demostrar sin lugar a dudas que un software es 100% seguro. Ante este panorama, hay dos tendencias mayoritarias a la hora de hacer públicas las vulnerabilidades. Por un lado, están los que piensan que cuando se descubre un fallo ha de hacerse público de forma inmediata. En este escenario, la publicación de una vulnerabilidad es el pistoletazo de salida para una carrera entre el desarrollador para sacar el parche y los "malos" para lograr explotarla. Esta política es conocida como full disclosure . Por otro lado, tenemos a los siguen una política responsible disclosure , que abogan por mantener la vulnerabilidad en secreto hasta la salida del parche por parte del desarrollador. Sin entrar en cuestiones filosóficas que no...

Manejo de grafos con NetworkX en Python

El aprendizaje computacional es un área de investigación que en los últimos años ha tenido un auge importante, sobre todo gracias al aprendizaje profundo (Deep Learning). Pero no todo son redes neuronales. Paralelamente a estas técnicas, más bien basadas en el aprendizaje de patrones, también hay un auge de otras técnicas, digamos, más basadas en el aprendizaje simbólico. Si echamos la vista algunos años atrás, podemos considerar que quizá, la promesa de la web semántica como gran base de conocimiento ha fracasado, pero no es tan así. Ha ido transmutándose y evolucionando hacia bases de conocimiento basadas en ontologías a partir de las cuales es posible obtener nuevo conocimiento. Es lo que llamamos razonamiento automático y empresas como Google ya lo utilizan para ofrecerte información adicional sobre tus búsquedas. Ellos lo llaman Grafos de Conocimiento o Knowledge Graphs . Gracias a estos grafos de conocimiento, Google puede ofrecerte información adicional sobre tu búsqueda, ad...