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.