Vous êtes sur la page 1sur 10

Curso sobre Microcontroladores

Familia HC9S08 de Freescale

Por Ing. Daniel Di Lella – EduDevices – www.edudevices.com.ar


e-mail: info@edudevices.com.ar
Responsable Area Educación – ELKO / ARROW – www.elkonet.com
e-mail: ddilella@elkonet.com

Capítulo 1.

Continuación .... (entrega nº 3)

Set de Instrucciones.
El set de instrucciones de la familia HC9S08 (CPU HCS08) es esencialmente idéntico
al de la familia HC908, solo se agregan variantes de direccionamiento para las
instrucciones LDHX / STHX y la nueva instrucción BGND que permite al MCU
entrar al modo “BackGround” que es un modo muy poderoso utilizado para la
depuración de código en tiempo real y se ampliará la información en un capítulo
posterior.

Hay un total de 250 instrucciones disponibles en el HC9S08. Aquí solo se mostrará en


forma general un resumen de las mismas, quedando para el lector ampliar la
información consultando en el curso sobre HC908 (www.edudevices.com.ar ) o bien
en el manual de referencia de la familia HC9S08.
Un comentario aparte merecen las instrucciones WAIT y STOP.

La instrucción WAIT detiene la actividad del CPU al quitarle el clock (reloj) a este,
pero permite que todos los otros relojes sigan corriendo dentro del MCU. Al igual que
en la familia HC908, todos los periféricos restantes siguen con sus operaciones
normalmente, lo que permite una rápida respuesta ante interrupciones exteriores, pero
el consumo, si bien es reducido no es el menor de todos.

En la instrucción STOP, en cambio, se interrumpen todos los clocks internos. A


diferencia de la familia HC908 que posee un solo modo STOP, la familia HC9S08
posee múltiples modos STOP con distinto grado de consumo y operatividad según se
hayan configurado previamente algunos bits de ciertos registros, en un posterior
capítulo se verán estos modos de bajo consumo que constituyen unas de las claves de
esta familia para ser utilizadas en aplicaciones portátiles con consumos extremadamente
bajos.

Soporte de Interrupciones.

Como se ha mencionado en varios párrafos de este capítulo, la familia HC9S08


mantiene compatibilidad con la familia HC908 y es por ello que el esquema de
Soporte de Interrupciones es idéntico al de la familia HC908.
Modo de “apilado” y “Desapilado” de los registros principales del CPU HCS08.

Diferencias entre las familias HC908 y HC9S08.

Como se ha mencionado a lo largo de este capítulo, la familia HC9S08 es 100%


compatible con la familia HC908, pero la nueva familia HC9S08 incorpora nuevas
instrucciones y varias mejoras orientadas a aumentar la capacidad de procesamiento,
facilidad para realizar la emulación en tiempo real y finalmente mejorar la eficiencia en
la densidad de código.

A continuación, mencionaremos en forma resumida las diferencias:

• Nuevos modos de direccionamiento para la instrucción LDHX

- Indexado sin Offset (IX).


- Indexado con Offset de 8 Bits (IX1).
- Indexado con Offset de 16 Bits (IX2).
- Indexado con Post Incremento.
- Indexado con Offset de 8 Bits con Post Incremento.

Estos nuevos modos de direccionamiento ayudan a que el compilador mejore su


eficiencia de generación de código.
• Nuevos modos de direccionamiento para la instrucción STHX y CPHX.

- Modo de direccionamiento Extendido (EXT).


- Modo de direccionamiento Indexado utilizando el Stack Pointer con Offset
de 8 bits (SP1).

• Nueva instrucción BGND que permite “activar” el modo BDM (Background Debug
Module) para colocar al MCU en modo “Debug” que permite la emulación en
tiempo real, por medio de una simple instrucción dentro del código original del
usuario.

• Aumento de la velocidad de procesamiento por medio del aumento de la


frecuencia de reloj del CPU (40 MHZ) y del BUS (20 MHZ).

Gracias a la nueva tecnología CMOS que posee la familia HC9S08, el CPU HC9S08
puede “correr” a la velocidad de reloj de 40 MHZ y la frecuencia del Bus (FBUS) es la
mitad de dicha frecuencia, o sea, 20 MHZ, el lector debe tener en cuenta que en la
familia HC908, la frecuencia del oscilador principal era dividida por 4 para obtener así
Fbus = Fosc / 4. .
Esto permite que cada ciclo de instrucción se ejecute en tan solo 50 nanosegundos!!, y
si además tomamos en cuenta que en muchas instrucciones se han “achicado” la
cantidad de ciclos de máquina por instrucción, se logra una notable mejora con
respecto a la familia HC908, que puede llegar a ser 3X (3 veces más rápida) superior
en perfomance corriendo igual código.

Capítulo 2.

Módulos ICG / ICS –


Internal Clock Generator / Internal Clock Source.

Uno de los grandes cambios de la familia HC9S8 con respecto a la familia HC908 es el
módulo de generación de clock. Si bien en la familia HC908 se dispone de una gran
variedad de opciones de osciladores externos, internos, y del tipo R-C, la flexibilidad y
variedad de opciones que presenta la familia HC9S08 es muy grande dándole a este
módulo una gran importancia dentro del esquema de mejoras implementadas.

La sección generadora de Clocks (reloj) está compuesta por dos módulos, según el tipo
de dispositivo HC9S08 elegido:

• Internal Clock Generator (ICG) (Generador de Clocks Interno).


• Internal Clock Source (ICS) (Fuente de Clock Interna).
ICG (Generador de Clocks Interno).

• Cuatro modos de operación:

- Self Clock Mode (SCM) (Clock interno fijo).


- FLL Engaged Internal clock mode (FEI) (FLL Interno Enganchado).
- FLL Bypassed, External (FBE) clock mode (FLL puenteado, clock
Externo).
- FLL Engaged, External (FEE) clock mode (FLL enganchado con clock
Externo).

• En los modos FEI y SCM no se requieren componentes externos.


• Todos los modos son seleccionables por programa.
• El programa del usuario puede seleccionar los distintos modos en cualquier
momento.
• FBUS = ½ ICGOUT.

Diagrama en bloques del módulo ICG

El módulo ICG esta formado por 4 grandes bloques funcionales.

El bloque oscilador (OSC) permite que el usuario pueda conectar un cristal o resonador
externo con el módulo ICG. El usuario por programa puede seleccionar entre un cristal
de baja frecuencia (rango entre 32 a 100 KHZ) o un cristal de alta frecuencia (rango
entre 1 a 16 MHZ) utilizando las líneas externas OSC1 y OSC2 para conectar el cristal
y su circuito asociado. También este bloque permite que ingrese una señal externa
conectada a la línea OSC1 proveniente de un oscilador implementado en forma externa
(hasta 40 MHZ) en el sistema.
Para mayor flexibilidad, se puede configurar el bloque oscilador (OSC) para operar en
modo “baja potencia” o modo “Alta amplitud”.

El reloj interno de referencia incluye una fuente de reloj de 8 MHZ , que puede
seleccionarse como reloj de referencia para el módulo BDC (Background Debug
Controller) y permitir así cierta independencia de dicho módulo de la frecuencia de
Bus utilizada en el proyecto. Además incluye un reloj de 243 KHZ el cuál puede ser
ajustado para lograr una mayor precisión y obtener así una fuente confiable de muy bajo
costo.

El bloque de FLL (Frecuency Loop lock) (Oscilador por enganche de Frecuencia)


toma la fuente de reloj interna o externa y multiplica ella a un valor más alto.

Finalmente, el bloque de selección de reloj permite conmutar las diferentes frecuencias


de reloj al sistema, distribuyéndolo en el.

Las señales presentes son, ICGOUT la cuál es la frecuencia de salida del módulo ICG y
constituye la frecuencia de referencia del BUS (FBUS = ½ ICGOUT), ICGERCLK,
la cuál es la frecuencia de referencia desde el cristal o fuente de reloj externa y la señal
FEE (habilitación de frecuencia fija) la cuál controla el sistema de frecuencia fija de
reloj.

La señal ICGCLK es una fuente de reloj de 8 MHZ generada por el bloque fuente de
referencia interna que se utiliza para el módulo BDC (Backgraund Debug Controller).

SCM (Self Clock Module) (Clock Interno Fijo).


• Es el modo por defecto luego de que el MCU sale del RESET.
• Rápido arranque del oscilador a 4 MHZ de FBUS sin programación del usuario.
• No se requiere conexión externa alguna.
• Las líneas del oscilador pueden usarse como I/O grales.
• No ajustable, pero puede modificarse escribiendo en el registro ICGFLT.
• Tiene la menor precisión de todos los osciladores disponibles.
• Consumo de potencia medio (menor que en los modos FEI o FFE).

El SCM es el oscilador por defecto del módulo ICG y está disponible tan pronto como
el MCU sale del reset. Este oscilador no requiere de ajustes, y si bien puede ajustarse
por medio de la escritura del registro ICGFLT no es recomendable hacerlo sin un
profundo conocimiento del funcionamiento del oscilador.
FEI - FLL Engaged Internal clock mode (FLL Interno Enganchado).

• FOUT = (243KHZ / 7) x 64 x N / R
• N = 4 a 18 en incrementos de 2.
• R = 1 a 128 en potencia de 2.
• El oscilador de referencia (243KHZ) es ajustable en +/- 25% con una precisión del
0,5% en todo el rango de temperatura de trabajo.
• Se puede programar la indicación de la perdida del enganche del FLL para que
genere un RESET o una interrupción.
• Las líneas del oscilador pueden utilizarse como I/O generales.
• No se necesitan componentes externos.
• El consumo de energía es superior al modo SCM.

El modo FEI es otro modo de oscilador interno disponible en el módulo ICG.


Este modo está basado en un oscilador interno de baja frecuencia (243 Khz) que ingresa
como señal de referencia al FLL (Oscilador por Enganche de Frecuencia) y es
multiplicado en frecuencia hasta alcanzar la frecuencia final de salida FOUT.

El valor “N” es el factor de multiplicación entre 4 y 18 en incrementos de 2 y el valor


“R” es el divisor de frecuencia reducida (RFD) entre 1 a 128 en potencias de 2. Ambos
valores pueden programarse por medio del ICG Control Register 2.

El reloj de referencia de baja frecuencia es ajustable en +/- 25% por medio de dos
registros (ICGTRIM / FTRIM) ubicados dentro del mapa de memoria de RAM y
todos los chips de la familia HC9S08 poseen valores de calibración de fábrica en 2
posiciones de memoria FLASH que pueden ser re – escritos o borrados por el programa
del usuario. Estos valores de fábrica en FLASH, pueden copiarse en los registros de
ajuste del oscilador de referencia para lograr que el oscilador quede ajustado dentro del
rango de +/- 0,5%. También, el entorno integrado CodeWarrior, junto con las
herramientas disponibles para la familia HC9S08 (USBMULTILINKBDME,
R(S)_POD, etc.) poseen mecanismos automáticos de ajuste de la frecuencia que
escriben los valores correctos de ajuste en las posiciones de FLASH reservadas desde
fábrica. De esta forma, el usuario no necesita conocer los valores de calibración de
fábrica, ya que el sistema contempla la calibración automática.

El FLL puede programarse para que la indicación de “sistema en frecuencia” (lock


bit) sea por interrupción o disparando un reset.

Al igual que en el modo SCM, cuando se utiliza el modo FEI, las líneas del oscilador
pueden utilizarse como líneas I/O de uso general.
FBE (FLL Bypassed External clock) (Oscilador Externo con FLL
puenteado).

• Se puede conectar Cristal Externo o Resonador en los pines OSC1 / OSC2.


• Se pueden conectar cristales de baja frecuencia de 32Khz a 100Khz.
• Se pueden conectar cristales de alta frecuencia de 1 Mhz a 16 Mhz.
• Se puede ingresar con un oscilador externo por pin OSC1 (DC a 40 Mhz).
• Frecuencia de Bus = Referencia Externa / (2 x RFD)
• El Sistema de Reloj de más alta precisión (la da la referencia externa).
• La más baja energía consumida.

Al igual que en el modo SCM, el modo FBE no utiliza el bloque del FLL para
multiplicar la frecuencia de reloj externa. Este modo permite que puedan emplearse
cristales de baja (32 a 100Khz) y de alta frecuencia (1 a 16 Mhz) conectados a los pines
OSC1 / OSC2 del MCU. También este modo permite ingresar desde el exterior con un
oscilador externo desde DC a 40 Mhz por el pin OSC1.
Cuando se utiliza un cristal externo o resonador, se debe tener especial cuidado de
poner en “1” el bit REFS en el ICG Control Register 1. Este bit debe permanecer
en “0” cuando se utiliza un oscilador externo, ya que no hay un tema de “ganancias
de lazo” en juego para los circuitos osciladores y si solo se requiere no exceder la
frecuencia de entrada a un máximo de 40 Mhz.

La frecuencia de salida ICGOUT es igual a la frecuencia de referencia dividido por


valor RFD (el cual está especificado en el registro ICG Control Register 2) multiplicado
por 2. De esta manera, por ejemplo, si tenemos una frecuencia de referencia externa de
20 MHZ y el valor de RFD es igual a “1”, entonces la frecuencia del BUS (FBUS) será
igual a 10 Mhz.

El modo FBE es el más preciso de todos los modos disponibles en el módulo ICG de los
HC9S08 y su precisión solo está limitada a la precisión del oscilador externo utilizado
como referencia. También este modo es el de más bajo consumo de todos, ya que al no
utilizar el FLL este módulo no consume y con ello se logra un ahorro considerable de
energía.

FEE (FLL Engaged, External (FEE) clock mode (FLL enganchado con
clock Externo).

• Rango de frecuencia externa de referencia:


- Baja Frecuencia = 32Khz a 100Khz , FOUT = Fext x 64 x N / R.
- Alta Frecuencia = 2 a 10 Mhz, FOUT = Fext x N / R.
- N = 4 a 18, en incrementos de 2.
- R = 1 a 128 en potencias de 2.
• Este modo posee alta precisión, no tanto como con la fuente externa solo.
• Al usar el FLL cuando se “desengancha” el programa puede avisar por interrupción
o por reset.
• El consumo de energía puede ser mayor o menor al modo FEI según la referencia
utilizada (alta o baja frecuencia).
Continuará.......

Nota de Redacción: El lector puede descargar este capítulo y capítulos anteriores del
curso desde la sección “Artículos” (Curso_HC9S08) en el sitio web de EduDevices
(www.edudevices.com.ar )