Download Microcontrolador_MC68HC9089AP16

Document related concepts
no text concepts found
Transcript
Microcontrolador
MC68HC908AP16
Prof. Julián R. Camargo
Características del AP16
• Frecuencia de operación interna de 8 MHz a 5v o 3v
• Opciones de oscilador de entrada: RC, cristal de 1 a 16
MHz, PLL operando con cristal de 32KHz y oscilador de
1 a 32MHz.
• Memoria flash de programa de 16K bytes y memoria
RAM de 1024 bytes
• 2 Timers (TIM1 y TIM2) de 16 bits, con 2 canales cada
uno configurables como entrada de captura, salida por
comparación o PWM
• Módulo de base de tiempo (TBM), opera como reloj de
tiempo real con cristal de 32KHz
• Módulo de comunicaciones seriales SCI de propósito
general (SCI1)
• Módulo de comunicaciones seriales SCI con
decodificador de IR (Infrarrojo) (SCI2)
• Módulo de comunicaciones serial sincrónico (SPI)
• Módulo de comunicaciones I2C
• Conversor Analógico/Digital (ADC) de 10 canales con 10
bits de resolución
• Interrupciones externas IRQ1 e IRQ2 (para
encapsulados de 44 y 48 pines)
• 32 pines de entrada/salida configurables (30 pines para
la versión de 42 pines)
• Pin de reset maestro y power-on reset con resistencia
de pull-up interna
• Modos de bajo consumo de energia WAIT y STOP
• Módulos de protección COP (Watchdog), LVI, Opcode
Ilegal y dirección Ilegal
• Encapsulados de 42 (SDIP), 44(QFP) y 48(LQFP) pines
• Compatible con Familia HC05
Características de la CPU08:
• Arquitectura Von Neuman clásica de 8 bits ampliamente utilizada en
el mundo de los microcontroladores y microprocesadores.
• CPU del tipo cerrado (single chip).
• Modelo de programación similar al de la familia HC05 pero
reforzado (el set de instrucciones aumenta en 78 con respecto a la
familia HC05).
• 16 modos de direccionamiento (ocho más que la familia HC05).
• Lectura anticipada del código de operación (Opcode) por sistema de
prebúsqueda de instrucciones (Instruction Prefetch) lo que implica
que no hay ciclos de espera haciendo mas rápida la ejecución de
las instrucciones.
• Registro apuntador de pila de 16 bits para manejo de instrucciones
de manipulación de pila.
• Registro índice (H:X) de 16 bits.
• Mapa de memoria de 64KB.
• Movimiento de datos entre posiciones de memoria sin utilizar el
registro Acumulador (direccionamiento de memoria a memoria).
• Instrucción de multiplicación rápida de 8 bits * 8 bits.
• Instrucción de división rápida de 16bits/8bits.
• Instrucciones para manejo de estructuras cíclicas.
• Soporte para lenguaje de alto nivel como el C
Distribución de pines
• Puerto A: PTA0-PTA7
ADC0 –ADC7 (ADC)
• Puerto B: PTB0-PTB7
SDA-SCL (I2C)
TxD-RxD (SCI1)
T1CH0-T1CH1 (TIM1)
T2CH0-T2CH1 (TIM2)
• Puerto C: PTC2-PTC7
MISO-MOSI-SS-SPSCK (SPI)
SCTxD-SCRxD (SCI2)
• Puerto D: PTDO-PTD7
KBI0-KBI7 (KBD)
• VREFH-VREFL (Vref. ADC)
• OSC1-OSC2 (Oscilador)
Diagrama de Bloques
Mapa de Memoria del AP16
0x0000
Registros
I/O
(96 Bytes)
0x005F
0x0060
0x00FF
0x0100
Página Directa [0x0000 - 0x00FF]
(Código Rápido y Eficiente)
RAM
(1,024 Bytes)
SP (dir 0x00FF)
0x045F
Zona NO
Implementada
0x0860
Memoria
FLASH
( 16,384 Bytes)
Memoria de Programa [0x0860 - 0x485F]
0x485F
Zona NO
Implementada
0xFC00
Monitor ROM 2
0xFE00
Registros de Control
Programa Monitor (de Fábrica)
0xFE10
Monitor ROM 1
0xFFD0
Vectores ISR
(48 Bytes)
0xFFFF
Vectores de Interrupción [0xFFD0 - 0xFFFF]
Arquitectura de la CPU08
• La CPU08 es el núcleo principal de los
microcontroladores de la familia HC08, es una versión
mejorada de la CPU05 alma de la familia de
microcontroladores HC05.
• Dentro de la estructura interna de un miembro de la
familia HC08, el módulo de la CPU se vincula con el
resto de los módulos del microcontrolador por medio de
un Bus de Datos interno de 8 bits y un Bus de
Direcciones de 16 bits, que le permiten direccionar
código de hasta 64K bytes. La CPU08 es del tipo cerrado
(single chip) por lo que no se tiene acceso a los buses
internos de la misma.
• La CPU08 contiene un “opcode” con un mecanismo de
pre-búsqueda hacia delante con lo que se incrementa el
rendimiento por la eliminación de ciclos muertos (ciclos
de espera) en el bus. El flujo de instrucciones de la
CPU08 fue desarrollado para ser tan eficiente como sea
posible en una estructura del tipo “pipeline”.
Registros de la CPU
• Todos los miembros de la familia HC08 manejan 5
registros asociados a la CPU del microcontrolador, estos
registros no hacen parte del mapa de memoria, sino que
están asociados directamente a la CPU del
microcontrolador.
La función de estos registros es la de interactuar entre la
CPU y la memoria y todos los periféricos del
microcontrolador.
• Registro Acumulador (A):
Es un registro de propósito general de 8 bits utilizado en
la mayoría de las instrucciones aritméticas y lógicas y en
muchas operaciones de transferencia de datos con la
memoria. El contenido del registro es indefinido
después del power-on reset y no cambia luego de un
reset en el microcontrolador.
• Registro Indice (HX):
Registro de 16 bits utilizado para el direccionamiento
indexado de la memoria. Puede ser utilizado como dos
registros individuales de 8 bits H y X que son utilizados
en instrucciones aritméticas de multiplicación y división y
también para transferencia de datos con memoria,
aunque el registro H esta limitado. El contenido del
registro es indefinido en la parte baja (X) y cero en la
parte alta (H) después del power-on reset o en general
después de cualquier fuente de reset.
• Registro Apuntador de pila (SP):
Registro de 16 bits utilizado para apuntar a la siguiente
dirección de memoria disponible en la pila del
microcontrolador. También es utilizado en algunos
modos de direccionamiento indexado. El contenido del
registro es 0x00FF después del power-on reset o en
general después de cualquier fuente de reset.
• Registro Contador de Programa (PC):
Registro-Contador de 16 bits utilizado para direccionar la
memoria de programa almacenando la siguiente
dirección de memoria del código que será ejecutado.
Normalmente el PC es incrementado secuencialmente
de acuerdo a la cantidad de bytes del código de
operación de la instrucción que se está ejecutando, en
las instrucciones de bifurcación o salto funciona como
un registro al que se le carga la dirección de destino de
la bifurcación o del salto. Después del power-on reset o
en general después de cualquier fuente de reset el PC
es cargado con el vector de reset ubicado en las
direcciones de memoria 0xFFFE y 0xFFFF, en este
vector se guarda la dirección de inicio del programa que
se va a ejecutar.
• Registro de Condiciones de Código (CCR):
Registro de 8 bits (también conocido como registro de
banderas), cada bit es utilizado como bandera que indica el
resultado de una operación determinada, la familia HC08
maneja 5 banderas que indican estados de la instrucción recién
ejecutada y un bit o bandera de máscara de interrupción.
b7 b6 b5 b4 b3 b2 b1 b0
Reset:
V
1
1
H
I
N
Z
C
X
1
1
X
1
X
X
X
C: Bandera de Acarreo (Carry) o Préstamo (Borrow)
Esta bandera indica si se generó acarreo o préstamo en el bit 7
del resultado de una operación aritmética de suma o resta.
También es modificada por operaciones de desplazamiento y
rotación.
0 = No hay Acarreo/Préstamo de salida en el bit 7 del resultado
1 = Acarreo/Préstamo de salida en el bit 7 del resultado
Z: Bandera de Cero
Esta bandera indica cuando el resultado de una operación aritmética,
lógica o de manipulación de datos es 00H.
0 = Resultado diferente de cero
1 = Resultado igual a cero
N: Negativo
Esta bandera indica el signo (negativo o positivo) del resultado (7 bit)
de una operación aritmética, lógica o de manipulación de datos.
0 = Resultado (signo) Positivo
1 = Resultado (signo) Negativo
I: Máscara de Interrupción
Bit encargado de la habilitación/deshabilitación global de las
interrupciones enmascarables del microcontrolador. Cuando se genera
una interrupción de forma automática el bit se hace 1 al finalizarla
vuelve nuevamente a 0.
0 = Interrupciones habilitadas
1= Interrupciones deshabilitadas (valor por defecto)
H: Bandera de Acarreo Intermedio
Esta bandera indica si hay acarreo entre el bit 3 y 4 del
Resultado después de una operación aritmética de suma.
La bandera es utilizada en operaciones en BCD.
0 = No hay Acarreo entre los bits 3 y 4 del resultado
1 = Acarreo entre los bits 3 y 4 del resultado
V: Bandera de desbordamiento (overflow )
Se hace 1 si una operación aritmética con signo (suma o
resta) se ha desbordado. Utilizada en verificación de
operaciones aritméticas con signo.
0 = No hay desbordamiento
1 = Hay desbordamiento
Interrupciones del AP16
•
•
•
Una interrupción se considera como una señal del
hardware o una instrucción del software del
microcontrolador que obliga a la CPU a detener la
ejecución del programa que se esta ejecutando (programa
principal) para ejecutar una rutina o procedimiento que se
considera como prioritaria y cuya ejecución debe realizarse
en el instante en que se hace la solicitud.
Además de la ejecución inmediata de la rutina, las
interrupciones eliminan las consultas (polling) de periféricos
lo que elimina ciclos de interrogación de periféricos y
permite la atención inmediata del periférico que lo solicite
haciendo el programa principal más ágil.
Las interrupciones por hardware pueden ser internas o
externas. Las interrupciones internas son generadas por
periféricos internos del microcontrolador como por ejemplo
temporizadores, las interrupciones externas son generadas
por periféricos del microcontrolador que tienen contacto con
el exterior como por ejemplo un puerto de comunicaciones
serie asincrónico.
• En la mayoría de microcontroladores la o las
interrupciones soportadas tienen una tabla donde se
almacena la dirección de memoria donde se ubica la
rutina para atender la interrupción, a esta tabla se le
denomina tabla de vectores de interrupción.
• En la familia HC08 las interrupciones pueden ser
generadas por software o por hardware. La mayoría de
periféricos tienen la capacidad de generar
interrupciones.
• Todas las interrupciones por hardware de los
microcontroladores de la familia HC08 de Freescale ya
sean internas o externas pueden ser habilitadas o
deshabilitadas por el usuario en cualquier momento por
lo que se consideran como interrupciones
enmascarables (maskable), la interrupción por software
(la instrucción SWI) no es deshabilitable de ninguna
manera por lo que se define como una interrupción no
enmascarable (non-maskable).
• En el proceso de atención a una interrupción de un
microcontrolador de la familia HC08 de Freescale se
generan siempre una serie de procesos automáticos que
tienen como finalidad proteger la información del
programa principal e impedir que una interrupción
genere otra interrupción cuando se esta ejecutando una
rutina de interrupción, es decir, impide que una
interrupción interrumpa a otra.
• La secuencia que se sigue para atender una interrupción
es la siguiente:
- Guarda en la pila los registros: contador de programa
(PC), X, Acumulador y CCR en ese orden (el registro H
no es guardado en la pila para mantener la
compatibilidad con la familia HC05)
- Se deshabilita la bandera I haciéndose ‘1’
- Se transfiere al registro contador de programa (PC) el
contenido del vector de interrupción correspondiente.
• Una interrupción es reconocida durante el último ciclo de
la instrucción que se esta ejecutando actualmente en el
programa principal (no importa si es una subrutina), a
menos que ingrese durante el último ciclo, entonces
será reconocida durante el último ciclo de la siguiente
instrucción, esto implica que una interrupción jamás
podrá detener la ejecución de una instrucción que
actualmente se este ejecutando.
• La instrucción RTI es la última instrucción que se ejecuta
en la rutina de interrupción causando que se recuperen
los contenidos de los registros de la pila (PC, X, A,
CCR). Cargándose así en el registro contador de
programa el valor que fue previamente guardado en la
pila (dirección de la siguiente instrucción a ejecutar) y el
proceso continúa en el programa principal desde donde
salió antes de la interrupción.
Eventos de interrupción en el AP16
• Base de Tiempo: Interrupción por overflow del TBM
• Final de Trasmisión del SCI2: Interrupción generada
cuando el registro de transmisión serial del SCI2 esta
vacío.
• Receptor Serial del SCI2 lleno: Interrupción generada al
recibir un dato por medio de la interfaz serial SCI2.
• Error en Recepción del SCI2: Interrupción generada por
causa de algún error detectado en SCI2, ya sea por
error de overrun (Overrun Error), error de ruido (Noise
Error), error de formato (Framing Error), error de paridad
(Parity Error).
• Trasmisor Serial del SPI vacío: Interrupción generada la
finalizar la trasmisión de un dato por el SPI.
• Receptor Serial del SPI lleno: Interrupción generada por
recepción de dato por el SPI.
• Final de conversión del ADC: Interrupción generada al
finalizar una conversión del ADC.
• Interrupción del Modulo de Teclado: Genera interrupción
por cambio en alguno de los pines del Puerto D (KBI)
del microcontrolador.
• Final de Trasmisión del SCI1: Interrupción generada
cuando el registro de transmisión serial del SCI1 esta
vacío.
• Receptor Serial del SCI1 lleno: Interrupción generada al
recibir un dato por medio de la interfaz serial SCI1.
• Error en Recepción del SCI1: Interrupción generada por
causa de algún error detectado en SCI1, ya sea por
error de overrun, error de ruido, error de formato, error
de paridad.
• Interrupción del Módulo Serial I2C: Genera interrupción
por trasmisión, recepción, perdida de arbitración o
ausencia de recepción de acknoledge del modulo I2C.
• Overflow del TIM2: Genera interrupción cada vez que el
temporizador TIM2 pasa de su valor máximo a cero.
• Canal 1 del Temporizador Timer 2
• Canal 0 del Temporizador Timer 2
• Canal 1 del Temporizador Timer 1
• Canal 0 del Temporizador Timer 1
Cada una de estas fuentes de interrupción genera
interrupción cuando se presenta alguno de los eventos
configurados para cada uno de los canales, ya sea:
Entrada por Captura, Salida por Comparación o PWM.
• Overflow del TIM1: Genera interrupción cada vez que el
temporizador TIM1 pasa de su valor máximo a cero.
• Oscilador PLL: Genera interrupción cuando la frecuencia
generada por el circuito oscilador pierde su valor
programado o cuando al iniciar el PLL se llega a la
frecuencia programada.
• Pin Externo IRQ1: Interrupción generada cada vez que
el pin IRQ1 cambia de estado.