Capítulo 2 Montaje y descripción de la entrenadora basada en microcontrolador Motorola 68331 placa el 2.1 Antecedentes Durante el curso 1999/2000, el Departamento de Ingeniería Electrónica pone en marcha una experiencia docente relacionada con la asignatura de Laboratorio de Sistemas Electrónicos Digitales que consiste en facilitar a aquellos alumnos que lo deseen la posibilidad de adquirir a un prototipo de placa entrenadora basada en el Microcontrolador Motorola 68331. Con esta iniciativa se da la oportunidad de proponer el desarrollo de una práctica especial a los alumnos que, con una especial motivación, desean hacer algo diferente. La placa entrenadora de bajo coste permite trasladar el laboratorio a la casa del alumno disponiendo así de una potente herramienta con la que desarrollar de forma autónoma multitud de aplicaciones. La placa entrenadora, de fibra de vidrio, con unas dimensiones de 205 x 110 mm. tiene soldado el microcontrolador en su parte central. El MC68331 es de aspecto cuadrado disponiendo de 33 terminales en cada lado para sumar un total de 132. Alrededor de éste se encuentran perforados 136 agujeros que conectan con los 132 terminales del Micro. El resto de la placa también se encuentra perforada para poder insertar terminales de “wire-wrapping”. El montaje de la placa entrenadora es una tarea bastante laboriosa. Para el ensamblaje de todos los subsistemas necesarios para el funcionamiento del entrenador se siguieron las instrucciones facilitadas por el fabricante Motorola (“An Introducción to the MC68332”, by Sharon Darley, Mark Maiolani, and Charles Melear -1995). El primer prototipo fue montado por Tomás Palacios Gutiérrez quien redactó un documento con unas primeras instrucciones de montaje. Éstas sirvieron de base para perfeccionar el prototipo y confeccionar posteriores instrucciones de montaje. 1 2.2 Instrucciones de montaje El prototipo completo puede considerarse que está formado por nueve subsistemas o módulos más simples que pueden ser ensamblados y probados independientemente. De esta forma podemos organizar el montaje en una serie de pasos que nos permitan garantizar que el proceso de ensamblado del prototipo completo se realiza correctamente, detectando los errores que pudieran cometerse mediante pruebas intermedias. Los diferentes pasos a seguir se relacionan a continuación: 1) Microcontrolador. 2) Regulador de tensión. 3) Replanteo general del circuito. 4) Circuito de reloj. 5) Filtros de reloj de sistema. 6) Circuito de configuración del micro. 7) Reset del sistema. 8) Resistencias de pull-up. 9) Alimentación del microcontrolador. 10) Prueba de funcionamiento. 11) Comunicación BDM (Background Debug Mode). 12) Memoria. 13) Comunicación serie. 2 Figura 1 – Croquis de montaje de los elementos de la placa. 2.2.1 Microcontrolador Lo primero que haremos será colocar las tiras de “wrapping” en las conexiones del micro. Podemos observar que cada banda de la placa tiene dos filas con 17 perforaciones. Como el micro sólo tiene 33 patillas por banda, uno de los extremos de la banda más exterior no tiene conexión con el micro. Para una mejor localización futura de los pines cortaremos una tira de 17 y otra de 16 pines y las insertaremos en su lugar cuidando de dejar libre el agujero sin conexión. Empezaremos soldando un terminal de cada extremo de la tira para que se sujete y después seguiremos soldando todos y cada uno de los 33 pines para asegurar el contacto eléctrico con el micro. A la hora de soldar se recomienda que se tenga cuidado de no sobrecalentar el micro. Si observamos que está muy caliente, esperar unos minutos a que se enfríe. Como recomendación, se puede soldar cada vez un pin del extremo opuesto para que el calor se disipe mejor. Cabe comentar que una persona entrenada en la soldadura puede soldar todas las patillas del tirón sin calentar peligrosamente el micro. Repetiremos la operación en cada una de las tres bandas restantes. 3 2.2.2 Regulador de tensión Toda la electrónica del prototipo precisa ser alimentada a 5 voltios. Para ello se utilizará un regulador L7805 que se conectará según el esquema adjunto. Comenzar el montaje con los bornes, luego se montarán los condensadores C1 y C2 y finalmente el L7805 en las posiciones indicadas en el croquis. Al tratarse del circuito de alimentación que va a tener que soportar toda la corriente del sistema, se recomienda soldar los cuatro componentes y realizar las conexiones con cable más grueso para evitar caídas de tensión. Conectar la salida de tensión regulada y la masa a las líneas de alimentación que se encuentran en ambos laterales de la placa. Para obtener una mejor inmunidad al ruido, conectar la masa a las tiras interiores. En el croquis aparecen en negro la masa y en rojo las líneas de alimentación. No debemos olvidarnos de colocar y conectar las dos tiras cortas que aparecen junto al Microcontrolador que están dispuestas para distribuir la alimentación de éste y sobre las cuales se van a colocar tres condensadores, C13, C14 y C15, que van a proporcionar, por su proximidad al procesador, un mejor filtrado de la alimentación. El primero (C13 - 33F.) es un condensador electrolítico adecuado para el filtrado de baja frecuencia, el segundo es cerámico (C14 - 22nF.) para el filtrado de las altas frecuencias y el tercero de plástico (C15 – 100nF.) para las frecuencias medias. Con esta disposición se conseguirá una mejor inmunidad al ruido de alimentación. En el montaje aparecen dos condensadores electrolíticos, C1 y C13, con los que deberá ponerse especial cuidado con la polaridad para no dañarlos y evitar que puedan reventar. Figura 2 – Esquema de conexión del regulador de tensión. En ningún caso deberemos conectar las líneas de alimentación del micro, ya que primero deberá probarse el correcto funcionamiento del regulador. Por último se recomienda alimentar los bornes de entrada con una tensión de entre 8 y 10 voltios y se medirá en las líneas de alimentación los 5 voltios que debe proporcionar el regulador. 4 Para todas las pruebas iniciales es recomendable utilizar una fuente que permita limitar la corriente de salida. Se puede limitar la corriente máxima a 150 mA. (máximo 200 mA.). En caso de no disponer de una fuente de estas características se deberá colocar un fusible de entre 150 y 200 mA. en la entrada de alimentación, siendo recomendable dejarlo de forma permanente, de este modo, en caso de producirse un cortocircuito accidental el prototipo estará protegido siempre. 2.2.3 Replanteo general del circuito Antes de proseguir con el montaje de los siguientes módulos es interesante realizar un replanteo de todos los componentes sobre la placa con el fin de garantizar que todos caben conforme al croquis. Esto facilitará mucho el montaje ya que las instrucciones existentes se refieren a esta colocación. Las tiras correspondientes a los diferentes circuitos integrados se pueden cortar e insertar en el lugar que les corresponde. En esta fase de replanteo no se recomienda soldar las tiras ya que para el montaje del circuito de reloj, del filtro y del circuito de reset puede venir bien desmontar las tiras de alrededor para poder soldar con más facilidad. 2.2.4 Circuito de reloj El sistema de generación de reloj del MC68331 es un tanto peculiar. Utiliza un oscilador Pierce, también conocido como oscilador resonante paralelo, externo con una frecuencia de 32.768 Hz. Esta frecuencia de referencia es multiplicada por un factor que va desde 4 hasta 640, en función del valor escrito en el registro SYNCR, generando una frecuencia de reloj que puede llegar hasta los 20.972 Khz., aunque, en principio, se va a trabajar a 8.389 Khz. El circuito oscilador es muy sensible a la suciedad, grasa y otros restos materiales sobre el circuito impreso que puedan modificar la conductividad entre las conexiones, por no hablar de soldaduras o contactos deficientes. Cualquiera de estos problemas van a provocar que el circuito no oscile. La longitud de las pistas, cableados, disposición de los componentes, etc. introducen efectos resistivos y capacitivos que pueden alterar el correcto funcionamiento del oscilador. 5 Por todos estos motivos se recomienda la colocación del oscilador lo más próximo posible a las conexiones del micro y que se suelden los componentes al circuito impreso para garantizar un buen contacto eléctrico. Para la conexión de los componentes se recomienda colocarlos según el croquis de la figura 1 y siguiendo el esquema de la figura 3. Figura 3 – Esquema de conexión del oscilador de cuarzo. 2.2.5 Filtros de reloj del sistema El circuito del apartado anterior junto con la electrónica interna conforma un sintetizador PLL (Phase Lock Loop) de frecuencia. Para garantizar la estabilidad y un adecuado rendimiento del PLL es necesario incorporar tan próximo a los terminales del microcontrolador como sea posible el circuito de filtro capacitivo de la figura. Para su montaje síganse el croquis y el esquema adjuntos. Figura 4 – Red de filtrado del reloj del sistema. 6 2.2.6 Circuito de configuración del micro El microcontrolador MC68331 dispone de diversos modos de funcionamiento que pueden ser configurados durante la secuencia de reset. Para ello se dispone de 13 microinterruptores que permiten configurar los diferentes modos. Durante la secuencia de reset deberán aplicarse las señales seleccionadas con los microinterruptores a los terminales de configuración del micro y después deberán quedar en estado de alta impedancia para permitir que éstos realicen su función normal. En el prototipo se han montado dos grupos de ocho microinterruptores con los que se podrán seleccionar los diferentes modos. Como sólo hay trece señales, tres de ellos quedan sin uso. En la tabla adjunta se indica el número de microinterruptor, el pin sobre el que actúa y la función del mismo dependiendo de la selección realizada. Durante la secuencia de reset se configuran tanto las opciones de funcionamiento del micro como la función de aquellos pines que pueden realizar dos funciones alternativas. Microinterruptor Pin de selección Función cuando está en posición de +5V Función cuando está en posición de 0V 1 DATA0 2 DATA1 3 DATA2 4 5 6 7 8 1’ DATA3 DATA4 DATA5 DATA6 DATA7 DATA8 El microcontrolador funciona con un bus de memoria de 8 bits. #BR #BG #BGACK FC0 FC1 FC2 ADDR19 ADDR[20:19] ADDR[21:19] ADDR[22:19] ADDR[23:19] PORTE como puerto de entrada/salida 2’ DATA9 El microcontrolador funciona con un bus de memoria de 16 bits. #CS0 #CS1 #CS2 #CS3 #CS4 #CS5 #CS6 #CS[7:6] #CS[8:6] #CS[9:6] #CS[10:6] #DSACK0, #DSACK1, #AVEC, #DS, #AS, #SIZE #IRQ[7:1], MODCLK 4’ 6’ 8’ PORTF como puerto de entrada/salida DATA11 Modo esclavo desactivado Modo esclavo activado MODCLK VCO = Reloj del sistema EXTAL = Reloj del sistema #BKPT Modo de depuración Modo de depuración desactivado activado Tabla 1 – Modos de configuración del micro. 7 El significado de cada una de estas funciones se deja para un desarrollo posterior en el capítulo dedicado a la puesta en marcha y nos centraremos en la electrónica que va a permitir esta selección y en su montaje. La base de funcionamiento del circuito de configuración se halla en el circuito integrado 74HC244. Se trata de un buffer de 8 entradas y 8 salidas con dos señales de activación (enable), una por cada cuatro salidas, que permiten desactivarlas dejándolas en estado de alta impedancia. Durante el reset se activará el buffer y las señales de configuración estarán disponibles en las respectivas patillas del micro y, una vez finalizado, los buffer quedarán en estado de alta impedancia permitiendo el funcionamiento normal del microcontrolador. Las señales, 0 voltios o 5 voltios, que se aplican a la entrada del buffer se configuran con los microinterruptores. El esquema de conexión es el siguiente: Figura 5 – Circuito de configuración del micro. 2.2.7 Reset del sistema La generación de la señal de RESET en la línea parece una tarea bastante sencilla. Sin embargo, conforme han ido adquiriendo mayor complejidad los microprocesadores, las líneas de reset bidireccionales se han convertido en algo común. Éstas permiten que el microprocesador pueda reiniciar dispositivos externos. Una línea bidireccional va 8 gobernada por un transistor en colector abierto, por lo que se debe colocar a nivel lógico 1 mediante una resistencia de 820 (resistencia de pull-up). Cuando se usa el sintetizador PLL interno para generar la señal de reloj, como es el caso que nos ocupa, el RESET funciona de la siguiente forma: Durante el encendido el microcontrolador pone el pin de RESET a nivel bajo. Una vez que el PLL se estabiliza, libera la señal de reset y, si en un periodo inferior a dos ciclos de reloj, el pin de RESET alcanza el nivel alto, el microcontrolador da por hecho que se trata de un reset de arranque. En caso contrario el micro considera que se trata de un reset externo y pone a nivel bajo el pin de reset durante 512 ciclos de reloj, tras los cuales, si se alcanza el nivel alto en el pin de RESET en el intervalo de 10 ciclos, se inicia la ejecución del programa. El prototipo cuenta con un circuito de reset evolucionado que incluye un dispositivo inhibidor (MC34064) que mantiene la señal de reset a nivel bajo hasta que la alimentación se estabiliza por encima del umbral de VT = 4,6 V. Con esto se evita que el micro entre en un estado indeterminado debido a un fallo de alimentación. El circuito debería implementarse con una puerta AND con salida en colector abierto como las que contiene el integrado 74LS09. Con el fin de optimizar el número de circuitos integrados se utiliza, en su lugar, una puerta NAND sin uso del integrado 74HC00 montado para el circuito de configuración del micro junto con un inversor en colector abierto implementado con un transistor BC547. 9 Figura 6 – Circuito de reset. Una vez montado podemos proceder a su prueba. Para ello conectaremos la fuente sin olvidarnos de ajustar el limitador de corriente previamente. Se medirá la tensión en el terminal de #RESET que deberá ser de +5 voltios. Después se comprobará que al apretar el pulsador la tensión pasa a valer 0 voltios. En caso de no funcionar correctamente se repasarán de nuevo las conexiones y en caso de no detectarse ningún error se repetirán los pasos anteriores pero midiendo ahora en la salida de la puerta NAND. En este caso la tensión en reposo debe ser de 0 voltios y al pulsar toma el valor de 5 voltios. Si no es correcto se comprobarán los valores de las entradas y si lo es se comprobará que se ha conectado correctamente la resistencia de pull-up de 820 , y el circuito MC34064. 2.2.8 Resistencias de pull-up Varios terminales del microcontrolador necesitan resistencias de pull-up para determinar su tensión en estado de reposo. Así se evita que puedan tomar valores indeterminados que provoquen un mal funcionamiento. En general todas las entradas deberán tener un estado conocido. Para esta operación se utilizarán dos arrays de resistencias de 10 K que se conectarán a un punto de alimentación a 5 voltios. Para ello se conectará a 5 voltios el extremo común, normalmente señalado con un punto. Hay cuatro terminales que ya disponen de las resistencias de pull-up y que son: Nº terminal 1 56 2 68 Denominación #BKPT/DSCLK #RESET 3 4 Nº terminal 78 79 Denominación PF0/#MODCLK R/#W Tabla 2 – Terminales que ya tienen conectadas las resistencias de pull-up. 10 Por lo tanto sólo quedan por conectar los siguientes terminales: 1 2 3 4 5 6 7 Nº terminal 57 69 70 71 72 73 74 Denominación TSC #HALT #BERR PF7/#IRQ7 PF6/#IRQ6 PF5/#IRQ5 PF4/#IRQ4 8 9 10 11 12 13 14 Nº terminal 75 76 77 87 88 89 113 Denominación PF3/#IRQ3 PF2/#IRQ2 PF1/#IRQ1 PE2/#AVEC PE1/#DSACK1 PE0/#DSACK0 #BR/#CS0 Tabla 3 – Terminales pendientes de conectar las resistencias de pull-up. 2.2.9 Alimentación del microcontrolador La conexión de la alimentación es el último paso a seguir para que el sistema funcione de una forma muy básica. Esta operación es muy sencilla y tan sólo deberemos conectar los 15 terminales de masa (VSS) y los 14 de alimentación a 5 voltios (VDD). Para la conexión deberemos recordar que existen dos tiras cortas próximas al terminal número 1 del microcontrolador con el fin de que todas las líneas de alimentación del micro estén referenciadas a un único punto. Además se obtiene, de esta manera, una mayor inmunidad al ruido. Los terminales que se deberán conectar se relacionan en la siguiente tabla: VSS 2 VDD 11 12 19 20 25 26 37 35 47 48 61 54 72 62 84 74 86 82 89 91 107 120 128 134 109 121 135 144 Tabla 4 – Terminales de alimentación del micro. 2.2.10 Prueba de funcionamiento Una vez concluido el paso anterior la placa entrenadora está lista para la primera prueba. Lo primero que se hará será revisar que la limitación de corriente de la fuente está regulada a un valor inferior a los 200 mA., preferiblemente 150 mA. En caso de no disponer de una fuente con limitación de corriente, asegurarse de haber colocado un fusible calibrado a 150 mA. en serie con la línea de alimentación. Antes de conectar la alimentación se deberán colocar todos los microinterruptores en posición OFF (5 V.) a excepción del 8’ que se pondrá en posición ON (0 V.) para activar el modo de depuración BDM. En cualquier caso, para esta prueba inicial sólo es estrictamente imprescindible que los microinterruptores 4’ y 6’ estén en posición OFF. 11 Conectaremos la alimentación, observando el amperímetro para apagar rápidamente si vemos que el consumo es elevado. Si las conexiones están bien hechas, tras un pico inicial de corriente durante el arranque, ésta se estabilizará en torno a los 50 o 70 mA. A continuación mediremos con el osciloscopio la señal de reloj. Primero colocaremos la sonda en el terminal XTAL y deberemos observar la onda cuadrada a 32Khz. del reloj que hemos montado. Luego la colocaremos en el terminal CLKOUT y deberá aparecer la señal de reloj a 8 Mhz. generada por el sintetizador PLL del sistema. Si la corriente es excesiva, seguramente habrá un cortocircuito o una conexión mal hecha. Inevitablemente habrá que repasar de nuevo el conexionado y buscar un posible cortocircuito. En el caso de que no aparezca la señal de reloj, comprobar que: El microinterrruptor 6’ está en posición OFF, ya que con él se configura el funcionamiento del sintetizador. La señal de reset está a 5 voltios. Las conexiones del circuito de reloj son correctas. Si no existe un error aparente habría que pensar en la posibilidad de que el cristal de cuarzo se haya deteriorado durante el proceso de soldado. 2.2.11 Comunicación BDM (Background Debug Mode) El modo de depuración en segundo plano (BDM) es un modo de funcionamiento especial del microcontrolador que permite que otro ordenador tome el control del micro. Se trata de una herramienta muy útil para la depuración. Durante la operación en segundo plano, la ejecución normal de instrucciones es suspendida, y el microcódigo ejecuta las instrucciones internas de depuración bajo el control de una máquina externa. La interfaz de comunicación BDM es relativamente sencilla de realizar. El mayor inconveniente reside en el uso de un conector de 26 terminales soldado sobre la placa que no permite “wrappinar” el cable y por tanto se deberá soldar con el máximo cuidado posible. En la figura 7 se muestra el esquema de conexión. La disposición de los diferentes componentes se debe consultar en la figura 1. 12 Figura 7 – Circuito interfaz para la comunicación BDM. Una vez acabado el circuito de comunicación se deberá montar el cable. Para la conexión a la placa se ha utilizado un conector de 26 terminales y en el extremo del ordenador se utilizará un conector de 25 terminales (DB25) para su conexión al puerto paralelo. Para ello utilizaremos cable plano y conectores de presión. Para el montaje se deberá quitar uno de los hilos del cable, ya que sobra, y se deberá prestar especial atención en que queden interconectados entre si los terminales número 1 de ambos conectores. Para ello obsérvese que el primer hilo del cable lleva marcas distintivas. Una vez montado el cable, se conectará a la placa y al puerto paralelo del ordenador. Se encenderá la alimentación observando de nuevo que la corriente consumida se encuentre dentro de los límites antes comentados. Para probar el funcionamiento se cargará bajo entorno MSDOS el programa TEST32.EXE. No es aconsejable trabajar en una ventana de Windows, por lo que se deberá salir de Windows y trabajar directamente en MSDOS. Una vez en MSDOS, escribiremos TEST32 en la consola y aparecerá el mensaje: Test Program for CPU32 Background Mode Drivers Available LPT Ports: <1> Please select Printer Port: Seleccionaremos el puerto de impresora al que se ha conectado el circuito y que normalmente será el primero (1). A continuación nos solicitará que indiquemos la velocidad de conexión. Normalmente deberá funcionar con un valor de 50. En caso de no funcionar podremos ir probando con otros valores mayores dentro del rango que indica el programa. 13 Please select Clock DELAY (0-20000): 50 Port 1 Initialized at Speed 50 Resetting Target MCU to enable BDM Enter Command DHMRSQ('H' for Help): En este momento todo está preparado para introducir un comando y verificar la comunicación BDM. Pulsando la tecla H obtendremos una breve explicación sobre la función de cada comando: Help for TEST (CPU32 Target) B: Begin Program Execution from Reset D: Dump Target MCU Registers P: Modify Target MCU Register PC H: Print This Help Summary L: Load S-Record File into Target F: Memory Hex/ASCII Fill M: Memory Hex/ASCII Display R: Hardware Reset Target MCU T: Communications TEST U: MCU Status S: Single Step Target MCU O: Stop Target MCU G: Run Target MCU E: edit a file using QEDIT A: Assemble file V: go to DOS K: insert breaKpoint I: delete breakpoInt Q: Quit back to DOS Para probar el funcionamiento teclearemos ‘D’ + intro. En la pantalla deberá aparecer un listado con los valores contenidos en los distintos registros del microcontrolador (no todos deben valer cero). Si el programa no ha dado ningún mensaje de error la comunicación está funcionando correctamente. Si por el contrario aparece el mensaje “error en las comunicaciones” se desconectará la placa y se revisarán todas las conexiones de nuevo ya que lo más fácil es que se trate de un error en alguna conexión. 14 2.2.12 Memoria El MC68331 puede trabajar con un bus de datos tanto de 8 como de 16 bits. El uso de un bus de 8 bits simplifica el diseño y reduce el coste, pero implica una importante penalización en el rendimiento que será tanto mayor cuantos más accesos haya a memoria. En el prototipo que estamos montando utilizaremos un bus de datos de 16 bits que permite una mayor velocidad de transferencia de datos. Se utilizarán dos chips de memoria RAM del tipo HY62256B con una capacidad de 32K x 8 bits conectados en paralelo para obtener un bus de datos de 32K x 16 bits. Los terminales de direcciones de ambos chips de memoria se “wrappinarán” en paralelo. Los terminales A0 de la memoria se conectarán al terminal de direcciones A1 del microcontrolador y así sucesivamente hasta los terminales A14 que se conectarán al A15 del micro. El terminal A0 del micro se dejará sin conectar. Los pins de datos (D0-D7) de una de las memorias se conectarán a los homónimos del microcontrolador y los de la otra a los terminales D8-D15 del microcontrolador. La señal chip enable (CE) será generada por el terminal CSBOOT del MC68331. Con el objeto de eliminar ruidos en la alimentación, especialmente cuando se trabaja a altas frecuencias, es muy recomendable conectar un condensador de 100 nF en paralelo con la alimentación de cada chip de memoria. Una vez finalizado este montaje será posible la carga de programas en memoria para su ejecución. Sólo queda, por tanto, probar el correcto funcionamiento de esta parte. Para ello repetiremos la secuencia del paso anterior. Se encenderá la fuente de alimentación cuidando de que no exista ningún cortocircuito, se arrancará el programa TEST32.EXE y después de seleccionar el puerto paralelo al que se haya conectado la placa y la velocidad de comunicación de 50 se quedará a la espera de la introducción de comandos. Test Program for CPU32 Background Mode Drivers Available LPT Ports: <1> Please select Printer Port: 1 + intro Please select Clock DELAY (0-20000): 50 + intro Port 1 Initialized at Speed 50 15 Resetting Target MCU to enable BDM Enter Command DHMRSQ('H' for Help): Si escribimos “m + intro” se obtendrá una lectura del contenido de la memoria. Para ello se deberá indicar la dirección de inicio y el programa mostrará en pantalla los 256 bytes siguientes a la dirección indicada. En caso de que se produzca algún error deberán revisarse todas las conexiones y, en especial, la alimentación. 2.2.13 Comunicación serie Cuando se emprenda la realización de este paso, ya se tendrá la placa entrenadora basada en el microcontrolador 68331 funcionando correctamente. Por ello en este último apartado únicamente se instalará el módulo de adaptación de niveles para las comunicaciones serie mediante el protocolo RS232. La parte más importante de este subsistema es el chip MAX232, que permite adaptar los niveles de tensión de 0 y 5V del microcontrolador, a los establecidos por la norma RS232 (entre –15 y 15V). Curiosamente, gracias a los distintos condensadores que se añaden al sistema, el chip MAX232 sólo necesita ser alimentado con 5V, aunque sea capaz de dar una tensión mayor a su salida. Se debe conectar el circuito de la figura: Figura 8 – Circuito interfaz para la comunicación serie. 16 El punto donde más errores se suelen cometer es en la polaridad de los distintos condensadores electrolíticos y en la identificación de cada uno de los pines del chip MAX232. Por tanto, se debe prestar especial atención a estos dos aspectos. Junto con el subsistema de adaptación de niveles desarrollado en la placa entrenadora, se debe realizar también un cable de “módem nulo” que permita la conexión de la placa al ordenador mediante el protocolo RS-232. Figura 9 – Vista general de placa entrenadora. 17 Figura 10 – Detalle del conexionado con wire-wrapping. Figura 11 – Detalle del montaje de la placa. 18 2.3 Descripción de funcionamiento El funcionamiento del sistema viene determinado por el funcionamiento de los cuatro subsistemas que lo componen y que son: 2.3.1 Módulo de Integración de Sistemas: SIM (System Integration Module). Temporizador de Propósito General: GPT (General Purpose Timer). Unidad Central de Proceso: CPU 32 (Central Processing Unit – 32 bits). Módulo de Comunicaciones Serie: QSM (Queued Serial Module). Módulo de integración de sistemas (SIM) Para la integración de los subsistemas CPU32, GPT y QSM en un único circuito VLSI ha sido necesario que el fabricante incorpore un módulo especialmente diseñado para este fin. Así como al diseñar un sistema electrónico digital basado en un microprocesador necesitaremos añadir no sólo memoria o periféricos, sino también circuitos de reloj, de reset, de arbitraje de las interrupciones o una lógica de selección de direcciones, de la misma manera el microcontrolador MC68331 cuenta con un módulo de integración de sistemas denominado SIM que realiza todas estas funciones y algunas otras adicionales. Las funciones básicas que realiza el SIM son: 1. Generar la señal de reloj que comparten todos los módulos del micro. Dicha señal de reloj puede ser generada con un sintetizador PLL interno a partir de una señal de referencia externa, o bien tomada directamente de una fuente exterior. 2. Proporcionar señales de chip-select configurables, que permitan añadir memoria y nuevos periféricos al sistema sin tener que recurrir a circuitería externa para la lógica de direcciones, con el consiguiente ahorro de espacio en la placa de circuito impreso. 3. Servir de interface entre el espacio de direcciones interno (registros) y el externo (memoria externa) conectados a través del bus intermodular (InterModule Bus), así como arbitrar la generación de interrupciones simultáneas (Interrupt Arbitration). 19 4. Permitir la configuración y protección general del sistema: para ello contiene submódulos de supervisión interna (Bus Monitor, Halt Monitor, Spurious Interrupt Monitor) y de supervisión del código en ejecución (Software Watchdog Monitor). Por medio de estos bloques, podremos reiniciar el microcontrolador en caso de que se detecten ciertos problemas (o bien tratarlos si ello es posible). Además de esto, proporciona un nuevo submódulo: un reloj de tiempo real (Periodic Interrupt Timer), capaz de generar interrupciones periódicas. El conjunto de todos estos submódulos forma la interfaz del bus externo (External Bus Interface). 5. Incorporar circuitos que permitan la depuración de nuevos programas en desarrollo sin tener que recurrir al puerto serie y a un programa monitor (Background Debug Mode) y la verificación del funcionamiento del microcontrolador cuando todavía se encuentra en fábrica (System Test Block). Ofrecer varios puertos de Entrada/Salida (ports E, F y C), que sólo estarán disponibles si lo permite la configuración de la funcionalidad anterior. Por ejemplo: si no empleamos todas las señales externas de chip-select, podremos emplear las no asignadas como parte de un puerto denominado C. 2.3.1.1 Terminales del SIM Las señales externas o terminales del microcontrolador que tienen relación, de una u otra manera, con el SIM son: CS[0..10]#, CSBOOT#: proporcionan los chip-selects. ADDR[0..18], SIZ[0..1], AS#, DS#, RMC#, AVEC#, DSACK[0..1]#, DATA[0..7], R/W#, RESET#, HALT#, BERR#, IRQ[0..7]#: componen el EBI, que permite el arbitraje de interrupciones y el control del bus externo. MODCLK, CLKOUT, XTAL, EXTAL, XFC, VDDSYN: permiten sintetizar y distribuir la señal de reloj. TSC/TSTME# y FREEZE/QOUT: proporcionan al fabricante la posibilidad de probar el correcto funcionamiento el microcontrolador. 20 2.3.1.2 Subsistema de configuración y protección El submódulo de configuración y protección permite realizar las siguientes funciones: 2.3.1.2.1 Ubicación de los registros en memoria. Un importante parámetro que es posible configurar en el 68331 es la situación (mapping) de los 4-Kbytes del bloque de registros de propósito específico disponibles en el microcontrolador. El bit MM (Module Mapping) del registro de configuración del SIM (SIMCR) determina qué posiciones ocupan los registros en el mapa de memoria general del sistema: Bit MM 0 1 Zona ocupada del mapa de memoria $7FF000-$7FFFFF $FFF000-$FFFFFF Tabla 5 – Opciones de ubicación de los registros en el mapa de memoria. Después del reset, el bit MM se inicializa con un 1. 2.3.1.2.2 Configuración tras el Reset Durante la secuencia de arranque del micro se produce la configuración del sistema. Para ello el microcontrolador realiza la lectura de los valores existentes en los terminales MODCLK, #BKPT, DATA[0..9] y DATA11 a fin de determinar cómo quiere el usuario configurar el sistema. Entre las opciones de configuración que se pueden determinar están: Qué chip-selects están activos: existen 3 grupos de terminales de chipselect que, alternativamente pueden funcionar como terminales de función de la CPU32 (FC[0..2]), como terminales destinados a compartir el bus (#BR, #BG y #BGACK) o como terminales del bus de direcciones (ADDR[19..23]). Qué puertos adicionales están disponibles: dado que el número de terminales disponibles (132 en la versión utilizada) es inferior al número de señales que pueden ser manejadas, algunos terminales son compartidos por dos o más señales, de modo que durante el reset se deberá determinar la función sacrificando unas en favor de las otras. Por ejemplo, el puerto E compartesus terminales con las señales de los buses 21 de datos y direcciones (SIZ[0..1], #AS, #DS, #AVEC y #DSACK[0..1]). Aunque estos terminales son fundamentales en cualquier sistema basado en un microprocesador como el MC68000 (cuya unidad central de proceso es muy similar a la CPU32), la disponibilidad de chip-selects programables, reduce su interés en el caso del 68331 (excepto en sistemas grandes o complejos). Si se va a funcionar o no en modo verificación (Test Mode). Si se habilita o deshabilita la depuración en segundo plano (Background Debug Mode). Las diferentes posibilidades de configuración se resumen en la tabla 1 (Apartado 2.6). 2.3.1.2.3 Arbitraje de interrupciones Los distintos módulos del 68331 que pueden solicitar interrupciones a la CPU32 tienen un campo para el arbitraje de interrupciones (IARB) donde se indica el nivel de prioridad. Dado que el SIM también puede solicitar interrupciones, en SIMCR existe un campo denominado IARB, que contiene su prioridad. En el caso de peticiones simultaneas de interrupción, el SIM arbitra las mismas atendiendo a la prioridad indicada en los diferentes campos IARB y las del mismo nivel se atienden por contienda. Al salir del Reset, el IARB del SIMCR toma el valor $F (máxima prioridad). Si un módulo cuyo IARB es $0 solicita una interrupción, no sólo no es atendida sino que se genera una excepción por interrupción espúrea. 2.3.1.2.4 Supervisión del bus externo durante trasferencias internas Los 2 bits del campo SHEN del registro SIMCR de configuración del SIM controlan el comportamiento del bus externo durante las transferencias de datos internas (por ejemplo, al mover datos entre registros de los módulos que componen el 68331). Tras el Reset, #AS y #DS permanecen en alta impedancia durante los ciclos internos, habilitando que sea un dispositivo exterior al 68331 quien controle el bus externo y haciendo que los ciclos internos sean invisibles desde fuera del microcontrolador. También se puede configurar que el ciclo interno sea visible y que los terminales #DS y DATA[0..15] reflejen el flujo de datos en el bus interno (aunque #AS permanezca en 22 alta impedancia para impedir que este flujo interno afecte a dispositivos externos como, por ejemplo, la memoria). SHEN 00 01 10 Ciclos Internos Invisibles desde el exterior Visibles Visibles 11 Invisibles Arbitraje externo Habilitado Deshabilitado Habilitado Habilitado, pero una petición de bus detiene la transferencia interna Tabla 6 – Comportamiento del bus externo durante las transferencias. 2.3.1.2.5 Modo Verificación en fábrica. El bit SLVEN del SIMCR refleja el estado de DATA11 durante el Reset, o sea, nos permite consultar si estamos o no trabajando en el modo de verificación de fábrica (permite que el fabricante compruebe el correcto funcionamiento del micro). 2.3.1.2.6 Accesibilidad de los registros del SIM El bit SUPV del SIMCR coloca los registros globales del SIM en el mapa de memoria del supervisor (cuando SUPV=1) o en el de usuario (cuando SPUV=0). En el caso de encontrarse en el espacio de datos del supervisor, sólo se pondrá acceder a los registros estando la CPU32 funcionando en modo supervisor. De esta manera un sistema operativo puede impedir que los programas ejecutándose en modo usuario puedan reconfigurar partes esenciales del SIM y del sistema. 2.3.1.2.7 Causa del último Reset El registro de sólo lectura RSR guarda la causa del último Reset producido. Contiene un bit por cada una de las 7 posibles causas, pudiéndose poner a 1 varios de estos bits en el caso de simultaneidad de causas. Dichas causas pueden ser: Fuente externa: el terminal #RESET ha sido activado por un dispositivo externo durante al menos 520 ciclos de reloj. Encendido del micro (Power-On Reset). Supervisor SW (Software Watchdog), que ha provocado un reset por un error en el funcionamiento o en el diseño del programa. Supervisor de parada (Halt Monitor): interviene cuando se produce un fallo doble de bus (Double Bus Fault), o cuando se activa la señal #HALT. 23 Pérdida de la señal de referencia de reloj (Loss of Clock). Ejecución de la instrucción de RESET. Submódulo de Verificación (Test Submodule): usado por el fabricante. 2.3.1.2.8 Supervisión del Bus Interno El funcionamiento asíncrono del bus de la CPU32 obliga a la existencia de señales de reconocimiento y confirmación (acknowledge) de datos y autovectores. Cada vez que se realiza una transferencia usando el bus interno, el SIM comprueba que se cumplen las restricciones máximas en cuanto a tiempo de respuesta. Si las señales DSACK# o AVEC# tardan demasiado en llegar, el SIM activa el terminal BERR# del 68331. El campo BMT de 2 bits que se encuentra en el registro de control de protección del sistema (SYPCR), permite definir cuál es el tiempo máximo de espera: BMT 00 01 10 11 Tiempo máximo de espera 64 ciclos de reloj 32 ciclos de reloj 16 ciclos de reloj 8 ciclos de reloj Tabla 7 – Tiempo de espera de las señales de reconocimiento antes de generar un error de bus. Al salir del Reset el tiempo está configurado en 64 ciclos de reloj de espera máxima. 2.3.1.2.9 Supervisión de Parada (Halt) La activación de la señal #HALT del 68331 provoca la entrada en funcionamiento del supervisor de parada (siempre y cuando dicha intervención esté habilitada en el bit HME del SYPCR), y el consiguiente Reset del sistema. También interviene este supervisor cuando se produce un fallo doble de bus (Double Bus Fault). 2.3.1.2.10 Supervisión de interrupciones espúreas Si el arbitraje de interrupciones no se llega a resolver (debido a que el correspondiente campo IARB del módulo que ha provocado la interrupción es igual a 0 y, por lo tanto, no está habilitado), el supervisor de interrupciones espúreas (Spurious Interrupt Monitor) provoca la activación de la señal #BERR y un Reset del sistema. Esta supervisión no se puede deshabilitar. 24 2.3.1.2.11 Supervisión SW El bit SWE del registro de control de protección SYPCR habilita o deshabilita la supervisión de programas en ejecución (Software WatchDog). En caso de estar habilitada dicha supervisión, el programa que se está ejecutando deberá, regularmente, ejecutar la siguiente secuencia: Escribir un $55 en el registro SWSR. Escribir un $AA en el registro SWSR. En caso de no ejecutarse estas instrucciones en el tiempo preestablecido, si se halla habilitado el supervisor, éste interpretará que el programa está mal diseñado o que se ha producido un bloqueo o una entrada en algún bucle infinito y provocará un Reset del microcontrolador. El plazo de tiempo disponible depende de los valores de los campos SWP y SWT del SYPCR: SWP 0 0 0 0 1 1 1 1 SWT 00 01 10 11 00 01 10 11 Ciclos de reloj 2 elevado a 9 2 elevado a 11 2 elevado a 13 2 elevado a 15 2 elevado a 18 2 elevado a 20 2 elevado a 22 2 elevado a 24 Tabla 8 – Tiempo de actualización de las escrituras del watchdog. Tras el Reset, SWP adopta el valor negado del terminal MODCLK durante el Reset (si la fuente de reloj es externa, SWP contendrá un 1; contendrá un 0 en caso contrario). 2.3.1.2.12 Interrupciones periódicas: el PIT El SIM incluye un temporizador (el PIT) capaz de provocar interrupciones periódicas. Estas interrupciones se usan para controlar tareas críticas en el tiempo y que deben de ejecutarse con gran regularidad o bien que han de respetar unos plazos máximos en cuanto a su tiempo de respuesta. El periodo de generación de esta interrupción viene fijado por la señal EXTAL (reloj externo o de referencia) y el valor del registro de configuración del temporizador de interrupciones periódicas (PITR). Este registro contiene el bit PTP con el que se 25 selecciona un preescalado de 4 (PTP=0) o de 2048 (PTP=1); también contiene el campo de 8 bits, PITM, cuyo valor multiplicado por el preescalado determina la frecuencia del PIT. Tras el reset, el bit PTP adopta el valor contrario a la señal MODCLK (si la fuente de reloj es externa, PTP contendrá un 1; contendrá un 0 en caso contrario). Para calcular la frecuencia a la que interrumpirá el SIM, aplicaremos la siguiente fórmula: Frecuencia del PIT=Frecuencia EXTAL/(PITM * Preescalado). La frecuencia máxima de funcionamiento será por tanto la frecuencia EXTAL dividida por 4 y se producirá si PITM contiene un 1 y PTP contiene un 0. La frecuencia mínima será EXTAL/522.240 y se producirá cuando el PITM contenga su valor máximo ($FF) y apliquemos el mayor preescalado (PTP=1). Si el reloj externo es 32,768 KHz., el periodo de interrupción podrá variar entre un máximo de 15,93 s. y un mínimo de 122 s. Las interrupciones periódicas se habilitan en función del valor contenido en los tres registros siguientes: 1. SR o registro de estado de la CPU32: los bits de máscara de interrupción IP deben contener un valor que permita las interrupciones del PIT. 2. SIMCR o registro de configuración del SIM: su campo IARB debe contener un valor de arbitraje mayor que 0. 3. PICR o registro de control del PIT, que contiene 2 campos relevantes: El campo PIRQL, que debe contener un nivel de interrupción asignado al PIT que esté habilitado por la máscara de interrupción del SR (PIRQL>IP) El campo PIV debe contener el número del vector de interrupción con el que deseamos que sea atendido el PIT (un valor entre $40 y $FF, los valores posibles para un vector de usuario en la CPU32). 26 Por lo tanto, el PIT estará habilitado y en condiciones de interrumpir correctamente si IARB>0, PIRQL>IP o PIRQL=7 y PIV>=$40. 2.3.1.2.13 Funcionamiento en bajo consumo Cuando la CPU32 ejecuta la instrucción LPSTOP, se desactivan los supervisores de bus, de parada y de interrupciones espúreas, y se para el supervisor software (si bien no se pone a cero su contador). Para salir de este estado de bajo consumo y baja funcionalidad, se ha de producir una interrupción habilitada (por ejemplo, un reset, una interrupción externa o una interrupción del PIT que cumpla las condiciones antes señaladas). El bit STSIM del SYNCR (registro de control del sintetizador de reloj) determina si durante el estado de bajo consumo el SIM utiliza una fuente de reloj externa (STSIM = 0) o interna (STSIM = 1). Un programa cuyo funcionamiento básico sea la atención a interrupciones externas puede tener una rutina principal que, tras la inicialización, se quede en modo de bajo consumo esperando la aparición de una interrupción que atender. 2.3.1.2.14 Funcionamiento durante la depuración Si el sistema externo que controla la depuración en segundo plano activa la señal FREEZE y dicha depuración está permitida, el SIM se ve afectado de la siguiente manera: Los supervisores de parada y de interrupciones espúreas continúan funcionando con normalidad, pudiendo provocar un reset en caso de detectar algún fallo. El supervisor de bus se deshabilita si así lo indica el bit FRZBM del SIMCR (si contiene un 1). El supervisor de SW se deshabilita si así lo indica el bit FRZSW del SIMCR (si contiene un 1). De esta manera durante la parada por depuración paso a paso, podremos deshabilitar el supervisor de SW que podría provocar un reset no deseado. 27 2.3.1.3 Reloj del sistema Una de las funciones más importantes del SIM es la generación y distribución de la señal de reloj que emplearán todos los módulos del microcontrolador. Para ello, el SIM nos ofrece 2 alternativas: o bien generar la señal de reloj sintetizándola internamente a partir de una señal de referencia externa, o bien usar directamente una fuente externa de reloj. La señal de referencia presenta la ventaja de ser una señal de menor frecuencia (más fácil de generar). 2.3.1.3.1 Reloj del sistema externo Si mantenemos a nivel bajo el terminal MODCLK durante el reset y proporcionamos una señal de reloj en el terminal EXTAL (dejando flotante el terminal XTAL), el SIM distribuirá (eso sí, a través de un buffer interno) dicha señal de reloj a lo largo del sistema. La frecuencia de esta señal de reloj vendrá limitada por la frecuencia máxima recomendada por el fabricante para cada integrado (16 MHz, 20 MHz o 25 MHz). Para cada circuito integrado que compremos, el fabricante nos garantiza que funcionará correctamente por debajo de esa frecuencia máxima. 2.3.1.3.2 Reloj de referencia externo Si mantenemos a nivel alto el terminal MODCLK durante el reset y proporcionamos una señal de reloj de referencia entre los terminales EXTAL y XTAL, se activará el PLL interno (Phase Lock Loop) que sintetiza una señal de reloj del sistema configurable por medio de los campos X (1 bit), W (1 bit) e Y (6 bits) del registro SYNCR. La relación entre ambas señales de reloj viene fijada por las ecuaciones: Frecuencia del sistema = frecuencia de referencia * [4*(Y + 1)*2(2 * W + X)], en el caso que nos ocupa utilizamos una señal de referencia de 32,768 Khz. No se debe forzar una frecuencia del sistema superior a la recomendada por el fabricante. Los terminales XFC y VDDSYN, permiten incorporar un filtro capacitivo para eliminar armónicos de la señal de reloj del sistema cuando usemos una referencia externa. 28 2.3.1.3.3 Generación de reloj para un bus externo síncrono Al igual que el MC68000 y por compatibilidad con los periféricos síncronos del 6800, el 68331 proporciona una señal de reloj ECLK que permite a la CPU32 sincronizarse con dichos periféricos. Si el campo CSPA1 del registro CSPAR1 contiene 00, ECLK estará habilitado y disponible. Su frecuencia de trabajo vendrá determinada por el bit EDIV del SYNCR, pudiendo ser la frecuencia del sistema dividida por 8 (EDIV =0) o por 16 (EDIV =1). 2.3.1.3.4 Generación de reloj en bajo consumo Durante los ciclos de funcionamiento en bajo consumo, los bits STSIM y STEXT del registro SYNCR determinan qué señal de reloj está disponible para hacer funcionar el SIM o los dispositivos externos. Si el bit STEXT está a 0 durante el tiempo de bajo consumo, la señal CLKOUT no proporcionará reloj alguno al sistema digital basado en el microcontrolador. 2.3.1.3.5 Supervisión del reloj de referencia Si el supervisor de reloj detecta la pérdida de la señal de referencia puede provocar dos situaciones, dependiendo de cómo esté configurado el bit RSTEN del SYNCR: Si RSTEN vale 1, provocará inmediatamente un reset. Si RSTEN vale 0, adoptará una frecuencia de reloj del sistema denominada limp mode (cojera, renqueo), inferior en todo caso a la frecuencia máxima del sistema. El bit SLIMP del SYNCR refleja si el sistema está operando en modo limp (SLIMP =1) o no (SLIMP =0). 2.3.1.4 Interfaz del bus externo asíncrono: EBI Además de controlar el bus interno, el SIM se encarga de proporcionar las señales que permiten la comunicación con dispositivos (memoria o periféricos) externos al microcontrolador. El interfaz del bus del MC68000 constaba de un bus de datos DATA de 16 bits, un bus de direcciones ADDR de 24 bits, dos señales de validación de datos #UDS y #LDS, una señal de validación de direcciones #AS, un terminal de lectura/escritura R/#W, tres señales de códigos de función FC, una señal #DTACK de confirmación de fin del ciclo 29 de bus, #BERR que indicaba error de bus durante una trasferencia, la señal de parada #HALT y una señal #AVEC que indica al micro que la interrupción solicitada es autovectorizada. Las señales de tamaño de bus SIZ permiten definir si la transferencia de datos a través de DATA es de 8, 16 o 32 bits. 2.3.1.4.1 Temporización del bus externo Las operaciones de acceso a registros internos del microcontrolador vienen a durar dos ciclos de reloj. Si interviene el bus externo, su duración mínima será de 3 ciclos ya que los ciclos de lectura o escritura se componen de 6 estados de medio ciclo de reloj cada uno. Además de los ciclos ordinarios de lectura y escritura, la ejecución de la instrucción TAS (que de un modo indivisible pone a uno el bit 7 de una posición del mapa de memoria), provoca una secuencia especial de ciclos que facilita la implantación de mecanismo de semáforos en sistemas multiprocesador con compartición de memoria. 2.3.1.4.2 Tamaño dinámico del bus de datos El bus de datos permite realizar transferencias de 1, 2 o 4 bytes entre el micro y una memoria o periférico externos de 8 o 16 bits, reflejando a través de SIZ cuántos bytes quedan por transferir para completar el ciclo. Un ciclo en el que se transfieran una anchura de datos superior a la anchura de DATA (16 bits) o del periférico o memoria implicados, supondrá varios subciclos de lectura o escritura como los descritos en el apartado anterior. A lo largo de estos subciclos el contenido de SIZ irá decreciendo. El dispositivo externo deberá confirmar a través de DSACK# el fin del subciclo en curso. Un dispositivo de 16 bits se conectará a todo el bus DATA[15..0], mientras que un periférico de 8 bits lo hará al byte alto DATA[15..8]. En una transferencia de una anchura superior a la del bus DATA o la del periférico o la memoria implicados, primero se transferirán los bytes más significativos y, posteriormente, los menos significativos. Los tipos de transferencias posibles se resumen en la siguiente tabla: 30 Tipos de transferencia. SIZ[0:1] ADDR DSACK[1: De <origen> a <puerto o memoria de 0 0] destino> De 8 bits a 8 bits en dirección par 01 0 10 De 8 bits a 8 bits en dirección impar 01 1 10 De 8 bits a 16 bits en dirección par 01 0 01 De 8 bits a 16 bits en dirección impar 10 1 01 De 16 bits a 8 bits en dirección par 10 0 10 De 16 bits a 16 bits en direcc. Par 10 0 01 De 32 bits a 8 bits en dirección par 00 0 10 De 32 bits a 16 bits en direcc. Par 00 0 01 De 24 bits a 8 11 1 10 Datos efectivos transferidos DATA[8..15] DATA[8..15] DATA[ 0..7 ] DATA[8..15] DATA[8..15] DATA[0..15] DATA[8..15] DATA[0..15] DATA[8..15] Tabla 9 – Tipos de transferencias. Las transferencias de 24 bits a puertos o memorias de 8 son subciclos dentro de una transferencia de 32 bits a 8. La CPU32 exige que las transferencias de 16 o 32 bits a 16 bits estén alineadas, esto es, que tengan como destino direcciones pares, lo cual restringe las posibilidades de combinaciones correctas a tan sólo 9. 2.3.1.4.3 Los códigos de función El valor de las señales FC depende del estado del microcontrolador. Los 8 valores posibles se decodifican de acuerdo con la siguiente tabla: FC2 0 0 0 0 1 1 1 1 FC1 0 0 1 1 0 0 1 1 FC0 0 1 0 1 0 1 0 1 Estado interno Valor no usado Acceso a datos en modo usuario Lectura de instrucciones en modo usuario Valor no usado Valor no usado Acceso a datos en modo supervisor Lectura de instrucciones en modo supervisor 3 subestados posibles: (1) reconocimiento y confirmación de una interrupción, (2) reconocimiento y confirmación de un punto de ruptura, (3) ciclo de paso a funcionamiento en bajo consumo. Tabla 10 – Códigos de función. Para distinguir los tres posibles subestados del estado 111, se puede decodificar el bus de direcciones de la siguiente manera: 31 Subestado A23..A2 A19 A18 A17 A16 A15..A5 A 0 4 (1) pto. Ruptura 0 0 0 0 0 0 X (2) bajo 0 0 0 1 1 1 1 consumo (3) Interr. 1 1 1 1 1 1 1 A 3 X 1 A 2 X 1 A 1 Y 1 A 0 0 0 X X X 1 Tabla 11 – Subestados del código de función 111. 2.3.1.4.4 Puntos de ruptura Un punto de ruptura es un mecanismo que, bien sea por programa, bien sea por medio de una señal externa, nos permite detener la ejecución de instrucciones por parte de la CPU32 e inspeccionar el estado del microcontrolador (registros internos, memoria externa, etc.). Para ello no es necesario que esté activo el depurador de segundo plano. En el 68331 se pueden establecer puntos de ruptura de dos formas: Por programa: si en nuestro programa insertamos una instrucción BKPT, al llegar a ella, el microcontrolador detiene la ejecución e inicia un ciclo de confirmación del punto de ruptura. Por medio de la señal #BKPT: si algún dispositivo externo activa esta señal, la CPU32 responde con un ciclo de confirmación. 2.3.1.4.5 Cesión del bus El MC68331 dispone de 3 señales para arbitrar el uso y compartición de los buses de datos y direcciones: #BR (petición de bus por el dispositivo externo), #BG (señal de cesión del bus) y #BGACK (confirmación de fin de petición, y que indicará al 68331 que el bus está libre). Cuando un dispositivo capaz de usar el bus (tal como un controlador de DMA u otro micro) desee hacer uso del mismo, deberá activar la señal #BR, para informar al 68331 de sus intenciones. Cuando éste finalice el ciclo de bus en curso, activará la señal #BG, momento a partir del cual el dispositivo externo se convierte en el gestor del bus (bus master), pudiendo emplearlo para lo que desee. Mientras el nuevo gestor mantenga activa la señal #BGACK, el 68331 no empleará el bus y mantendrá sus terminales DATA, #DS, ADDR, #AS, FC, R/#W, #RMC y SIZ en alta impedancia para evitar interferencias en el manejo del bus cedido. 32 2.3.1.5 Interrupciones 2.3.1.5.1 Fuentes de interrupción externas Además de las interrupciones generadas por el temporizador periódico (PIT), el SIM gestiona las 7 entradas de interrupciones de origen externo #IRQ[1..7]. Todas estas interrupciones se activan a nivel bajo, excepto la #IRQ7 que responde también al flanco de bajada. Las interrupciones externas están sujetas a un esquema de prioridad en el cual #IRQ0 recibe la mínima e #IRQ7 la máxima; en caso de simultaneidad de interrupciones se atenderá primero a la más prioritaria. El dispositivo solicitante debe mantener la petición de interrupción hasta que ésta es atendida, ya que las peticiones no son capturadas (latched) por el micro. 2.3.1.5.2 Arbitraje de interrupciones simultáneas Si se produce la petición simultanea de una interrupción de origen interno y otra de origen externo (o entre dos de origen interno), el SIM usa los campos IARB para decidir cuál se atiende antes. En el caso de las interrupciones externas, su IARB es el del registro SIMCR. Es importante hacer notar que si este registro contiene un valor igual a 0 será atendida como una interrupción espúrea. 2.3.1.5.3 Ciclo de reconocimiento y confirmación de una interrupción externa La solicitud y atención a una interrupción implica un diálogo entre el 68331 y el dispositivo solicitante de acuerdo con el siguiente protocolo de comunicaciones: El dispositivo solicita la interrupción activando alguna línea #IRQ[1..7]. El micro responde (si la interrupción está permitida y una vez resuelto el proceso de arbitraje) activando R/#W, FC[0..2], AS# y DS# a nivel alto, y poniendo en SIZ[0..1] el valor adecuado (8 o 16 bis) para comunicarse con el dispositivo. El periférico debe activar AVEC# (para solicitar la atención en modo autovectorizado) o DSACK# (en cuyo caso la interrupción será atendida en modo vectorizado y el dispositivo debe haber colocado previamente el vector de interrupción en el bus de datos). 33 En cualquiera de estos casos el 68331 responde desactivando #DS y #AS, cuando el periférico desactive #DSACK, la CPU32 comenzará la atención efectiva a la interrupción (si las interrupciones son autovectorizadas esto es inmediato, dado que las señales #DSACK no estarán activas durante el ciclo). Este proceso conlleva guardar en la pila el estado de ejecución (esto es, los registros PC y SR), buscar el vector de interrupción adecuado y ejecutarlo. Si deseamos que todas las #IRQ[1..7] sean autovectorizadas podemos poner a nivel bajo el terminal AVEC# permanentemente. 2.3.1.6 Lógica de direcciones El SIM permite que el diseñador de sistemas basados en el 68331 disponga de la posibilidad de generar hasta 12 señales de selección de pastilla (chip-selects) sin necesidad de añadir nuevos circuitos integrados. Es posible programar qué zona del mapa de memoria activa cada una de estas señales y generar internamente las señales DSACK# y AVEC# con los tiempos de respuesta adecuados al dispositivo periférico o la memoria utilizados. 2.3.1.6.1 Registros de configuración de la lógica de direcciones: CSBORBT y CSOR0..CSOR10 Usando estos registros podemos programar el modo de funcionamiento de la lógica de direcciones incorporada en el SIM. Todos ellos comparten una misma estructura interna de campos: MODE: permite seleccionar si el chip-select correspondiente es asíncrono (MODE=0) o está sincronizado con la señal de reloj ECLK. BYTE: permite definir si el dispositivo activado usa el byte más significativo del bus de datos (BYTE=10), el menos significativo (BYTE=01) o ambos (BYTE=11). R/#W: permite definir chip-selects para dispositivos de sólo lectura (R/#W=01), de sólo escritura (R/#W=10) o de lectura-escritura (R/#W=11). 34 STRB: si se ha seleccionado el modo asíncrono (MODE=0), permite definir si la activación del chip-select depende de #AS (STRB=0) o de #DS. #DSACK: especifica el número de estados de espera que se ha de insertar antes de finalizar el ciclo de bus asociado a esta señal; el mínimo es 0000 y el máximo es 1101; el valor 1110 indica que deseamos un acceso rápido de sólo 2 ciclos de reloj. SPACE: determina en qué modo de funcionamiento ha de estar la CPU32 para que el ciclo de bus se pueda ejecutar con normalidad: modo usuario (SPACE=01), modo supervisor (SPACE=10) o cualquiera de los dos (SPACE=11). IPL: nivel de prioridad asociado a la señal, en el caso de que sea usada para generar las señales DSACK# o AVEC# para un dispositivo que haya solicitado una interrupción. Bit Campo AVEC#: habilita las interrupciones autovectorizadas (AVEC#=1). 15 14 13 12 11 10 9 8 7 6 MODE BYTE R/W# STRB DSACK# 5 4 SPACE 3 2 1 0 IPL AVEC# 2.3.1.6.2 Registros de configuración de la dirección base: CSBARBT y CSBAR0..CSBAR10 La memoria accesible con cada señal de chip-select puede comenzar en cualquier dirección que sea múltiplo de 2 KB. El tamaño del bloque de memoria al que se accede puede tomar 8 valores entre un mínimo de 2 KB y un máximo de 1 MB. Los bits 15 al 3 especifican qué valores adoptan virtualmente los terminales ADDR23-ADDR11 del bus de direcciones; los bits 2 al 0 (BLKSZ[2..0]) determinan el tamaño del bloque accedido: BLKSZ[2..0] 000 001 010 011 100 101 110 111 Tamaño del bloque 2 KB 8 KB 16 KB 64 KB 128 KB 256 KB 512 KB 1 MB Bits de direcciones fijos ADDR[23..11] ADDR[23..13] ADDR[23..14] ADDR[23..16] ADDR[23..17] ADDR[23..18] ADDR[23..19] ADDR[23..20] Tabla 12 – Determinación del tamaño de bloque de memoria. 35 Para permitir el autoarranque, el CSBOOT# se conectará a una memoria no volátil y debe estar configurado en la dirección base $000000, ya que es ahí donde la CPU32 lee los vectores de interrupción 0 y 1 tras el reset. 2.3.1.7 Inicialización del SIM El SIM debe ser el primer módulo que inicialicemos al salir del reset, dado que realiza funciones de supervisión y arbitraje del sistema. Los pasos a seguir son: 1. Programar el SIMCR, principalmente los siguientes puntos: El campo IARB que determina el nivel de arbitraje de las interrupciones del SIM (al salir del reset vale $F, el nivel máximo). El campo IARB que determina el nivel de arbitraje de las interrupciones del SIM (al salir del reset vale $F, el nivel máximo). El bit MM que determina la posición en el mapa de memoria de los registros (por defecto estarán situados a partir de $FFF000). El bit SUPV controla si el acceso a los registros se puede o no hacer en modo usuario (por defecto sólo pueden hacerlo los programas que funcionen en el modo supervisor). El bit FRZSW deshabilita el supervisor SW y las interrupciones periódicas durante la ejecución paso a paso del BDM (deshabilitado por defecto). El bit FRZBM habilita el supervisor de bus durante la ejecución paso a paso del BDM (deshabilitado por defecto). 2. Programar el SYNCR: El bis SWE habilita o deshabilita el supervisor SW (habilitado por defecto). Los campos SWP y SWT fijan el periodo de funcionamiento del temporizador del supervisor SW (por defecto está fijado a su mínimo valor). 36 El bit HME habilita el supervisor de parada (inicialmente deshabilitado). El bit BMT fija el tiempo máximo de espera de supervisor de bus antes de generar internamente la señal #BERR (por defecto espera 64 ciclos de reloj, su valor máximo). 3. Programar el SYPCR, principalmente: Los bits W, X e Y permiten establecer la velocidad del reloj del sistema (por defecto multiplican la frecuencia de referencia por 256). El bit RSTEN habilita la provocación de un reset cuando se detecte falta de reloj de referencia (por defecto está deshabilitado). 4. Programar el PICR: El campo PIRQL fija el nivel de prioridad de las interrupciones periódicas (o bien las deshabilita). El campo PIV establece el número del vector de interrupción de las mismas (por defecto vale $F, que es el vector asociado a las interrupciones no inicializadas). Lo inicializaremos con algún vector de usuario (a partir de $40). 5. Programar el PITR: El bit PTP fija si se usa o no el preescalado de valor 512 en el temporizador del interrupciones periódicas (por defecto se usa el preescalado). El campo PITM fija el periodo del interrupción de dicho temporizador. 6. Programar los chip-selects que use nuestro sistema, empleando para ello los registros CSPAR0, CSPAR1, CSBARBT, CSBAR, CSORBT y CSOR. 7. Programar los puertos de entrada o salida E y F (el puerto C siempre funciona como salida): 37 Los registros PEPAR y PFPAR, habilitan dichos puertos (por defecto, su valor depende de las señales DATA8 y DATA9 durante el reset). Los registros DDRE Y DDRF configuran cada bit de los mismos como entradas (DDREx=0) o como salidas (por defecto son entradas). Los registros PORTE y PORTF reflejan el contenido de los puertos (para los bits configurados como entradas) o bien lo establecen (para los bits configurados como salidas). 2.3.2 Temporizador de propósito general (GPT) Un temporizador de propósito general (GPT) de 11 canales como el que contiene el MC68331 se usa en sistemas donde se requiere un nivel de control medio por parte del procesador. El GPT consta de una unidad de captura/comparación, un acumulador de pulsos y dos moduladores de ancho de pulso. La conexión interna se realiza a través del bus intermodular (IMB) mediante una unidad de interfaz. La unidad de captura/comparación incluye tres canales de captura de entrada, cuatro de comparación de salidas y otro canal más que puede seleccionarse tanto como captura de entrada como de comparación de salida. Estos canales comparten un contador continuo de 16 bits cuya señal de reloj se puede obtener de un preescalador de nueve etapas conectado al reloj del sistema o bien a través de una señal externa del reloj, PCLK. El acumulador de pulsos contiene un contador de 8 bits que puede usarse como contador de sucesos o como acumulador de tiempo, de modo que cuenta los pulsos de reloj mientras se halla activo el terminal PAI. El modulador de ancho de pulso (PWM) genera una señal periódica cuadrada cuya duración del ciclo de trabajo se puede seleccionar desde el 0 % al 100 % mediante software. En el caso de un ciclo de trabajo del 50 % tendremos la típica onda cuadrada. Los circuitos PWM contienen un contador continuo de 16 bits cuyo reloj puede ajustarse con el mismo preescalador de nueve etapas utilizado por la unidad de captura/comparación o por la entrada del PCLK. 38 Todos los terminales del GPT pueden utilizarse como entradas/salidas de propósito general. Los terminales de captura de entradas y los de comparación de salidas constituyen un puerto paralelo bidireccional de 8 bits (PORTGP). Los terminales del PWM son sólo de salida y los de PAI y PCLK son sólo de entrada. 2.3.2.1 Registros del GPT y mapa de direcciones Los registros del GPT con su respectivo mapa de direcciones se detallan en la tabla siguiente: Dirección $FFF900 $FFF902 $FFF904 $FFF906 $FFF908 $FFF90A $FFF90C $FFF90E $FFF910 $FFF912 $FFF914 $FFF916 $FFF918 $FFF91A $FFF91C $FFF91E $FFF920 $FFF922 $FFF924 $FFF926 $FFF928 $FFF92A $FFF92C 15 8 7 0 MÓDULO DE CONFIGURACIÓN DEL GPT (GPTMCR) (RESERVADA PARA TEST) CONFIGURACIÓN DE INTERRUPCIÓN (ICR) DIRECC. DATOS PGP (DDRGP) DATOS PGP (PORTGP) MÁSCARA DE ACCIÓN OC1 (OC1M) DATOS DE ACCIÓN OC1 (OC1D) CONTADOR DEL TEMPORIZADOR (TCNT) CONTROL DE PA (PACTL) CONTADOR DE PA (PACNT) ENTRADA DE CAPTURA 1 (TIC1) ENTRADA DE CAPTURA 2 (TIC2) ENTRADA DE CAPTURA 3 (TIC3) SALIDA DE COMPARACIÓN 1 (TOC1) SALIDA DE COMPARACIÓN 2 (TOC2) SALIDA DE COMPARACIÓN 3 (TOC3) SALIDA DE COMPARACIÓN 4 (TOC4) ENTRADA DE CAPTURA 4/SALIDA DE COMPARACIÓN 5 (TI4/O5) CONTROL DE TEMP. 1 (TCTL1) CONTROL DE TEMP. 2 (TCTL2) MÁSCARA DE TEMP. 1 (TSMK1) MÁSCARA DE TEMP. 2 (TSMK2) FLAG DE TEMP. 1 (TFLG1) FLAG DE TEMP. 2 (TFLG2) COMPRAR. FORZADA (CFORC) CONTROL C DE PWM (PWMC) CONTROL A DE PWM (PWMA) CONTROL B DE PWM (PWMB) CONTADOR DE PWM (PWMCNT) BUFFER DE PWMA (PWMBUFA) BUFFER DE PWMB (PWMBUFB) PREESCALADOR DEL GPT (PRESCL) Tabla 13 – Mapa de direcciones de los registros del GPT. Se puede acceder a todos los registros utilizando accesos a byte o a palabra. A los registros de captura/comparación y de modulación de ancho de pulso se debe acceder mediante operaciones de palabra para garantizar la coherencia. Si se utilizasen accesos a byte para leer un registro como el contador del temporizador (TCNT), podría darse el caso de que el byte al que no se ha accedido cambiase mientras se lee el otro byte. Por ello se debe acceder a ambos bytes a la vez. 2.3.2.2 Funcionamiento por “polling” o por interrupciones Todas las funciones del GPT tienen asociadas una interrupción y una bandera de estado. Los registros de la bandera de interrupción del temporizador (TFLG1 y TFLG2) contienen las banderas de estado utilizadas para el funcionamiento por “polling” o por 39 interrupciones, los registros de máscara (TMSK1 y TMSK2) contienen bits de control de la interrupción. Las rutinas de control pueden monitorizar el funcionamiento del GPT consultando los registros de estado. Cuando se produce un evento, la rutina de control transfiere el control a una rutina de servicio que trata dicho evento. Si se han habilitado las correspondientes interrupciones, el GPT solicita una interrupción de servicio cuando dicho evento se produce. La utilización de interrupciones evita tener que hacer un “polling” continuo de las banderas de estado para ver si se ha producido algún evento. Las banderas de estado deben borrarse después de dar servicio a una interrupción, para deshabilitar la petición de interrupción. 2.3.2.2.1 Funcionamiento por “polling” Cuando se produce un evento en el GPT, se pone a uno la bandera de estado en TFLG1 o TFLG2, éstas son activadas por el GPT, no por la CPU. TFLG1 y TFLG2 son registros de 8 bits a los que se puede acceder bien individualmente o conjuntamente con un acceso de 16 bits. Estos registros se ponen a cero cuando se hace un reset. A cada bit de TFLG1 y TFLG2 le corresponde un bit en TMSK1 y TMSK2 situado en la misma posición. La interrupción asociada a un evento sólo se genera cuando se encuentra habilitado su respectivo bit de máscara. Una vez activada una bandera de estado por un evento, debe borrarse escribiendo un cero en el bit correspondiente del registro. Los registros de estado se borran en una secuencia particular: Primero debe leerse el registro para activar las banderas, después deben escribirse ceros en las banderas que hay que borrar. Si se produce un nuevo evento en el tiempo transcurrido desde que se lee el registro hasta que se escribe, la bandera asociada no se borrará. En el funcionamiento por “polling” se deberá consultar continuamente el estado de las banderas y atender la correspondiente rutina de servicio cuando se active una. A continuación se muestra la tabla de banderas de estado del GPT: Nemónico Asignación de Registros IC1F TFLG1 IC2F TFLG1 IC3F TFLG1 OC1F TFLG1 OC2F TFLG1 OC3F TFLG1 Fuente Entrada de Captura 1 Entrada de Captura 2 Entrada de Captura 3 Salida de Comparación 1 Salida de Comparación 2 Salida de Comparación 3 40 OC4F I4/O5F TOF PAOVF PAIF TFLG1 TFLG1 TFLG2 TFLG2 TFLG2 Salida de Comparación 4 Entrada de Captura 4 / Salida de Comparación 5 Desbordamiento del temporizador Desbordamiento del acumulador de pulsos Entrada del acumulador de pulsos Tabla 14 – Tabla de banderas de estado del GTP. 2.3.2.2.2 Interrupciones del GPT El GPT tiene 11 fuentes internas que pueden provocar una petición de interrupción. Éstas se activan poniendo a uno los bits de los registros TMSK1 y TMSK2. Se trata de registros de 8 bits a los que se puede acceder bien individualmente o bien conjuntamente con un acceso de 16 bits. Estos registros se inicializan a cero después de un reset. Cada bit de TMSK1 y TMSK2 tiene su respectivo bit en TFLG1 y TFLG2 situado en la misma posición. TMSK2 controla también el funcionamiento del preescalador. El valor del campo de nivel de interrupción (IRL) del registro de control de interrupciones (ICR) determina la prioridad de las peticiones de interrupción del GPT. Los valores de IRL se corresponden con las señales de petición de interrupción #IRQ[7:1] del MCU. IRQ7 es la señal de petición de interrupción de mayor prioridad e IRQ1 la de menor. Un valor de 111 hace que se active IRQ7 cuando se produce una petición de interrupción, valores inferiores hacen que se activen las correspondientes señales de petición de menor prioridad. Si se pone el campo a 000, se desactivan las interrupciones. La CPU32 reconoce sólo señales de petición de interrupción con una prioridad mayor que el valor de la máscara de prioridad de interrupción (IP) del registro de estado. Cuando la CPU reconoce una petición de interrupción, la prioridad de dicha petición se anota en la máscara de IP y se pone en las líneas de dirección del IMB. Si dicho valor es el mismo que el del IRL, se produce un arbitraje en la prioridad. Esta prioridad del GPT viene determinada por el valor del campo de arbitraje de interrupciones, IARB, del registro de configuración, GPTMCR. A cada módulo del microcontrolador que pueda hacer peticiones de interrupción, debe asignársele un valor IARB diferente y distinto de cero para poder implementar un esquema de arbitraje. Cuando el GPT gana el arbitraje de interrupción, responde al ciclo de reconocimiento de la CPU colocando un número de vector de interrupción en el bus de datos. El número de vector se utiliza para calcular el desplazamiento dentro de la tabla de 41 vectores de excepción de la CPU32. Los números de vector se forman mediante la concatenación del valor del campo IVBA del ICR con un número de 4 bits que proporciona el GPT en función de la petición de interrupción atendida. El hardware evita que el número de vector pueda cambiar cuando se está sacando al IMB. La asignación de los números de vectores se muestra en la siguiente tabla: Nombre --IC1 IC2 IC3 OC1 OC2 OC3 OC4 IC4/OC 5 TO Número de Fuente 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 PAOV 1010 PAI 1011 Fuente Canal de Ajuste Entrada de Captura 1 Entrada de Captura 2 Entrada de Captura 3 Salida de Comparación 1 Salida de Comparación 2 Salida de Comparación 3 Salida de Comparación 4 Entrada de Captura 4 / Salida de Comparación 5 Desbordamiento del Temporizador Desbordamiento del Acumulador de Pulsos Entrada del Acumulador de Pulsos Número de Vector IVBA : 0000 IVBA : 0001 IVBA : 0010 IVBA : 0011 IVBA : 0100 IVBA : 0101 IVBA : 0110 IVBA : 0111 IVBA : 1000 IVBA : 1001 IVBA : 1010 IVBA : 1011 Tabla 15 – Fuentes de interrupción del GPT. 2.3.2.3 Descripción de los terminales El GPT utiliza 12 terminales, cada uno de los cuales puede llevar a cabo más de una función. Podemos agruparlos en los siguientes grupos funcionales: 2.3.2.3.1 Terminales de captura de entradas (IC[1:3]) Cada uno de estos terminales está asociado a una única función de captura de entrada del GPT. El funcionamiento tiene la histéresis siguiente: se garantiza que cualquier pulso de duración superior a dos ciclos de reloj es válido y que cualquiera inferior a uno no se tiene en cuenta. Cada pin tiene asociado un registro de captura de 16 bits que conserva el valor capturado del contador. Estos terminales pueden utilizarse también como E/S de propósito general. 2.3.2.3.2 Terminal de captura de entrada / comparación de salida (IC4/OC5) Este pin puede configurarse tanto para la captura de entrada como para la comparación de salida. Tiene asociado un registro de 16 bits que se utiliza para guardar bien el valor de captura de entrada o bien el de comparación de salida. Cuando se usa para la captura 42 de entrada tiene la misma histéresis que cualquier otro. También se puede utilizar como E/S de propósito general. 2.3.2.3.3 Terminales de comparación de salidas (OC[1:4]) Estos terminales se utilizan para las funciones comparación de salida del GPT. Cada terminal tiene asociado un registro de comparación y un comparador de 16 bits. Los terminales OC2, OC3 y OC4 están asociados a su propia función de comparación, mientras que la función del OC1 puede afectar a la salida de todos los terminales de comparación. Si el terminal OC1 no se necesita para ninguna función de comparación, puede utilizarse para sacar la señal de reloj seleccionada para el temporizador. Todos estos terminales pueden utilizarse también como E/S de propósito general. 2.3.2.3.4 Terminal de entrada del acumulador de pulsos (PAI) El PAI permite contar sucesos externos o bien contar el tiempo durante el que se encuentra activa la señal en el terminal PAI. El PAI tiene la misma histéresis que los terminales de captura de entradas. También puede utilizarse como entrada de propósito general 2.3.2.3.5 Terminales de modulación de ancho de pulso (PWMA, PWMB) Los terminales PWMA y PWMB están conectados a las salidas del modulador de ancho de pulso. Los moduladores pueden programarse para generar una onda periódica de frecuencia y porcentaje del ciclo de trabajo variables. PWMA puede utilizarse para sacar la señal de reloj seleccionada como entrada del contador del PWM. Estos terminales pueden utilizarse también como salidas de propósito general. 2.3.2.3.6 Entrada auxiliar de reloj del temporizador (PCLK) El terminal PCLK sirve para conectar un reloj externo al GPT para proporcionar la señal de reloj de la unidad de captura/comparación o de la unidad PWM en lugar de la proporcionada por el preescalador. La histéresis de PCLK es la misma del resto de entradas del GPT. También puede utilizarse como entrada de propósito general. 2.3.2.4 E/S de propósito general Cualquier terminal del GPT puede utilizarse como E/S de propósito general si no se está usando para otra cosa. Los terminales de captura/comparación son bidireccionales. La función como entrada o salida se controla con el bit de dirección de datos del registro de dirección de datos del puerto GP (DDRGP). 43 Los datos se leen y se escriben en el registro de datos del puerto GP (PORTGP). Los datos de los terminales se pueden leer incluso si están configurados para una función del temporizador. Los datos leídos del puerto PORTGP siempre reflejan el estado del terminal externo, mientras que los que se escriben en dicho puerto no siempre afectan a dicho terminal externo. Los datos escritos en el puerto PORTGP no se trasladan a los terminales utilizados para la comparación de salidas, pero el dato es capturado por el registro del puerto. Cuando se desactiva la función de comparación de salida, el último dato escrito en el puerto, PORTGP, se saca por el terminal correspondiente, si está configurado como de salida. Los datos escritos en el puerto PORTGP pueden provocar capturas de entrada si el terminal correspondiente está configurado para ello. Los terminales PAI y PCLK proporcionan entradas de propósito general. Se puede ver el estado de estos terminales accediendo a los bits de estado PAIS y PCLKS del registro de control del acumulador de pulsos (PACTL). Los terminales de salida de modulación de ancho de pulso, A y B, pueden servir como salidas de propósito general. Los bits FPWMx y F1x de los registros CFORC y PWMC, respectivamente, controlan su funcionamiento. 2.3.2.5 Preescalador Las unidades de captura/comparación y de modulación de ancho de pulso tienen contadores continuos independientes de 16 bits como componentes principales para la temporización. Estos contadores obtienen su reloj del preescalador o de la entrada PCLK. En el preescalador se aplica al reloj del sistema un divisor de nueve etapas. El preescalador proporciona como salidas los resultados de dividir el reloj del sistema entre 2, 4, 8, 16, 32, 64, 128, 256 y 512. A estas salidas se conectan dos multiplexores, uno para la unidad de captura/comparación y otro para la unidad PWM. 44 Cada multiplexor puede seleccionar una de siete de las salidas del preescalador o la entrada externa del terminal PCLK. La salida del multiplexor para el contador del temporizador (TCNT) se selecciona con los bits CPR[2:0] en el registro 2 de la máscara de interrupciones del temporizador (TMSK2). La salida del multiplexor para el contador del PWM (PWMCNT) se selecciona mediante los bits PPR[2:0] del registro de control del PWM (PWMC). Figura 12 – Diagrama de bloques del preescalador. Después de un reset, el GPT se configura para que el TCNT utilice el reloj del sistema dividido entre cuatro y el PWMCNT dividido entre dos. Con el software de inicialización se puede cambiar el factor de división con la particularidad de que en los bits PPR se puede escribir en cualquier momento, pero en los bits CPR sólo se puede escribir una vez después del reset, salvo que el GPT se encuentre en modo test o freeze. El preescalador se puede leer en cualquier momento. En modo freeze también se puede escribir en él. Deben utilizarse accesos a palabra para garantizar la coherencia aunque se 45 permiten los accesos a byte. El valor del preescalador se encuentra en los bits [8:0], mientras que los bits [15:9] no están implementados y se leen como ceros. Las salidas del multiplexor (incluida la señal PCLK) pueden conectarse a terminales externos. El bit CPROUT del registro TMSK2 configura el terminal OC1 como salida del reloj de TCNT y el bit PPROUT del registro PWMC configura el terminal PWMA como salida del reloj de PWMCNT. Se puede escribir en CPROUT y PPROUT en cualquier momento. Cuando por OC1 y PWMA se sacan las señales de reloj, su ciclo de trabajo no es del 50%. El preescalador proporciona también tres señales de reloj al selector de reloj del acumulador de pulsos, que son: el reloj del sistema dividido por 512, la señal del reloj externo que viene del terminal PCLK y la señal de reloj de la unidad de captura/comparación. 2.3.2.6 Unidad de captura/comparación La unidad de captura/comparación consta del contador del temporizador (TCNT), las funciones de captura de entradas (IC) y las de comparación de salidas (OC). 2.3.2.6.1 Contador del Temporizador El contador del temporizador (TCNT) es el componente clave de la unidad de captura/comparación. Es un contador continuo de 16 bits, que comienza a contar cuando el procesador vuelve de un reset. El contador no puede pararse durante el funcionamiento normal. Tras un reset, el GPT está configurado para usar el reloj del sistema dividido por cuatro como entrada del contador. El preescalador divide el reloj del sistema y proporciona frecuencias de entrada que se pueden seleccionar. Mediante software de usuario se puede configurar el sistema para utilizar una de las siete salidas del preescalador o una señal de reloj externa. Se puede leer el contador en cualquier momento sin que afecte a su valor. Como el GPT está conectado mediante un interfaz con el IMB y éste tiene un bus de 16 bits, deben hacerse lecturas de palabras para garantizar la coherencia, aunque también se pueden hacer accesos a byte. El contador se pone a $0000 durante el reset y funciona como un registro de sólo lectura, salvo en los modos test y freeze en que se puede escribir cualquier valor en él. 46 Cuando el contador pasa de $FFFF a $0000, se activa el flag de desbordamiento del temporizador (TOF) en el registro 2 de la bandera de interrupciones del temporizador (TFLG2). Se puede habilitar una interrupción con el correspondiente bit de activación de interrupciones (TOI) del registro 2 de la máscara de interrupciones del temporizador (TMSK2). 2.3.2.6.2 Funciones de captura de entradas Todas las funciones de captura de entradas utilizan el mismo contador de 16 bits (TCNT). Cada terminal de captura de entrada tiene un “latch” de 16 bits y una lógica de detección/selección de flanco. Cada función de captura de entrada tiene asociada una bandera de estado y puede hacer que el GPT lance una petición de interrupción de servicio. Cuando el flanco de la señal realiza la transición seleccionada en un terminal de captura de entrada, el “latch” asociado captura el contenido del TCNT y activa la bandera de estado correspondiente. También se puede generar una petición de interrupción cuando se detecta la transición. La lógica de detección de flancos consta de dos bits de control por cada entrada que activan la detección de flancos y seleccionan una transición a detectar. Los bits EDGxA y EDGxB del registro 2 de control del temporizador (TCTL2) determinan si las funciones de captura de entrada deben detectar sólo flancos de subida, sólo flancos de bajada o ambos. Si se borran ambos bits, se desactiva la función de captura de entrada. Estas funciones operan independientemente unas de otras, y pueden capturar el mismo valor de TCNT si se detectan flancos de entrada distintos dentro del mismo ciclo del contador. La lógica de interrupciones de la captura de entradas incluye una bandera de estado, que indica que se ha detectado un flanco, y un bit de activación de interrupción. Un evento de captura de entrada pone a 1 el bit ICxF del registro 1 de la bandera de interrupción del temporizador (TFLG1) y hace que el GPT pida una interrupción si está activado el correspondiente bit ICxI en el registro 1 de la máscara de interrupción del temporizador (TMSK1). Si no se activa dicho bit ICxI, el software debe mirar la bandera de estado para saber si ha ocurrido un evento (polling). Los eventos de captura de entradas son normalmente asíncronos con el contador del temporizador. Debido a esto, es necesario adaptar las señales por medio de un 47 sincronizador y un filtro digital. Como los eventos están sincronizados con el reloj del sistema, la transición del valor del contador al “latch” y el incremento del contador suceden en semiciclos opuestos del ciclo del reloj del sistema. Como las entradas tienen histéresis, la captura de cualquier transición mayor que dos ciclos de reloj está garantizada y cualquier transición de duración inferior a un ciclo de reloj se ignora. Debido a estas necesidades de sincronización y a los tiempos de propagación de las señales transcurren varios ciclos de reloj del sistema desde que se produce la transición en el terminal hasta que se realiza la captura. El registro de captura de entradas es de 16 bits. Se requiere acceso a palabra para garantizar la coherencia aunque está permitido el acceso a byte. Los registros de captura de entradas pueden leerse en cualquier instante sin que afecte a sus valores. Cada vez que se detecta el flanco seleccionado se realiza la captura de la entrada, incluso si está activada la bandera de estado de captura. Esto significa que el valor leído del registro de captura de entradas corresponde al último flanco detectado que puede no ser el que causó que se activase la bandera. 2.3.2.6.3 Funciones de comparación de salidas Cada terminal de comparación de salida del GPT tiene asociados un registro de comparación y un comparador, ambos de 16 bits. Cada función de comparación de salida tiene asociada una bandera de estado y puede hacer que el GPT genere una petición de interrupción de servicio. La lógica de las salidas de comparación está diseñada para prevenir falsas comparaciones durante los periodos de transición de los datos. Cuando el contenido programado de un registro de salida de comparación coincide con el valor del TCNT, se activa un bit (OCxF) de la bandera de estado de salida de comparación en TFLG1. Si está activado el correspondiente bit de interrupción (OCxI) de TMSK1, se origina una petición de interrupción al producirse la coincidencia. El funcionamiento de la comparación de salida 1 (OC1) difiere de las otras funciones de comparación de salida. La lógica de control de OC1 puede programarse para provocar cambios de estado en otros terminales de comparación cuando se produce una coincidencia en OC1. Los bits de control del registro de comparación forzada del temporizador (CFORC) permiten forzar el valor de las salidas. 48 2.3.2.6.3.1 Comparación de salida 1 La comparación de salida 1 puede afectar a cualquiera de los OC[1:5] cuando se produce una coincidencia. Además, para permitir la generación de múltiples señales de control a partir de una única comparación, esta función hace posible que dos o más funciones de salida de comparación controlen el estado de un único terminal de comparación. Se pueden generar de esta forma pulsos de salida con una duración de tan sólo un ciclo de contador del temporizador. Los registros de máscara de acción (OC1M) y de datos de acción (OC1D) controlan la función OC1. Poniendo a 1 un bit en OC1M se selecciona el correspondiente bit del puerto de datos paralelo del GPT. Los bits de OC1D determinan si los bits seleccionados deben ser activados o borrados cuando se produzca una coincidencia OC1. Los terminales deben configurarse como de salida para que los datos del registro salgan al terminal correspondiente. Si se producen dos coincidencias, una OC1 y otra de otra salida, a la vez y ambas intentan modificar el mismo terminal, la función OC1 es la que toma el control del terminal. 2.3.2.6.3.2 Comparación de salida forzada El registro de comparación forzada (CFORC) se utiliza para hacer comparaciones forzadas. La acción resultante de una comparación forzada es la misma que cuando se produce una coincidencia en una salida de comparación, excepto que no se activan las banderas de estado. Los canales forzados ejecutan las acciones programadas inmediatamente después de la escritura en el CFORC. El registro CFORC es el byte superior de un registro de 16 bits que contiene también al registro de control del PWM (PWMC). Los accesos a este registro pueden ser tanto de 8 como de 16 bits. Las lecturas de los bits de comparación forzada (FOC) no tienen ningún sentido y siempre devuelven ceros. 2.3.2.6.4 Captura de entrada 4 / Comparación de salida 5 El terminal IC4/OC5 se puede utilizar para la captura de entrada, para la comparación de salida y como E/S de propósito general. La función del terminal como captura de entrada (IC4) o comparación de salida (OC5) se configura con el bit de activación de función (I4/O5) del registro de control del acumulador de pulsos (PACTL). Las funciones de E/S IC4/OC5 se controlan con el bit I4/O5 del registro de dirección de datos del puerto GP (DDRGP). 49 El registro de 16 bits (TI4/O5) utilizado con la función IC4/OC5 actúa como un registro de captura de entrada o como uno de comparación de salida según la función que se seleccione. Cuando se utilice como registro de captura de entrada 4, no podrá escribirse en él excepto en modo test o freeze. 2.3.2.7 Acumulador de pulsos El contador del acumulador de pulsos (PACNT) es un contador ascendente de lectura/escritura de 8 bits. El PACNT puede actuar como contador de sucesos externos o como acumulador de tiempo contando los ciclos de reloj durante los que el terminal del PAI está activo. En el modo contador de sucesos, se incrementa cada vez que se detecta la transición seleccionada en la entrada del acumulador de pulsos (PAI). La tasa de reloj máxima que admite es la del reloj del sistema dividida por cuatro. En el modo acumulador de tiempo, un señal de reloj incrementa PACNT mientras el terminal PAI está en estado activo. Hay cuatro posibles fuentes de reloj. Los dos bits del registro TFLG2 muestran el estado del acumulador de pulsos. La bandera del acumulador de pulsos (PAIF) indica que se ha detectado un flanco del tipo seleccionado. La bandera de desbordamiento (overflow) del acumulador de pulsos (PAOVF) señala que el contador del acumulador ha pasado de $FF a $00. Esto puede utilizarse para aumentar el rango del contador por encima de los ocho bits. Se puede hacer una petición de interrupción cuando está a uno cada una de las banderas de estado. Sin embargo, la operación de interrupción del PAI depende del modo de operación. En modo de contador de sucesos, se pide una interrupción cuando se detecta el flanco que se va a contar. En modo contado de tiempo, la petición se produce cuando la entrada del PAI cambia de estado activo a inactivo. Las peticiones de interrupción son activadas por los bits PAOVI y PAII del registro TMSK2. Los bits del registro de control del acumulador de pulsos (PACTL) controlan el funcionamiento de PACNT. El bit PAMOD selecciona la operación en el modo de contador de sucesos o contador de tiempo. En modo de contador de sucesos, el bit de control (PEDGE) determina la detección por flanco de subida o de bajada; en modo contador de tiempo, PEDGE especifica si la señal es activa a nivel alto o a nivel bajo. Los bits PACLK[1:0] seleccionan el origen del reloj que se utilizará en el modo acumulador de tiempo. 50 PACTL y PACNT se implementan como registros de 16 bits, pero se puede acceder a ellos en ciclos de acceso a byte o a palabra. Ambos registros se borran con un reset, salvo los bits PAIS y PCLKS que muestran el estado de los terminales PAI y PCLK. El terminal PAI puede utilizarse también como entrada de propósito general. El estado lógico del bit PAIS en PACTL muestra el estado del pin. 2.3.2.8 Unidad de modulación de ancho de pulso La unidad de modulación de ancho de pulso (PWM) tiene dos canales de salida, PWMA y PWMB. Una única salida de reloj procedente del multiplexor del preescalador ataca al contador de 16 bits que se utiliza para controlar ambos canales. La unidad PWM tiene dos modos de funcionamiento. El modo rápido utiliza una tasa de reloj igual a 1/256 de la tasa de salida del preescalador; la tasa del modo lento es de 1/32768. Las proporciones de los ciclos de trabajo de ambos canales PWM pueden controlarse individualmente mediante software. El terminal PWMA puede también sacar la señal de reloj que va al contador PWM. Los terminales PWM pueden utilizarse también como salidas. 2.3.2.8.1 Contador PWM El contador de 16 bits de la unidad PWM es similar al contador de la unidad de captura/comparación. Durante el reset, el GPT está configurado para que el contador utilice el reloj del sistema divido por dos. El software de inicialización puede reconfigurar el contador para que utilice una de las siete salidas del preescalador o una entrada de reloj externa desde el terminal PCLK. El registro del contador del PWM (PWMCNT) puede leerse en cualquier momento sin que se vea afectado su valor. La lectura debe hacerse en modo palabra para garantizar la coherencia, admitiéndose también los accesos a byte. El contador se pone a cero con el reset y es un registro de sólo lectura salvo en los modos test y freeze. Quince de los dieciséis bits del contador son salidas hacia los multiplexores A y B. Los multiplexores proporcionan los modos lento y rápido de la unidad PWM. El modo para PWMA es seleccionado por el bit SFA del registro de control del PWM (PWMC), el de PWMB lo selecciona el bit SFB del mismo registro. Los bits PWMA, PWMB y PPR[2:0] controlan la frecuencia de salida de PWM. En el modo rápido, los bits [7:0] de PWMCNT son utilizados para marcar el ritmo a la lógica 51 del PWM; en el modo lento, se utilizan los bits [14:7]. El periodo de una salida PWM es 128 veces mayor que el del modo rápido. PPR [2:0] 000 001 010 011 100 101 110 111 Salida del Preescalador 8.39 Mhz 16.78 Mhz Div 2 = 4.19 Mhz Div 2 = 8.39 Mhz Div 4 = 2.10 Mhz Div 4 = 4.19 Mhz Div 8 = 1.05 Mhz Div 8 = 2.10 Mhz Div 16 = 524 Khz Div 16 = 1.05 Mhz Div 32 = 262 Khz Div 32 = 524 Khz Div 64 = 131 Khz Div 64 = 262 Khz Div 128 = 66 Khz Div 128 = 131 Khz PCLK PCLK SFA/B=0 8.39 Mhz 16.78 Mhz 16.4 Khz 32.8 Khz 8.19 Khz 16.4 Khz 4.09 Khz 8.19 Khz 2.05 Khz 4.09 Khz 1.02 Khz 2.05 Khz 512 Hz 1.02 Khz 256 Hz 512 Hz PCLK/256 PCLK/256 SFA/B=1 8.39 Mhz 16.78 Mhz 128 Hz 256 Hz 64 Hz 128 Hz 32 Hz 64 Hz 16 Hz 32 Hz 8 Hz 16 Hz 4 Hz 8 Hz 2 Hz 4 Hz PCLK/32768 PCLK/32768 Tabla 16 – Margen de frecuencias del PWM para señales de reloj del sistema de 8.39 MHz y 16.78 Mhz. 2.3.2.8.2 Función PWM El ancho de pulso en las salidas de PWM viene determinado por el contenido de los registros de control PWMA y PWMB. Son registros de 8 bits que forman parte de un registro de 16 bits. Se puede acceder a PWMA y PWMB como bytes separados o como un único registro de 16 bits. Un valor $00 grabado en cualquiera de los registros provoca que salga por el correspondiente terminal de salida una señal continua de nivel lógico cero. Un valor de $80 hace que la correspondiente señal de salida tenga un ciclo de trabajo del 50% y así sucesivamente hasta llegar al valor máximo, $FF, que se corresponde con una salida que está en el nivel lógico uno para 255/256 del periodo. Si se ponen a uno los bits F1A (para PWMA) o F1B (para PWMB) en el registro hace que por el correspondiente terminal salga una señal continua de nivel lógico uno. El nivel lógico del terminal asociado no varía hasta el fin del ciclo en curso. F1A y F1B son los dos bits inferiores de CFORC, pero se puede acceder a ellos en la misma dirección de palabra como PWMC. Los datos escritos a PWMA y PWMB no se utilizan hasta haber finalizado el ciclo completo. Esto evita la aparición de pulsos espurios cortos o largos cuando cambian los valores de registro. El valor del ciclo en curso se almacena en el buffer del registro apropiado (PWMBUFA o PWMBUFB). El nuevo valor es transferido del registro PWM al registro del buffer al finalizar el ciclo en curso. Los registros PWMA, PWMB y PWMC se ponen a cero tras el reset. Se puede leer o escribir en estos registros en cualquier momento. PWMC es el byte inferior de un registro de 16 bits. El byte superior es el registro CFORC. Los registros del buffer, 52 PWMBUFA y PWMBUFB, son de sólo lectura en todo momento y se puede acceder a ellos como bytes separados o como registro único de 16 bits. Los terminales PWMA y PWMB pueden utilizarse también como salida de propósito general. Los valores de los bits F1A y F1B se trasladan a los correspondientes terminales de PWM cuando se desactiva el funcionamiento normal. 2.3.3 Unidad central de proceso (CPU32) La CPU32 es el módulo de procesamiento de instrucciones de primera generación de la familia MC68300 basada en la conocida familia de procesadores MC68000. Como ya se ha tenido la ocasión de comentar, un microcontrolador está formado por un microprocesador unido a un conjunto de periféricos y opcionalmente puede disponer de memoria también integrada en el chip. La CPU32 tiene muchas características del MC68010 y del MC68020, así como algunas características específicas para las labores de control. Mantiene la compatibilidad en sentido ascendente con el MC68000 y con el MC68010 y en sentido descendente con el MC68020 ya que la CPU32 no tiene implementadas algunas instrucciones de éste. También incorpora dos nuevas instrucciones para facilitar ciertas tareas de control como son las funciones de ahorro de energía y de búsqueda e interpolación en tablas. En todo caso las diferencias con la familia M68000 se limitan al modo supervisor. Los programas de usuario pueden ser ejecutados en sentido ascendente sin necesidad de modificación. La CPU32 presenta un consumo muy bajo de energía durante la ejecución normal gracias a la tecnología HCMOS con que ha sido desarrollada. Además el consumo de energía puede reducirse a un mínimo durante los periodos de inactividad mediante la ejecución de la instrucción LPSTOP que detiene a la CPU32 así como a otros submódulos. También presenta una mayor velocidad de ejecución gracias a que dispone de un “pipeline” de dos instrucciones que supone un cierto grado de procesamiento en paralelo. Por último dispone de un nuevo modo de depuración en segundo plano que permite que un PC tome el control del microcontrolador para la depuración. 53 2.3.3.1 Registros de la CPU32 El modelo de programación de la CPU32 es básicamente el mismo que el del MC68000. Cuenta con los siguientes registros de 32 bits: ocho registros de datos, siete registros de direcciones, un contador de programa y dos punteros de pila independientes para los modos de usuario y supervisor. También dispone de un registro de estado de 16 bits y tres nuevos registros accesibles sólo en modo supervisor y que son el VBR (Vector Base Register), el SFC (Source Function Code) y el DFC (Destination Function Code). En el modo usuario los registros son los mismos que en el MC68000 y que se detallan en la tabla 17. 31 16 15 8 7 0 D0 D1 D2 D3 D4 D5 D6 D7 31 31 31 16 16 15 15 REGISTROS DE DATOS 0 A0 A1 A2 A3 A4 A5 A6 REGISTROS DE DIRECCIONES A7 (USP) PUNTERO DE PILA DE USUARIO PC CONTADOR DE PROGRAMA CCR REGISTRO DE CÓDIGOS DE CONDICIÓN 0 0 7 0 Tabla 17 – Registros del modo usuario. En el modo supervisor se tiene acceso a nuevos registros. Por un lado se dispone de un puntero de pila específico. Además es visible el registro de estado (SR) completo, ya que en el modo usuario sólo estaba disponible el byte inferior (CCR) que contiene los códigos de condición. En el byte superior se encuentran los tres bits de la máscara de interrupción (IP), dos bits para habilitar o inhabilitar los dos modos de trazado en los que puede trabajar el microprocesador y el bit de selección de modo con el que se puede determinar el nivel de privilegio usuario/supervisor que se desea. 54 Los modos de traza son una ayuda al desarrollo de programas que generan una excepción tras la ejecución de cada instrucción o bien cada vez que se produce una bifurcación y que permite la utilización de un programa monitor para la depuración. Figura 13 – Registro de estado. También se tiene acceso a los tres nuevos registros que incorpora la CPU32 cuyas funciones se describen a continuación: Registro del Vector Base (VBR): Contiene la dirección base de la tabla de vectores de excepción cuya extensión es de 1024 bytes y contiene 256 vectores. Estos vectores son la dirección de memoria donde comienza la rutina de atención a la excepción. Cada vector tiene asignado un número de ocho bits. El procesador multiplica ese número por cuatro y le suma el VBR para calcular la dirección de memoria del vector . Registros SFC (Source Function Code) y DFC (Destination Function Code): Son registros de 3 bits. Los códigos de función pueden considerarse como extensiones de los 24 bits de direcciones disponibles proporcionando gracias a los códigos de función hasta 8 espacios direccionables de 16 Mbytes. La instrucción MOVES copia datos utilizando los registros SFC y/o DFC. Para el movimiento de datos en los registros de códigos de función se utiliza la instrucción MOVEC. Se trata de una transferencia de doble palabra siendo ignorados los 29 bits superiores. 55 31 16 15 8 31 7 0 (CCR) A7’ (SSP) PUNTERO DE PILA DE SUPERVISOR SR REGISTRO DE ESTADO VBR REGISTRO DEL VECTOR BASE SFC DFC CODIGO DE FUNCIÓN DE ORIGEN CODIGO DE FUNCIÓN DE DESTINO 0 7 0 Tabla 18 – Registros adicionales del modo supervisor. 2.3.3.2 Modos de direccionamiento La abundancia en modos de direccionamiento es la clave del éxito de la familia MC68000 ya que esa aparente complejidad es lo que realmente simplifica la programación. La CPU32 comparte los mismos modos de direccionamiento que la familia MC68000 y añade algunos otros nuevos que se describen a continuación. 2.3.3.2.1 Nuevos modos de direccionamiento Indirecto a registro con índice y desplazamiento de base: (bd, An, Xn). La dirección efectiva es: <ea> = (An) + (Xn) + bd Indirecto a contador de programa con índice y desplazamiento de base: (bd, PC, Xn) La dirección efectiva es: <ea> = (PC) + (Xn) + bd Escalado de índice: todos los direccionamientos con índice admiten un factor de escala de 1, 2, 4 y 8. Por ejemplo: El direccionamiento (bd, An, Xn.size*scale) significa: <ea> = (An) + (Xn*scale) + bd Bifurcaciones con 32 bits de desplazamiento: La instrucción Bcc admite desplazamientos de 32 bits al igual que el MC68020, ya que el 68000 y el 68010 sólo admite desplazamientos de 16 bits. 2.3.3.3 Instrucciones de la CPU32 La familia MC68300 participa de la filosofía de Motorola de mantener una compatibilidad ascendente de modo que los programas de usuario puedan ser ejecutados en procesadores más avanzados sin la necesidad de que sean modificados y que los programas que se ejecutan en modo supervisor sólo requieran unas mínimas modificaciones. 56 La CPU32 puede ejecutar el código objeto desarrollado para el 68000 y el 68010. Es muy similar al 68020 soportando la mayoría de las instrucciones de éste. Las siguientes instrucciones del 68020 no están implementadas en la CPU32: BFxxx, CALLM, RTM, CAS, CAS2, PACK, UNPK, cpxxx (instrucciones de coprocesador). No se va a entrar en detalle sobre las mismas pero se deberá tener en cuenta que si se dispone de código objeto que las contenga será necesario modificarlo o bien emular dichas instrucciones. La CPU32 tiene implementadas algunas instrucciones nuevas orientadas principalmente a las aplicaciones de control. 2.3.3.3.1 Nuevas instrucciones LPSTOP #<dato> - Se trata de una instrucción que se ejecuta en modo supervisor. El operando inmediato #<dato> de 16 bits se carga en el registro de estado, el contador de programa avanza hasta la siguiente instrucción y el procesador se para. La ejecución se reanuda de nuevo cuando se genera un ciclo de interrupción, se entra en modo traza o después de un reset. MOVEC <origen>,<destino> - Es una instrucción específica para mover datos a los registros de control SFC, DFC y VBR. Mueve el contenido de un registro de control a un registro general o viceversa. Se trata siempre de una operación de 32 bits. MOVES Rn,<ea> o MOVES <ea>,Rn – Sirve para el movimiento de datos entre registros y memoria, pero teniendo en cuenta el espacio de direcciones especificado por los registros de códigos de función SFC y DFC. Las operaciones pueden ser de 8, 16 y 32 bits. TBLS.size <ea>,Dn – Esta instrucción sirve para realizar la búsqueda e interpolación lineal en una tabla. Permite interpolar linealmente hasta 256 valores intermedios entre dos valores consecutivos de una tabla. <ea> – apunta al comienzo de la tabla de interpolación. Dx (15:8) – offset dentro de la tabla del primero de los datos. 57 Dx (7:0) – fracción de interpolación entre 0 y 255. Ejemplo: Dada la tabla de pares de valores de una función (0,0), (1,1000), (15,5000), (35,7000), se desea conocer el valor interpolado asociado al 7. Tabla DC.W 0,1000,5000,7000 MOVE.L #$00020080,D0 * la fracción es (15-1)*256/7=128=$80 * el offset es 2 TBLS.W tabla,D0 * en D0 se obtiene el valor interpolado El resultado devuelto es 3000 = 1000+(128*(5000-1000))/256 RTD #<desplazamiento> - Funciona igual que RTS pero incrementa el puntero de pila en (4 + #<despl>). BKPT - Se genera un punto de ruptura si está habilitado el modo de depuración en segundo plano. El vector asociado es el número 12. MULS, MULU – El funcionamiento es idéntico con la salvedad de que aceptan operandos de 32 bits y el resultado es de 64. CHK2 <ea>,Rn – Si el contenido de Rn está fuera de dos límites genera una excepción. <ea> contiene la dirección efectiva de la pareja de límites, primero el inferior y luego el superior. Esta instrucción es del 68020. TRAPcc - Causa una excepción TRAP cuando se cumple la condición cc. Se trata de una instrucción del 68020. 2.3.3.4 Depuración en segundo plano (BDM) La CPU32 presenta una cualidad única que consiste en llevar implementado un depurador en el propio microcódigo de la CPU. El BDM incorpora un conjunto completo de herramientas de depuración que permiten ver y modificar los registros y la memoria. El BDM permite establecer una comunicación serie bidireccional con un equipo externo. Con tan sólo implementar un sencillo circuito de comunicación se puede controlar la ejecución desde un PC, por ejemplo. Los terminales asociados a este proceso de comunicación son DSI, DSO y DSCLK. La depuración en segundo plano (BDM) es una función que se activa durante el reset. Durante el modo de operación BDM, la ejecución normal se suspende. 58 2.3.4 Módulo de comunicaciones serie (QSM) El QSM contiene dos interfaces serie, la interfaz serie de periféricos en cola (QSPI) y la interfaz serie de comunicaciones (SCI). La QSPI facilita la expansión periférica o la comunicación entre procesadores mediante un bus de tres líneas, síncrono y full-duplex. Dispone de cuatro terminales de selección de chip programables permiten seleccionar hasta 16 dispositivos periféricos. Lleva integrada una cola memoria RAM que permite realizar hasta 16 transferencias serie, de 8 a 16 bits cada una, o bien la transmisión de una cadena de datos de 256 bits, sin intervención de la CPU. Un modo especial de bucle proporciona muestreo continuo de un periférico serie, con actualización automática de la RAM de la QSPI, para proporcionar una interfaz eficiente con los convertidores A/D. La SCI utiliza un un formato NRZ estándar. Funciona tanto en modo full-duplex como en semi-duplex. Dispone de bits independientes para la activación del transmisor y del receptor. Un generador de flujo de datos tipo módulo proporciona de 32 baudios a 262 Kbaudios con un reloj de sistema de 8.38 MHz, o de 64 baudios a 524 Kbaudios con un reloj de 16.77 MHz. Se pueden seleccionar longitudes de palabra de 8 o de 9 bits. Permite la generación y control de paridad tanto par como impar. Dispone de una función despertador que permite que la CPU se dedique a otras tareas hasta que un dato completo esté disponible. En este capítulo sólo se describe la interfaz de comunicación serie (QSI) por entenderse que es la de mayor interés para las aplicaciones que se van a desarrollar. 2.3.4.1 Registros generales del QSM Existen básicamente tres registros de configuración generales que son: QSMCR (Registro de configuración del QSM) – Contiene los parámetros de interconexión con el bus intermodular, que son: el campo de arbitraje de interrupciones IARB, el bit de restricción del modo usuario SUPV, el bit FRZ1 que permite ignorar la señal FREEZE o detener el QSPI cuando el IMB activa la señal y el bit STOP que detiene el reloj del QSM. QILR (Registro de niveles de interrupción) – Permite configurar el nivel de prioridad de las interrupciones para cada uno de los módulos del 59 QSM de forma independiente por medio de los campos ILQSPI e ILSCI. Se trata de un registro de ocho bits que forma parte de la misma palabra que contiene al registro QIVR. QIVR (Registro del vector de interrupciones) – Contiene el vector de interrupción, INTV[7:0], de ambos submódulos. Cuando se escribe en este registro sólo los 7 bits de mayor peso INTV[7:1] se ven afectados ya que el valor del bit INTV0 lo proporciona el QSM, tomando valor 0 para el SCI y valor 1 para el QSPI. 2.3.4.1.1 Atención a las interrupciones Ambos submódulos disponen de niveles de prioridad independientes. El funcionamiento no difiere en esencia del resto de los módulos. Cuando la CPU32 reconoce una interrupción de este módulo coloca el valor de prioridad en la máscara de interrupciones IP y atiende la excepción salvo que exista otra del mismo nivel que deberá entonces resolverse mediante el arbitrio de interrupciones. 2.3.4.2 Registros de control de los terminales del QSM El QSM utiliza 9 terminales de los cuales ocho pueden utilizarse como E/S de propósito general. Los registros que permiten la configuración de la función de los terminales se describen a continuación: PQSPAR (Registro de asignación de pines del Puerto QS) – Se trata del byte superior de un registro de 16 bits. Al escribir un 0 en el bit asociado a cada terminal se asigna éste como E/S de propósito general. Al escribir un 1 se asigna la función asociada al QSPI. Este registro no afecta al funcionamiento de los terminales del SCI. DDRQS (Registro de dirección de los datos) – Se determina si los terminales actúan como entradas o como salidas. Escribiendo un 1 en el bit correspondiente a un terminal actúa como salida y escribiendo un 0 como entrada. PORTQS (Registro del Puerto QS) – A través de este registro se leen los terminales determinados como entrada y se escribe en los terminales de salida. 60 2.3.4.3 Interfaz de Comunicación Serie (SCI) La SCI se comunica con los dispositivos externos a través de un bus serie asíncrono, utilizando un formato de transmisión NRZ estándar. Es totalmente compatible con otros sistemas de Motorola, tales como los que incorporan el M68HC11 y M68HC05. 2.3.4.4 Registros de SCI La programación de la SCI se realiza a través de registros generales y de control de pines del QSM y de cuatro registros de la SCI, que son: dos registros de control, SCCR0 y SCCR1, un registro de estado, SCSR, y uno de datos, SCDR. 2.3.4.4.1 Registros de control SCCR0 contiene el campo de selección de la velocidad de transmisión, medida en baudios. Esta velocidad debe establecerse antes de activar la SCI. La CPU puede leer y escribir en este registro en todo momento. SCCR1 incluye varios parámetros de configuración, entre los que se incluyen los bits de activación del emisor y el receptor, los de interrupción y los del modo de funcionamiento. La CPU puede leer y escribir en este registro en cualquier momento. Si se cambia el valor de los bits de control de la SCI durante una operación de transferencia, ésta puede interrumpirse. Antes de cambiar los valores de los registros debe permitirse a la SCI terminar la transferencia en curso y, a continuación, desactivar el receptor y el transmisor. 2.3.4.4.2 Registro de estado El registro de estado de la SCI (SCSR) contiene banderas que muestran condiciones de funcionamiento de la SCI. Las banderas se borran mediante el hardware de la SCI o mediante una secuencia de lectura/escritura. Por regla general, las banderas se borran leyendo primero el SCSR y a continuación leyendo o escribiendo en el SCDR. En una lectura de doble palabra se puede acceder consecutivamente a ambos registros, SCSR y SCDR. Esta acción borra los bits de las banderas de estado de recepción que se activaron durante la lectura, pero no las de transmisión, TDRE o TC. Si la SCI envía una señal de activación de un bit de estado después de que la CPU haya leído los bits de estado, pero antes de que haya leído o escrito en el SCDR, el bit de estado afectado no se borra. 61 La lectura de cualquiera de los bytes del SCSR hace que se acceda a los 16 bits completos, y cualquier bit de estado ya activado en cualquiera de los bytes se borrará en una lectura o escritura posterior del SCDR. 2.3.4.4.3 Registro de datos El SCDR contiene dos registros de datos en la misma dirección. El RDR es un registro de sólo lectura que contiene datos recibidos por la interfaz serie de la SCI. Los datos entran al registro de desplazamiento de recepción y son transferidos al RDR. El TDR es un registro de sólo escritura que contiene datos a transmitir. Los datos se escriben primero en el TDR y a continuación se transfieren al registro de desplazamiento de transmisión, donde se añaden bits de formato y luego se transmiten. En el campo R[7:0]/T[7:0] se encuentran los primeros ocho bits de datos recibidos al leer el SCDR o los primeros ocho bits a transmitir al escribir en el SCDR. R8/T8 se utilizan cuando la SCI está configurada para funcionar con 9 bits; si está configurada para 8 bits, no tiene ninguna función. 2.3.4.5 Terminales de la SCI La SCI tiene únicamente dos terminales unidireccionales asociados y que son, el TXD (datos de transmisión) y el RXD (datos de recepción). El terminal TXD puede utilizarse también como E/S de propósito general. Su funcionamiento se asigna mediante el registro de asignación de pines del puerto QS (PQSPAR). El terminal de datos de recepción (RXD) está dedicado a la SCI. 2.3.4.6 Funcionamiento de la SCI Las banderas de estado de la SCI permiten la gestión del funcionamiento mediante “polling” o mediante interrupciones que pueden activarse con los correspondientes bits del registro SCCR1. 2.3.4.6.1 Definiciones Bit-Time (Duración de bit) - Tiempo requerido para transmitir o recibir un bit de datos; un periodo completo de la frecuencia de transmisión en baudios. Start Bit (Bit de arranque) – Se trata del primer bit de la trama de transmisión y que sirve para indicar el comienzo de una trama de datos. 62 Un bit de arranque tiene lógica cero y anuncia el inicio de la trama con una transición de uno a cero. Stop Bit (Bit de parada) - Se trata del último bit de la trama con lógica uno y que señala el final de una trama de datos. Frame (Trama) – Es una unidad completa de información en serie. La SCI puede utilizar tramas de 10 o de 11 bits. Data Frame (Trama de datos) – Consiste en una trama precedida por un bit de arranque y terminada por un bit de parada. Idle Frame (Trama nula) – Es cuando no se transmite información. Como la línea permanece de modo continuo a 1 puede considerarse como una trama de unos sin bit de arranque. Break Frame (Trama de ruptura) – Se trata de una trama que contiene sólo ceros y sin bit de parada. 2.3.4.6.2 Formatos de transmisión serie Todas las tramas de datos deben tener un bit de arranque y al menos uno de parada. Los dispositivos de recepción y transmisión deben utilizar el mismo formato de trama de datos. La SCI proporciona soporte hardware tanto para tramas de 10 como de 11 bits. El bit del modo serie (M) del registro SCCR1 de control de la SCI especifica el número de bits por trama. El formato de trama de datos de diez bits, el más habitual en los interfaces serie NRZ consiste en un bit de arranque, ocho bits de datos (primero el LSB) y un bit de parada. La trama de datos típica de once bits consta de un bit de arranque, ocho bits de datos, un bit de paridad y uno de parada. 2.3.4.6.3 Reloj de transmisión El reloj de transmisión de la SCI se programa escribiendo un valor de 13 bits en el campo de velocidad de transmisión (SCBR) del registro SCCR0 de control de la SCI. La velocidad de transmisión en baudios se obtiene a partir del reloj del sistema mediante un contador. Si se escribe un cero en el SCBR, se desactiva el generador de reloj. La velocidad de transmisión en baudios se calcula con la siguiente fórmula: Velocidad _ de _ Transmisió n Re loj _ del _ sistema 32 * SCBR 63 El valor de SCBR varía entre 1 y 8191. Como el receptor de la SCI funciona en modo asíncrono, se necesita un reloj interno para sincronizarlo con un flujo de datos entrante. El generador de reloj de la SCI produce una señal de muestreo para la recepción (RT) con un frecuencia 16 veces superior a la frecuencia de transmisión. La SCI determina los límites de la señal de bit a partir de transiciones de la onda recibida y ajusta el muestreo dentro del periodo del bit para una correcta detección. 2.3.4.6.4 Comprobación de paridad El bit de selección de tipo de paridad (PT) del SCCR1 determina si se utiliza una paridad par (PT=0) o impar (PT=1). El bit PT configura la paridad tanto de los datos recibidos como de los transmitidos. El bit de activación de paridad (PE) de SCCR1 habilita la comprobación de paridad cuando PE=1 o la inhabilita cuando PE=0. Cuando PE está a uno, se utiliza el bit más significativo de los datos de una trama para la función de paridad. Para datos enviados, se genera un bit de paridad; para datos recibidos, se comprueba dicho bit. Cuando está activada la comprobación de paridad, se pone a uno la bandera de paridad (PF) del registro de estado de la SCI (SCSR) al detectarse un error de paridad. Al mantenerse el número de bits de una trama constante cuando se activa la paridad se reduce en uno el número de bits de datos de una trama., lo que puede afectar, a su vez, al tamaño de la trama. M 0 0 1 1 PE Resultado 0 8 bits de datos 1 7 bits de datos y 1 de paridad 0 9 bits de datos 1 8 bits de datos y 1 de paridad Tabla 19 – Efecto del control de paridad en el tamaño de los datos. 2.3.4.6.5 Funcionamiento del transmisor El transmisor consta de un registro de desplazamiento y un registro de datos paralelo (TDR) accesible a través del registro de datos de la SCI (SCDR). Dispone de un buffer doble, lo que supone que se pueden cargar datos en el TDR mientras el registro de desplazamiento está transmitiendo otros. El bit de activación del transmisor (TE) de SCCR1 activa el transmisor cuando vale 1 y lo desactiva cuando vale 0. 64 La salida del registro de desplazamiento mantiene la conexión con el terminal TXD mientras el transmisor está funcionando (TE=1 o TE=0 y la transmisión en curso). Se puede seleccionar el tipo de salida del terminal TXD mediante el bit WOMS del SCCR1, de modo que si WOMS=0 presenta una salida CMOS estándar y si WOMS=1 presenta una salida en colector abierto lo que permite el funcionamiento en modo OR cableado y la convivencia de varios transmisores conectados al mismo bus. Para ello será necesario conectar una resistencia de pull-up para mantener el nivel lógico en circuito abierto. El bit WOMS controla el funcionamiento del terminal TXD independientemente de si se utiliza para transmisiones de la SCI (TE=1) o como E/S de propósito general. Los datos a transmitir se escriben en TDR y a continuación se transfieren al registro de desplazamiento serie. La bandera de registro de datos de transmisión vacío (TDRE) del SCSR muestra el estado del registro TDR. Mientras TDRE=0, el TDR contiene datos que no han sido transferidos al registro de desplazamiento. Si se escribe de nuevo en TDR se sobreescriben estos datos. El bit TDRE se activa cuando los datos de TDR son transferidos al registro de desplazamiento. Sin embargo, antes volver a escribir nuevos datos en el TDR, es necesario borrar el bit TDRE escribiendo en el registro SCSR, ya que de no hacerlo no se transmitirán los datos. La bandera de transmisión completa (TC) del registro SCSR muestra el estado del registro de desplazamiento del transmisor. Si TC=0, el registro de desplazamiento está ocupado. El bit TC se pone a uno cuando se han completado todas las operaciones de desplazamiento. El bit TC no se borra automáticamente, por tanto el procesador deberá borrarlo escribiendo en el SCSR antes de llevar nuevos datos al TDR. El estado del registro de desplazamiento serie se comprueba cuando se activa el bit TE. Si TC=1, se transmite una trama nula como preámbulo de la siguiente trama de datos; si TC=0, se continúa la operación en curso hasta el envío del bit de parada, y entonces se envía la trama nula. El bit de trama de ruptura (SBK) de SCCR1 se utiliza para insertar tramas de ruptura en una transmisión. Se transmite un número entero distinto de cero de tramas de ruptura mientras SBK está a uno. La transmisión de ruptura comienza cuando SBK se pone a uno y acaba cuando que se borra SBK o TE y finaliza la transmisión en curso. Si el bit SBK se pone a uno durante una transmisión, ésta finaliza normalmente antes de comenzar la trama de ruptura. Para garantizar el tiempo mínimo de ruptura, se debe 65 conmutar rápidamente el bit SBK a 1 y luego a 0. El bit TC se pone a 1 al final de una ruptura y se transmite al menos un periodo de bit con nivel lógico 1 para asegurar el reconocimiento del bit de arranque. Si el bit TE permanece activo, después de la transmisión de las tramas nulas, de datos o de ruptura pendientes, los bits TDRE y TC se activan y el terminal TXD se mantiene en el nivel lógico 1. Cuando se borra el bit TE, el transmisor se desactiva después de que todas las tramas nulas, de datos y de ruptura pendientes han sido transmitidas. La bandera TC se pone a uno, y el terminal TXD vuelve a ser controlado por los registros PQSPAR y DDRQS. El dato almacenado en el buffer no se transmite después de haber borrado el bit TE, por lo que para evitar la pérdida del dato del buffer, el bit TE no debe borrarse hasta recibir la confirmación de fin mediante el bit TDRE. Tanto TDRE como TC tienen asociadas interrupciones. Las interrupciones se activan con los bits TIE (Transmit Interrupt Enable) y TCIE (Transmission Complete Interrupt Enable) del registro SCCR1. Las rutinas de servicio pueden cargar el último byte de datos de una secuencia en el registro TDR y, a continuación, terminar la transmisión cuando se produce la interrupción asociada al TDRE. 2.3.4.6.6 Funcionamiento del receptor El bit de activación del receptor (RE) en el registro SCCR1 activa (RE=1) y desactiva (RE=0) el receptor. El receptor está formado por un registro de desplazamiento para la recepción de datos serie y un registro paralelo RDR accesible desde el registro de datos SCDR. La CPU no puede acceder directamente al registro de desplazamiento serie sino a través del registro RDR. La existencia de este doble buffer permite que un dato se mantenga en el RDR mientras otro dato está siendo recibido en el registro. Para la sincronización con la trama de datos serie entrante, el receptor dispone de una unidad de proceso de bits que conforma una máquina de estados capaz de determinar el nivel lógico de cada ciclo de bit. Esta máquina de estados controla el instante de muestreo del terminal RXD y la sincronización con el registro de desplazamiento del receptor y utiliza un reloj de recepción 16 veces más rápido que el reloj del sistema. Los bits que entran por el terminal RXD se sincronizan antes de entrar en el registro de desplazamiento y a partir de ese punto el flujo de datos va sincronizado con el reloj del sistema. 66 El número de bits que el receptor introduce en el registro de desplazamiento depende del formato seleccionado. En cualquier caso, todas las tramas deben finalizar con un bit de parada. Una vez recibido el bit de parada se considera completa la trama y se transfiere al registro RDR el dato, poniéndose a 1 la bandera del registro de datos del receptor. Los errores de paridad, de trama y los debidos al ruido se detectan mientras se recibe la cadena de datos. Pese a ello, las banderas de señalización de ruido (NF), de paridad (PF) y de error de trama (FE) de SCSR no se activan hasta que el dato se transfiere al registro RDR. Debe borrarse el bit RDRF antes de que tenga lugar la siguiente transferencia desde el registro de desplazamiento. Si el bit RDRF permanece a uno cuando el registro de desplazamiento está lleno, las transferencias se suspenden y la bandera de error de desbordamiento (OR) del SCSR se pone a uno. El bit OR indica que la CPU necesita dar un servicio más rápido a RDR. Cuando el bit OR se pone a uno, el dato de RDR se conserva, pero el del registro de desplazamiento se pierde. Cuando la CPU lee los registros SCSR y SCDR secuencialmente primero adquiere el estado del registro SCSR y con ello se activa el mecanismo de borrado y después con la lectura del registro SCDR se obtiene el dato, acción ésta con la que se borran las banderas del registro SCSR. Cuando el bit RIE del registro SCCR1 se pone a uno, se genera una petición de interrupción cada vez que el bit RDRF se activa. 2.3.4.6.7 Detección de línea desocupada Durante una transmisión serie típica, las tramas se transmiten de forma consecutiva sin intervalos de espera entre tramas. Incluso aunque todos los bits de una trama sean unos lógicos, el bit de arranque proporciona un periodo con un cero lógico durante la trama. Una línea desocupada es una secuencia de unos consecutivos de igual tamaño que la trama. El tamaño de trama viene determinado por el bit M de SCCR1. El receptor de la SCI es capaz de realizar tanto una detección corta como larga de la línea desocupada. En la detección corta se inicia la cuenta de periodos a nivel lógico uno en cualquier instante dentro de una trama incluyéndose en la cuenta el bit de parada y los unos consecutivos que le precedan. De esta forma se detecta la ausencia del bit de arranque lo antes posible. En la detección larga la cuenta se inicia después del bit de 67 parada. La detección de línea desocupada está siempre activa. El bit ILT determina el tipo de detección a aplicar. Si ILT=0 se aplica la detección corta y si ILT=1 se aplica la detección larga. Cuando se detecta la condición de línea desocupada, se pone a uno la bandera IDLE. En algunas aplicaciones la sobrecarga de la CPU puede introducir un periodo de nivel lógico uno entre tramas. Este periodo no afecta al contenido, pero si se produce después de una trama de unos cuando está activada la detección corta, el receptor activa la bandera de línea desocupada. Cuando el bit de activación de interrupción por línea desocupada (ILIE) de SCCR1 está a uno, se genera una petición de interrupción cuando la bandera IDLE se activa. La bandera se borra leyendo SCSR y SCDR consecutivamente. IDLE no vuelve a ponerse a uno hasta después de haberse recibido al menos una trama (RDRF=1). Esto evita que un intervalo desocupado largo genere más de una interrupción. 68 69 ÍNDICE DE CONTENIDO 2. MONTAJE Y DESCRIPCIÓN DE LA PLACA ENTRENADORA BASADA EN EL MICROCONTROLADOR MOTOROLA 68331 ............................................. 1 2.1 ANTECEDENTES ............................................................................................................................ 1 2.2 INSTRUCCIONES DE MONTAJE ................................................................................................ 2 2.2.1 MICROCONTROLADOR ................................................................................................................ 3 2.2.2 REGULADOR DE TENSIÓN ........................................................................................................... 4 2.2.3 REPLANTEO GENERAL DEL CIRCUITO ......................................................................................... 5 2.2.4 CIRCUITO DE RELOJ .................................................................................................................... 5 2.2.5 FILTROS DE RELOJ DEL SISTEMA ................................................................................................. 6 2.2.6 CIRCUITO DE CONFIGURACIÓN DEL MICRO ................................................................................. 7 2.2.7 RESET DEL SISTEMA .................................................................................................................... 8 2.2.8 RESISTENCIAS DE PULL-UP ....................................................................................................... 10 2.2.9 ALIMENTACIÓN DEL MICROCONTROLADOR .............................................................................. 11 2.2.10 PRUEBA DE FUNCIONAMIENTO ................................................................................................. 11 2.2.11 COMUNICACIÓN BDM (BACKGROUND DEBUG MODE) ............................................................. 12 2.2.12 MEMORIA ................................................................................................................................. 15 2.2.13 COMUNICACIÓN SERIE.............................................................................................................. 16 2.3 DESCRIPCIÓN DE FUNCIONAMIENTO ................................................................................. 19 2.3.1 MÓDULO DE INTEGRACIÓN DE SISTEMAS (SIM) ....................................................................... 19 2.3.1.1 Terminales del SIM ............................................................................................................. 20 2.3.1.2 Subsistema de configuración y protección ......................................................................... 21 2.3.1.2.1 Ubicación de los registros en memoria.................................................................................... 21 2.3.1.2.2 Configuración tras el Reset...................................................................................................... 21 2.3.1.2.3 Arbitraje de interrupciones ...................................................................................................... 22 2.3.1.2.4 Supervisión del bus externo durante trasferencias internas ..................................................... 22 2.3.1.2.5 Modo Verificación en fábrica. ................................................................................................. 23 2.3.1.2.6 Accesibilidad de los registros del SIM .................................................................................... 23 2.3.1.2.7 Causa del último Reset ............................................................................................................ 23 2.3.1.2.8 Supervisión del Bus Interno .................................................................................................... 24 2.3.1.2.9 Supervisión de Parada (Halt) .................................................................................................. 24 2.3.1.2.10 Supervisión de interrupciones espúreas ................................................................................... 24 2.3.1.2.11 Supervisión SW ....................................................................................................................... 25 2.3.1.2.12 Interrupciones periódicas: el PIT............................................................................................. 25 2.3.1.2.13 Funcionamiento en bajo consumo ........................................................................................... 27 2.3.1.2.14 Funcionamiento durante la depuración.................................................................................... 27 2.3.1.3 Reloj del sistema ................................................................................................................. 28 I 2.3.1.3.1 Reloj del sistema externo ........................................................................................................ 28 2.3.1.3.2 Reloj de referencia externo...................................................................................................... 28 2.3.1.3.3 Generación de reloj para un bus externo síncrono ................................................................... 29 2.3.1.3.4 Generación de reloj en bajo consumo ..................................................................................... 29 2.3.1.3.5 Supervisión del reloj de referencia .......................................................................................... 29 2.3.1.4 Interfaz del bus externo asíncrono: EBI ............................................................................. 29 2.3.1.4.1 Temporización del bus externo ............................................................................................... 30 2.3.1.4.2 Tamaño dinámico del bus de datos ......................................................................................... 30 2.3.1.4.3 Los códigos de función ........................................................................................................... 31 2.3.1.4.4 Puntos de ruptura..................................................................................................................... 32 2.3.1.4.5 Cesión del bus ......................................................................................................................... 32 2.3.1.5 Interrupciones..................................................................................................................... 33 2.3.1.5.1 Fuentes de interrupción externas ............................................................................................. 33 2.3.1.5.2 Arbitraje de interrupciones simultáneas .................................................................................. 33 2.3.1.5.3 Ciclo de reconocimiento y confirmación de una interrupción externa .................................... 33 2.3.1.6 Lógica de direcciones ......................................................................................................... 34 2.3.1.6.1 Registros de configuración de la lógica de direcciones: CSBORBT y CSOR0..CSOR10 ...... 34 2.3.1.6.2 Registros de configuración de la dirección base: CSBARBT y CSBAR0..CSBAR10 ............ 35 2.3.1.7 Inicialización del SIM ......................................................................................................... 36 2.3.2 TEMPORIZADOR DE PROPÓSITO GENERAL (GPT) ...................................................................... 38 2.3.2.1 Registros del GPT y mapa de direcciones .......................................................................... 39 2.3.2.2 Funcionamiento por “polling” o por interrupciones ......................................................... 39 2.3.2.2.1 Funcionamiento por “polling” ................................................................................................. 40 2.3.2.2.2 Interrupciones del GPT ........................................................................................................... 41 2.3.2.3 Descripción de los terminales ............................................................................................ 42 2.3.2.3.1 Terminales de captura de entradas (IC[1:3]) ........................................................................... 42 2.3.2.3.2 Terminal de captura de entrada / comparación de salida (IC4/OC5) ....................................... 42 2.3.2.3.3 Terminales de comparación de salidas (OC[1:4]) ................................................................... 43 2.3.2.3.4 Terminal de entrada del acumulador de pulsos (PAI) ............................................................. 43 2.3.2.3.5 Terminales de modulación de ancho de pulso (PWMA, PWMB) ........................................... 43 2.3.2.3.6 Entrada auxiliar de reloj del temporizador (PCLK) ................................................................. 43 2.3.2.4 E/S de propósito general .................................................................................................... 43 2.3.2.5 Preescalador....................................................................................................................... 44 2.3.2.6 Unidad de captura/comparación ........................................................................................ 46 2.3.2.6.1 Contador del Temporizador..................................................................................................... 46 2.3.2.6.2 Funciones de captura de entradas ............................................................................................ 47 2.3.2.6.3 Funciones de comparación de salidas...................................................................................... 48 2.3.2.6.3.1 Comparación de salida 1 .................................................................................................... 49 2.3.2.6.3.2 Comparación de salida forzada .......................................................................................... 49 2.3.2.6.4 Captura de entrada 4 / Comparación de salida 5 ..................................................................... 49 2.3.2.7 Acumulador de pulsos ........................................................................................................ 50 2.3.2.8 Unidad de modulación de ancho de pulso .......................................................................... 51 2.3.2.8.1 Contador PWM ....................................................................................................................... 51 II 2.3.2.8.2 2.3.3 Función PWM ......................................................................................................................... 52 UNIDAD CENTRAL DE PROCESO (CPU32) ................................................................................. 53 2.3.3.1 Registros de la CPU32 ....................................................................................................... 54 2.3.3.2 Modos de direccionamiento ................................................................................................ 56 2.3.3.2.1 Nuevos modos de direccionamiento ........................................................................................ 56 2.3.3.3 Instrucciones de la CPU32 ................................................................................................. 56 2.3.3.3.1 Nuevas instrucciones ............................................................................................................... 57 2.3.3.4 Depuración en segundo plano (BDM) ................................................................................ 58 2.3.4 MÓDULO DE COMUNICACIONES SERIE (QSM) .......................................................................... 59 2.3.4.1 Registros generales del QSM.............................................................................................. 59 2.3.4.1.1 Atención a las interrupciones .................................................................................................. 60 2.3.4.2 Registros de control de los terminales del QSM ................................................................. 60 2.3.4.3 Interfaz de Comunicación Serie (SCI) ................................................................................ 61 2.3.4.4 Registros de SCI ................................................................................................................. 61 2.3.4.4.1 Registros de control................................................................................................................. 61 2.3.4.4.2 Registro de estado ................................................................................................................... 61 2.3.4.4.3 Registro de datos ..................................................................................................................... 62 2.3.4.5 Terminales de la SCI .......................................................................................................... 62 2.3.4.6 Funcionamiento de la SCI .................................................................................................. 62 2.3.4.6.1 Definiciones ............................................................................................................................ 62 2.3.4.6.2 Formatos de transmisión serie ................................................................................................. 63 2.3.4.6.3 Reloj de transmisión ................................................................................................................ 63 2.3.4.6.4 Comprobación de paridad ....................................................................................................... 64 2.3.4.6.5 Funcionamiento del transmisor ............................................................................................... 64 2.3.4.6.6 Funcionamiento del receptor ................................................................................................... 66 2.3.4.6.7 Detección de línea desocupada................................................................................................ 67 III