Laboratorio de Sistemas Electrónicos Departamento de Ingeniería Electrónica E.T.S.I. de Telecomunicación Universidad Politécnica de Madrid Características de Antares Plan 94. Curso 2005-2006. Versión 1.0 Alvaro Araujo Pinto ÍNDICE GENERAL 1 OBJETIVOS .................................................................................................................................................................. 3 2 INTRODUCCIÓN ...................................................................................¡ERROR! MARCADOR NO DEFINIDO. 3 DESCRIPCIÓN GENERAL DEL SISTEMA ....................................¡ERROR! MARCADOR NO DEFINIDO. 3.1 EQUIPOS TERMINALES ..................................................................................¡ERROR! MARCADOR NO DEFINIDO. 3.1.1 Acceso a zonas protegidas...........................................................................¡Error! Marcador no definido. 3.1.2 Monitorización de dispositivos....................................................................¡Error! Marcador no definido. 3.2 EQUIPOS DE CONTROL...................................................................................¡ERROR! MARCADOR NO DEFINIDO. 4 TECNOLOGÍA A EMPLEAR ..............................................................¡ERROR! MARCADOR NO DEFINIDO. 4.1 EQUIPOS TERMINALES ..................................................................................¡ERROR! MARCADOR NO DEFINIDO. 4.1.1 Elementos de control....................................................................................¡Error! Marcador no definido. 4.1.2 Subsistema de entrada .................................................................................¡Error! Marcador no definido. 4.1.3 Subsistema de salida ....................................................................................¡Error! Marcador no definido. 4.1.4 Subsistema de comunicación.......................................................................¡Error! Marcador no definido. 4.1.5 Subsistema de almacenamiento...................................................................¡Error! Marcador no definido. 4.2 EQUIPOS DE CONTROL...................................................................................¡ERROR! MARCADOR NO DEFINIDO. 5 PLANIFICACIÓN ...................................................................................¡ERROR! MARCADOR NO DEFINIDO. 2 1 Objetivos El objetivo de este manual es servir de introducción a las características fundamentales de la plataforma de desarrollo Antares utilizada en el Laboratorio de Sistemas Electrónicos. 2 Características hardware generales Las características genéricas de Antares son las siguientes: 1. Microprocesador de 32 bits MCF5272 de Motorola. 2. Memoria SDRAM (16 Mbytes). 3. Memoria Flash (4 Mbytes). 4. Interfaz Ethernet para conexión a una red de área local. 5. Dos interfaces serie RS-232. 6. Un interfaz USB esclavo. 7. Un interfaz BDM/JTAG para depuración y programación de la memoria Flash. 8. Ocho salidas digitales de nivel LCMOS1. 9. Ocho entradas/salidas digitales de nivel LCMOS. 10. Cuatro LEDs indicadores de proposito general. 11. Bus de expansión. 12. Alimentación de entrada 8-14 Voltios. 3 3 Microprocesador El microcontrolador MCF5272 está formado por diferentes bloques funcionales, que son los siguientes: • Procesador Coldfire V2: El controlador tiene como procesador un núcleo de Coldfire versión 2. Esta es la primera versión de núcleo de Coldfire propiamente dicho, si no tenemos en cuenta el núcleo del microcontrolador MCF5102, que era un híbrido de arquitectura Coldfire y 68000. Se trata de un procesador RISC de 32 bits, con una velocidad de reloj de 66 MHz, y con una unidad de multiplicación/acumulación (MAC), además de un módulo para la relización de divisiones de enteros. Como ya se ha comentado, permite además la ejecución de instrucciones de longitud variable de 16, 32 ó 48 bits. • 1KByte de caché de instrucciones: Esta memoria caché de instrucciones permite aumentar el rendimiento del controlador, ya que se trata de una memoria muy rápida que aumenta la velocidad de ejecución de estructuras de código repetitivas como pueden ser los bucles. • 4KBytes de memoria interna SRAM: Se trata de memoria que puede ser usada de la misma manera que la memoria externa, con la diferencia de que es mucho más rápida, con lo que puede usarse para las tareas más críticas en tiempo (tiempo real, procesado de audio, etc). • Módulo de depuración: El controlador ofrece un módulo que permite la depuración a través de un interfaz JTAG/BDM, lo que facilita en gran medida la labor de desarrollo sobre este microcontrolador. 4 4 • Controlador Ethernet 10/100: El microprocesador incluye un controlador Ethernet 10/100 para permitir la conexión del sistema a redes de área local. • Controlador USB 1.1 modo dispositivo: Este bloque permite al controlador comportarse como un dispositivo dentro de la norma USB 1.1, lo que permite conectarlo a otros dispositivos de la red, siempre que uno de ellos haga el papel de maestro(“host”). • Módulo QSPI: Este módulo permite controlar hasta 16 dispositivos con interfaz SPI, realizando el papel de maestro. Sin embargo, este módulo no puede comportarse como esclavo, por lo que no puede ser controlado por otros dispositivos SPI. • Controlador SDRAM: Gracias al controlador de SDRAM integrado, podemos dotar a nuestro sistema de memoria SDRAM. • Tres salidas PWM: Para la realización de tareas de control, el controlador posee tres moduladores por anchura de pulso(PWM), configurables de manera independiente. • Cuatro puertos TDM: Los cuatro puertos de multiplexación por división en el tiempo (TDM) permiten conectar este microcontrolador a interfaces RDSI. • Dos UARTs: El MCF5272 ofrece dos interfaces series asíncronos (UART), que permiten la comunicación con otros dispositivos como pueden ser un Terminal de consola, o un módem. • Un canal DMA: El canal de acceso directo a memoria (DMA) permite planificar transferencias de datos entre distintas zonas de memoria/dispositivos sin la intervención del procesador. • Ocho “chip-selects”: Este módulo permite conectar al mismo bus que el microcontrolador hasta ocho dispositivos/memorias, sin necesidad de ninguna lógica adicional. • Trés E/S genéricas de 16 bits: Tenemos disponibles un máximo de 48 bits de entrada/salida. Ocho de ellos son fijos, mientras que el resto están multiplexados con otras funciones del microcontrolador. • Cuatro temporizadores de 16 bits: Gracias a este módulo se pueden realizar tareas de control periódicas de una manera muy sencilla. • Watchdog software: Este módulo es muy importante en los sistemas empotrados, ya que permite detectar si el sistema no funciona bien, reiniciándolo en ese caso. Esto es de mucha utilidad en el caso de sistemas de control, ya que permite realizar una parada segura del sistema en el caso de que se detecte un mal funcionamiento. Memoria Aprovechando el controlador SDRAM integrado en el MCF5272, hemos dotado a nuestro sistema de este tipo de memoria. El controlador integrado utiliza la línea chip-select 7 del microprocesador para el control del banco de memoria SDRAM. Antares lleva dos módulos de memoria SDRAM del modelo MT48LC4M16A2, configurados en paralelo formando un bus de 32 bits, lo que da lugar a un total 16 Mbytes de memoria RAM. Para el almacenamiento de información de manera no volátil, Antares utiliza memoria de tipo Flash. La plataforma ha sido diseñada para tener 2 ó 4 Mbytes de memoria Flash. Esto ha sido así para que las aplicaciones que no requieran de una gran cantidad de espacio de almacenamiento puedan ser fabricadas con solo 2 Mbytes, abaratando así el precio del sistema. Para ello se utilizan dos líneas del módulo chip-select, para seleccionar los dos módulos de 5 memoria Flash. Las líneas que se utilizan son CS0 y CS1. De los dos módulos de memoria, solo el conectado a la línea CS0 es obligatorio, debido a que el MCF5272 activa dicha linea durante la inicialización, obteniendo de la memoria conectada a ella el puntero de pila, y la dirección de la primera instrucción a ejecutar. Por tanto, el código que se ejecuta cada vez que se inicializa Antares es el almacenado en la memoria Flash conectada a la linea CS0. Ambos módulos de memoria son idénticos, y el modelo de memoria que se ha utilizado es el MBM29LV160BE de Fujitsu. Estos módulos tienen unos tiempos de acceso de 70ns ó 90ns, dependiendo del modelo. Los módulos instalados en Antares tienen tiempos de acceso de 90ns. En nuestro sistema la Flash está configurada para utilizar 16 bits del bus de datos. 5 Interfaces Por interfaces de la plataforma consideramos todas las partes de la misma que le permiten la comunicación con su entorno. Antares utiliza estos interfaces para comunicarse tanto con el usuario como con los dispositivos que debe controlar. 5.1 Interfaz Ethernet El interfaz Ethernet de Antares consta de diferentes partes. En primer lugar se encuentra el controlador integrado en el MCF5272, que es el encargado de realizar las funciones de control de acceso al medio compartido (MAC). En segundo lugar tenemos un circuito integrado que se conectará al MCF5272, y que ofrece las funciones de nivel físico del interfaz. Por último, el interfaz se completa con la inclusión de unos transformadores que realizan la conversión de niveles de tensión, y un conector RJ-45 al que se enchufará un par trenzado de red convencional. Resumiendo, los bloques del interfaz Ethernet son los siguientes: 1. Conector RJ-45 2. Transformadores 3. Transceptor DP83846A 4. Controlador de acceso al medio (MCF5272) 5.2 Interfaz USB El protocolo de comunicaciones USB define dos entidades distintas en la comunicación: concentrador y dispositivo. El concentrador es el responsable de gestionar la comunicación, dando permiso a los diferentes dispositivos conectados a él. El controlador integrado en MCF5272, permite al mismo comportarse como dispositivo en un entorno USB, pero no permite realizar las funciones de concentrador. A diferencia de lo que ocurría con el controlador Ethernet, el controlador USB del MCF5272 lleva un transceptor interno que permite la conexión directa a la linea sin más que añadir un conector USB de tipo dispositivo. No obstante, el microcontrolador está preparado para permitir la conexión de un transceptor externo si fuera necesario. 5.3 Interfaz serie Como ya se ha visto anteriormente, el microcontrolador MCF5272 tiene integradas dos UARTs completas, que permiten la comunicación con otros dispositivos mediante una linea serie. Estos dispositivos pueden ser otros sistemas empotrados, un terminal de consola, etc. En este sentido 6 las UARTs del microcontrolador trabajan con niveles de tensión LCMOS (0 - +3.3V), por tanto, si queremos que sean compatibles con los niveles de tensión RS-232 (-12V - +12V) debemos añadir un módulo que realice la conversión de niveles de tensión. Ésta es la función de los integrados ICL3232. El último componente de este interfaz son los conectores. Estos conectores son del tipo DB-9 macho, iguales a los que se pueden encontrar en un PC de sobremesa. . La finalidad es que pueda conectarse a Antares cualquier dispositivo que pudiera conectarse a un PC, como por ejemplo un módem. 5.4 Entrada/Salida digitales La plataforma Antares cuenta con dos puertos digitales de 8 bits cada uno. De estos dos puertos, uno de ellos es bidireccional, y lo denominaremos Puerto 1. El otro puerto es un puerto de salida exclusivamente, y lo denominaremos Puerto 0. En la figura podemos ver la colocación de los puertos en la placa, así como la posición del bit más significativo de cada uno de los puertos. El Puerto 0 utiliza una de las lineas de chip-select (CS2) para habilitar un buffer de salida que almacenará el valor disponible en el bus de datos en ese momento. Este será el valor que podrá leerse en el puerto. El Puerto 1 utiliza uno de los puertos de entrada/salida de propósito general que ofrece el MCF5272. Por ello, antes de poder utilizarlo, deberemos configurarlo de manera que se adapte a nuestras necesidades. Este puerto permite la configuración de la dirección (entrada ó salida) de cada uno de los pines de manera independiente. Los niveles de tensión con los que trabajan ambos puertos son LCMOS de 3.3V, con lo que a la hora de conectar nuestra plataforma con otros dispositivos habrá que tener en cuenta la compatibilidad entre los niveles de ambos. 5.5 Bus de expansión El bus de expansión de Antares consta de dos conectores paralelos CN2 y CN3, a los cuales se han llevado las señales del MCF5272 más relevantes para permitir la extensión de la plataforma mediante tarjetas que se enchufarán a dichos conectores. Entre estas señales se encuentran los buses de datos y direcciones, lineas de interrupción, lineas del banco de SDRAM, etc. En la figura se ve la correspondencia entre las señales del bus de expansión y los dos conectores de la placa. 7 6 Esquemáticos 8 9 10 11 12 13 14 7 7.1 Interrupciones Programación de rutinas de interrupción En este apartado vamos a ver los pasos que debemos seguir para poder utilizar las interrupciones del MCF5272. Este micro dispone de 7 líneas de interrupción externas, siendo 6 de ellas enmascarables. Además de las líneas de interrupción externas, los módulos integrados del micro se pueden configurar para que funcionen mediante interrupciones. Los pasos generales que debemos seguir, independientemente de que trabajemos sobre el micro desnudo, o sobre el sistema operativo, son los siguientes. • Configurar el hardware que pedirá interrupción (nivel de interrupción, etc...). • Programar la rutina de atención a la interrupción. • Registrar la rutina de atención a la interrupción. • Habilitar la interrupción correspondiente en el micro. A continuación veremos como programar y registrar las rutinas de atención a la interrupción tanto sin sistema operativo como sobre uClinux. 7.2 Interrupciones sobre el micro sin sistema operativo. En este apartado nos basaremos en las fuentes del CoLiLo. En ellas configuramos uno de los temporizadores del micro, en concreto el Timer 0 para que pida interrupción cada 1 ms. En la rutina de atención a la interrupción se incrementa en 1 el valor de una variable inicializada a 0 (rtime_msecs), que contendrá el tiempo en milisegundos desde que se arranco el sistema. En primer lugar tenemos que definirnos unas macros de ensamblador que nos permitan entre otras cosas habilitar y deshabilitar las interrupciones, salvar y restaurar el estado del micro (registros de datos y direcciones), y realizar el retorno de excepción. En nuestro caso, el fichero donde se definen estas macros es en “system.h”. A continuación nos creamos la rutina de atención a la interrupción. Dicha rutina de atención a la interrupción tendrá el siguiente aspecto. #include ”system.h” void rutina_int(void) { save_state(); /* * Aquí atenderíamos a la interrupción */ restore_state(); rte(); } Lo siguiente que debemos hacer es registrar dicha rutina en la tabla de vectores de interrupción para asociarla a la interrupción que corresponda. Para ello añadimos el símbolo con el nombre de la rutina de atención a la interrupción a la tabla de vectores en la posición que corresponda. Dicha tabla de vectores está definida en el fichero “boot.S”. Por último, una vez instalada la rutina de atención a la interrupción debemos configurar el hardware para que pida interrupción. En nuestro caso debemos programar el Timer 0 para que pida interrupción cada 1 ms. Esta configuración la hace el CoLiLo en el dichero “main.c”. Finalmente debemos habilitar en el micro la interrupción correspondiente, y configurar la mascara de interrupciones. 15 7.3 Interrupciones sobre uClinux. En este caso la instalación de un manejador para interrupciones es mucho más sencilla que en el caso anterior. La instalación del manejador la hará el driver que programemos para el dispositivo en cuestión. Para más información sobre la programación de drivers para Linux se puede consultar. El registro de la rutina de atención a la interrupción debe hacerlo el driver en algún momento. En nuestro caso, como realizamos los drivers como módulos que se enlazan dinámicamente con el kernel, registraremos la rutina de atención a la interrupción en el momento de cargar el driver. En este caso, la rutina de atención a la interrupción tiene el siguiente prototipo. void rutina_interr(int , void *, struct pt_regs *); Para instalar y desinstalar la rutina utilizaremos las siguientes funciones, definidas en <linux/sched.h>. /* Para instalar el manejador “manejador_int” */ int request_irq(int vector, void (*manejador_int) (int, void *, struct pt_regs *), unsigned long flags, const char *device, void *dev_id); /* Para desinstalar el manejador de la interrupción irq */ void free_irq(unsigned int irq, void *dev_id); Después de haber instalado el manejador de interrupciones debemos configurar el hardware de nuestro dispositivo, así como habilitar la interrupción correspondiente en el micro. Por ejemplo, si quisiéramos registrar una rutina de atención a la interrupción para el Timer 0, como en el caso anterior tendríamos que declarar la rutina de atención a la interrupción de la siguiente manera: void manejador_timer(int id, void *p, struct pt_regs *regs) { /* * Aqui atenderíamos a la interrupción */ } En el driver instalaríamos la rutina de la siguiente manera: #include <linux/sched.h> ... /* Registramos la rutina de atención a la interrupción */ request_irq(69, manejador_timer, SA_INTERRUPT, “timer0”,NULL); /* El valor 69 se debe a que estamos registrando la interrupción 69, que es la que corresponde al timer 0. Para ver que interrupciones existen en el MCF5272 consultar Manual del microcontrolador */ Finalmente, a la hora de descargar el driver, éste debería desinstalar las rutinas de interrupción que hubiera registrado previamente. Para ello utilizaremos la siguiente función. #include <linux/sched.h> 16 ... /* Desinstalamos el manejador del Timer 0 */ free_irq (69, NULL); 17