Programa de Postgrados en Ingeniería Eléctrica y Electrónica Arquitectura de Procesos Industriales Unidad 2 Interfaz con Memoria y E/S Autor Profesor Eval Bladimir Bacca Cortés Ing. Electrónico Mg. En Automática Programa de Postgrados en Ingeniería Eléctrica y Electrónica Escuela de Ingeniería Eléctrica y Electrónica Dirección de Nuevas Tecnologías y Educación Virtual Vicerrectoría Académica Universidad del Valle ©2007 Ficha Técnica Coordinador de Programa Académico Humberto Loaiza Correa Diseño Gráfico Edinson Largo Hoyos Montaje e Ilustración Karol Johanna Romero Villota Programación Sandra Lorena Mayorga Muriel Asesoría Metodológica Oscar Trejos Sinisterra Pacífico Abella Millán Coordinación Programación Henry A. Taquez Quenguán Coordinación Diseño Gráfico Karen Ramírez González Diagramación Versión Imprimible John Jairo Toro Londoño / Sadua Vanessa Aristizabal Programa de Postgrados en Ingeniería Eléctrica y Electrónica Escuela de Ingeniería Eléctrica y Electrónica Dirección de Nuevas Tecnologías y Educación Virtual Vicerrectoría Académica Universidad del Valle ©2007 Tabla de Contenido Introducción Objetivos 5 5 Contenido Tema Tema Tema Tema Tema 1. 2. 3. 4. 5. Unidad de Interfaz con Memoria Mapa de Memoria Casos de Estudio Interfaz con E/S Interfaz de E/S Mapeada en Memoria Resumen Actividades de Aprendizaje Lecturas Complementarias Bibliografía 5 8 9 21 26 32 32 33 33 Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Introducción E n esta guía se considerará el tema de la interfaz con memoria, ya sea para programa, datos o E/S. Aunque bajo la perspectiva del curso no es necesario que el estudiante implemente interfaces de memoria adicionales a las que actualmente cuentan los sistemas de desarrollo empleados, pero, desde el punto de vista de programación se debe hacer énfasis en el manejo de la memoria disponible y como usarla adecuadamente. Se hace distinción explícita entre la memoria de programa y/o datos y la memoria dedicada a E/S, ya que, como es sabido, aunque un microcontrolador posee un buen número de periféricos, normalmente, se necesita la conexión de otro tipo de sistemas de E/S que deben hacer parte del mapa de memoria para que el microcontrolador pueda acceder a sus servicios, por lo tanto, cada plataforma tendrá sus ventajas, desventajas y restricciones, aspectos que esta guía pretende resolver. Objetivos • Estudiar brevemente la evolución histórica de los microprocesadores, microcontroladores y sistemas embebidos • Revisar los conceptos básicos de las estrategias de programación. Contenidos Tema 1. Unidad de Interfaz con Memoria Antes de iniciar con los conceptos básicos de la interfaz de memoria, sus funciones y los casos especiales para los microcontroladores que se trabajarán en el curso, es adecuado que recuerde los conceptos de memoria física, lógica, memoria combinada, segregada y E/S mapeada en memoria. • Memoria Lógica Está medida en bytes, o sea, tiene un ancho de palabra de 8 bits siempre. Describe el total de memoria que un procesador puede acceder, por lo tanto varía dependiendo del procesador, ésta puede ir desde 1Mbyte, 16Mbytes, 4Gbytes, etc. Esta cantidad de memoria está intrínsecamente relacionada con el tamaño del bus de direcciones del procesador, su ancho especifica el tamaño de memoria accedida. • Memoria Física Esta memoria está medida en diferentes tamaños de palabra, dependiendo del Unidad 2: Interfaz con Memoria y E/S Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales ancho del bus del microprocesador, es decir, ya sea 8, 16, 24, 32, 64, 128 bits. Teniendo en cuenta esta restricción, la memoria física es la memoria hace referencia a la memoria que está físicamente implementada en la tarjeta madre del sistema de acuerdo con todas las técnicas digitales de paginación y direccionamiento de la misma. Para un procesador de 8 bits no existe diferencia, sin embargo para uno de 16 bits, la memoria debe estar (desde el punto de vista del hardware) distribuida en bancos de 16 bits, ya que se acceden simultáneamente a dos bytes; para uno de 32 bits son 4 bancos de 8 bits y así sucesivamente. • Memoria Segregada La memoria segregada es la que parte el mapa de memoria en código y datos, de tal manera que hay una señal que es generada por el hardware del microcontrolador para atacar ya sea a los datos o al código, esto posee ventajas y desventajas como se citan a continuación: - Permite un mayor almacenamiento de datos. - Permite un mayor almacenamiento de código. - Desde el punto de vista de un programa de alto nivel, las constantes pueden ser tomadas como datos o código dependiendo del compilador empleado. - En el momento de emplear al microcontrolador como parte de una tarjeta de evaluación puede ser inconveniente debido a que el programa de usuario, descargado desde el PC, se tomaría como datos y no como código. - Desde el punto de vista del hardware, la decodificación de direcciones para puertos y/o memoria debe tener en cuenta una señal más para su implementación. • Combinada Este mapa de memoria es exactamente lo opuesto del anterior, los datos y el código comparten un solo mapa de memoria. Esto posee sus ventajas y desventajas: - Este tipo de implementación es mucho más sencillo de decodificar y administrar. - El hardware de soporte para interconectar al microcontrolador con memoria y/o periféricos externos es más reducido. - El tamaño físico de la memoria es reducido • E/S Mapeada en Memoria Algunas plataformas basadas en microprocesadores, como son la familia de procesadores Intel x86, poseen un rango de direcciones distinto para acceder a dispositivos de E/S, sin embargo, muchos microcontroladores y otras familias de procesadores poseen un único rango de direcciones para poder acceder tanto a datos como a E/S; a esta última estrategia se le conoce como E/S “mapeada” en memoria. Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Unidad de interfaz con memoria La interfaz de memoria de un sistema basado en microcontroladores posee las siguientes funciones principales: • Proveer las señales necesarias para permitir la expansión de memoria Esto es, aunque un sistema microcontrolado puede ser autónomo respecto a la memoria de programa y datos que está empleando, las aplicaciones que se quieran implementar pueden en cierto momento emplear una cantidad de memoria mucho más alta que la que el microcontrolador tiene implementada internamente; por lo tanto, la interfaz de memoria debe definir un conjunto de señales necesarias para implementar la memoria restante externamente, ya sea para albergar código, datos u otras interfaces de E/S. • Definir el mapa de memoria dependiendo del modo de operación del microcontrolador. Actualmente, muchos microcontroladores poseen varios modos de operación en los cuales se definen diferentes mapas de memoria que el usuario puede emplear; entonces, la unidad de interfaz de memoria debe ser capaz de cambiar el acceso a la memoria de acuerdo al modo de operación vigente. Ejemplos comunes son los microcontroladores de Motorola, Dallas Semiconductor o de Rabbit Semiconductor. • Garantizar un adecuado acceso a los registros de configuración de cada uno de los periféricos. Dado que cada microcontrolador posee un conjunto de periféricos internos, los cuales deben ser programados y puestos a funcionar de alguna manera, y cada uno de estos periféricos posee un conjunto de registros de 8 o 16 bits que hacen parte del mapa de memoria del microcontrolador, entonces, la interfaz de memoria debe ser capaz de identificar este tipo de accesos y diferenciarlos de accesos a código, datos u otras interfaces de E/S. • Teniendo en cuenta el mapa de memoria vigente, emitir las correspondientes señales internas o externas al dispositivo para acceder a un dato específico. • Dependiendo del tipo de dato a transferir (8, 16, 32 bits, etc.) emitir las señales de interfaz adecuadas. Es decir, la interfaz de bus, de acuerdo al ancho del dato solicitado, debe ser capaz de emitir las señales de lectura, escritura, habilitación y dirección adecuadas para poder acceder al dato; además, ciertos microcontroladores poseen la característica de detectar dinámicamente el ancho de bus dependiendo de los bancos de memoria que se quieran acceder, entonces la interfaz de memoria debe adecuar su lógica a estos cambios. Unidad 2: Interfaz con Memoria y E/S Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales • Identificación automática de los segmentos de memoria que la CPU está empleando. Esto hace referencia a que se tienen diferentes tipos de memoria, como se vio anteriormente, una dedicada a almacenar código y otra a datos, por lo tanto la interfaz de memoria debe emitir las señales correspondientes para que los dispositivos conectados sean adecuadamente seleccionados y los datos requeridos correspondan a los solicitados. Tema 2. Mapa de Memoria El mapa de memoria de un sistema basado en microcontroladores o procesadores especifica el rango de direcciones que el dispositivo puede acceder y lo más importante: su organización. Generalmente un mapa de memoria contiene: • Rangos de direcciones para RAM interna. • Rangos de direcciones para memoria de programas interna (ROM, EEPROM, FLASH, etc.). • Rangos de direcciones para memoria RAM externa. • Rangos de direcciones para memoria de programas externa, si aplica. • Rangos de direcciones para bancos de memoria que almacenan datos no volátiles. • Rangos de direcciones para los registros internos correspondientes a los periféricos del microcontrolador. • Las direcciones de los vectores de interrupción. • Las direcciones de códigos especiales de programación que gobernarán el comportamiento del dispositivo hasta la próxima iniciación. La siguiente sección aplica estos conceptos a cada una de las plataformas que se trabajan en el curso, esto con el fin de proveernos las herramientas básicas para el desarrollo de aplicaciones que requieran el acceso a bancos de memoria más amplios que los ofrecidos por la arquitectura interna del microcontrolador, además, será de utilidad para la implementación de dispositivos de E/S adicionales que no están presentes en las características básicas de los microcontroladores trabajados en el curso. Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Tema 3. Casos de Estudio Subtema 3.1 Familia MCS51 Figura 2.1 Mapa de memoria para la familia de microcontroladores MCS51. El mapa de memoria de la familia de microcontroladores MCS51 de Intel emplea el esquema de memoria segregada, es decir, como se definió anteriormente es posible obtener dos bancos de memoria separados, uno para programa y otro para datos. Esta familia de microcontroladores posee un ancho de bus de datos de 8 bits y el ancho del bus de direcciones puede ser de 8 o 16bits, es decir, como máximo se pueden tener 64Kbytes para programa y 64Kbytes para datos. La Figura 2.1 muestra en términos generales el mapa de memoria de estos microcontroladores, y según esta, la memoria de programa puede ser implementada de las siguientes formas: la primera, donde toda la aplicación se encuentra externamente al microcontrolador, es decir no se usa la memoria FLASH, EEPROM, EPROM o ROM que pueda tener el integrado; y la segunda, donde se usa inicialmente la memoria de programa interna del microcontrolador y una vez esta ya sea insuficiente la interfaz de memoria del integrado buscará el código fuera del microcontrolador. La Figura 2.2 muestra esto más explícitamente. Figura 2.2 Mapa de memoria de programas para la familia MCS51. Unidad 2: Interfaz con Memoria y E/S Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales El límite de memoria interna de programas que está dentro del microcontrolador en la segunda opción que se describió anteriormente depende exclusivamente de la referencia del integrado, en la Figura 2.2 se muestra la configuración típica para el 89C52 el cual posee 8Kbytes de memoria interna. La memoria de programa para esta familia es de solamente lectura y alberga los vectores de interrupción en las primeras posiciones de memoria, como se observa en la Figura 2.3. Figura 2.3 Posición de los vectores de interrupción para la familia MCS51. La memoria de datos de la familia MCS51 se divide en dos partes las cuales existen en forma paralela, la primera incluye los bancos de registros internos, registros de configuración de periféricos y la SRAM interna; y la segunda incluye todo el espacio de memoria externo que el microcontrolador puede acceder con su bus de direcciones de 16bits, es decir 64 Kbytes. Figura 2.4 Memoria de datos interna de la familia MCS51. Estos dos tipos de memoria para datos pueden existir al mismo tiempo debido a que existen instrucciones en ensamblador separadas para acceder a los datos almacenados en cada uno de ellos, para los datos almacenados internamente la instrucción más 10 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales comúnmente usada es la bien conocida MOV, sin embargo, para los datos almacenados externamente existe MOVX la cual activa explícitamente las señales de /RD y /WR de la interfaz con memoria. En la Figura 2.4 se observa que los primeros 128 bytes albergan los bancos de registros internos y la SRAM interna; los 128 bytes restantes existen simultáneamente para los SFR o registros de configuración de periféricos y más SRAM interna, la cual solo está presente en ciertas referencias de microcontroladores, como es el caso del 89C52. La Figura 2.5 muestra la estructura del primer banco de 128bytes. Figura 2.5 128 primeros bytes de la memoria de datos interna de la familia MCS51. La Figura 2.5 muestra la existencia de 4 bancos de registros R0-R7, cada banco puede ser activado uno a la vez; seguidamente existen 16 posiciones de memoria que pueden ser accedidas bit a bit; y por último se tiene el área que el usuario puede emplear para guardar sus variables. La Figura 2.6 muestra, al igual que la Figura 2.2, una relación entre la memoria interna de datos y la memoria externa de datos, donde se observa claramente la disponibilidad de un banco de 64Kbytes para almacenar datos, sin embargo, aunque hasta ahora no se ha discutido, existe una gran desventaja al emplear memoria externa, ya sea para datos o para programa, y es la pérdida de 2 puertos binarios de 8 bits cada uno con el fin de poder generar las señales de dirección y obtener o enviar datos. Además, con el fin de distinguir entre la memoria de datos y la de programa, la interfaz de memoria de estos microcontroladores hace uso de una señal llamada /PSEN la cual es activa baja cuando se desea acceder a memoria de programa y activa alta cuando son datos. Cuando se escriben o leen datos de la memoria de datos externa se activa /WR o /RD señales que no son independientes, sino que comparten su función con E/S binarias de uno de los puertos del microcontrolador, entonces, estas funciones de E/S no podrían ser usadas. Unidad 2: Interfaz con Memoria y E/S 11 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Figura 2.6 Mapa de memoria de datos para la familia MCS51. Consideraciones de Programación El mapa de memoria de la familia MCS51 es uno de los más fáciles de manejar, aunque el estudiante no realizará desarrollos en Hardware para una posible expansión de memoria ya que la plataforma de desarrollo CPU08 que se empleará para las prácticas ya poseen esto implementado, se deberán tener en cuenta ciertas consideraciones con el fin de manejar adecuadamente el mapa de memoria externo de datos. • Se debe chequear el tamaño de la SRAM externa realmente implementada en la tarjeta, sus valores típicos van desde 8Kbytes hasta el máximo 64Kbytes. • Si la aplicación que se ejecutará sobre la plataforma está diseñada en lenguaje ensamblador, la instrucción que se deberá emplear es: MOVX, pero teniendo la precaución de solamente usar direccionamiento indirecto. Por ejemplo: MOVX @ R0, A, donde el registro R0 alberga una dirección de 8 bits donde se almacenará el dato existente en el acumulador A. • Si la aplicación que se ejecutará sobre la plataforma está diseñada en un lenguaje de alto nivel como C, se debe tener en cuenta el conjunto de directivas que el ambiente de desarrollo usa para especificar la ubicación de las variables en memoria SRAM externa. La versión de evaluación de ProView32, un compilador en C para la familia MCS51 de Franklin Software, usa la directiva XDATA de la siguiente manera para poder definir una variable en memoria de datos externa: Símbolo (o Variable XDATA dirección (Donde se desea ubicar a la variable) Es compilador en C para la familia MCS51 no tiene restricción en el uso de memoria, 12 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales excepto por la disponibilidad física de ésta en la plataforma de desarrollo, por lo tanto el mapa de memoria asumido se conforma de dos espacios de 64Kbytes cada uno separados, uno para código y otro para datos. Es responsabilidad del programador la ubicación de las variables ya sea en la SRAM interna al microcontrolador o en la memoria SRAM externa de éste. Subtema 3.2 Familia DS80C390 Este conjunto de dispositivos es muy similar a la familia MCS51, en términos generales poseen las mismas características, pero aumentadas. Desde el punto de vista de memoria se tiene la misma posibilidad de tener un espacio de memoria combinada o segmentada, sin embargo, la diferencia radica en el tamaño, estos dispositivos poseen 4Kbytes de SRAM interna, memoria de programa hasta 4Mbytes y memoria de datos hasta 4Mbytes. La memoria SRAM interna está dividida en las siguientes partes, como lo muestra la Figura 2.7: Figura 2.7 256bytes más bajos de la SRAM interna de la familia DS80C390 • Los registros de función específica o SFR, los cuales ocupan 128bytes de la memoria interna y se encargan, como se dijo anteriormente, de la configuración de los periféricos y características del microcontrolador. • Bancos de registros. Banco de memoria con acceso bit a bit. • Banco de memoria de usuario. Unidad 2: Interfaz con Memoria y E/S 13 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales La Figura 2.8 muestra el mapa de memoria completo para esta familia de microcontroladores, de esta figura se puede observar que los 4Kbytes de memoria SRAM internos pertenecen al mapa de memoria de datos, además, debido a que este microcontrolador posee una interfaz con el bus CAN, 512Kbytes están dedicados para almacenar datos de entrada y salida para estas interfaces. En la familia MCS51 el puntero de pila era solo de 8bits y tenía que estar apuntando a una dirección de memoria al interior del microcontrolador, sin embargo, la familia DS80C390 posee un puntero de pila de 10 bits, el cual puede manejar hasta 1Kbyte de memoria que se ubica dentro de los 4Kbytes de memoria SRAM interna, como lo muestra Figura 2.8: Figura 2.8 Mapa de memoria de la familia DS80C390. Los espacios de memoria para programa o datos, que poseen una longitud de 4Mbytes, poseen 4 señales de habilitación (/CE0 a /CE3) que pueden activarse automáticamente en 5 formas distintas, cada una de ellas especificando un mapa de memoria diferente, lo cual facilita el aumento modular de los recursos de memoria. Consideraciones de Programación En el presente curso se usará esta familia de microcontroladores como parte del sistema de desarrollo TINI, el cual junto con las herramientas software JDK 1.2 o superior y TINI SDK se encargan de la generación de los archivos necesarios para que el usuario descargue y ejecute sus aplicaciones. Por lo tanto, todas las labores de ubicación de variables y/o objetos en memoria son realizadas automáticamente a un nivel mucho más alto que cualquier sistema de desarrollo presentado en el curso. 14 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Sin embargo, desde el punto de vista de los mapas de memoria, y con fines solamente informativos, es bueno conocer los espacios de memoria usados por el usuario. El sistema de desarrollo de la TINI es capaz de ubicar las aplicaciones en un espacio de hasta 2Mbytes entre 0x100000 y 0x2FFFFF, no existen variables u objetos ubicados en las secciones de memoria interna. Subtema 3.3 Familia RC3000 El mapa de memoria de este microcontrolador es uno de los más complicados de los que se tienen para el desarrollo del curso, sin embargo, gracias a la herramienta de desarrollo que viene con la plataforma, el usuario final rara vez deberá tener en cuenta los detalles de esta organización de memoria. A continuación se hace una pequeña introducción sobre las bases de la interfaz de memoria y su operación. Memory Mapping Unit Processor 16 bits Memory Interface 20 bits Memory Chips 20 bits plus control Figura 2.9 Unidad de memoria para el microcontrolador RC3000. La Figura 2.9 muestra la estructura de la unidad de memoria para la familia RC3000, desde el punto de vista del procesador, la memoria que se ataca es siempre de 64Kbytes, sin embargo, este microcontrolador posee un sistema de paginación que hace que la memoria física a la que se tiene acceso es de 1Mbyte. La paginación de memoria funciona con la ayuda de los registros XPC, SEGSIZE, STACKSEG y DATASEG los cuales controlan las fronteras de cada segmento de memoria que ve el procesador, estos segmentos son: ROOT SEGMENT donde se ubica el código de la aplicación, DATA SEGMENT para datos de uso general, STACK SEGMENT para ubicar la pila y XPC SEGMENT que se usa para la ubicación adicional de código o datos. La organización de memoria funciona de la siguiente manera: primero que todo el registro SEGSIZE de 8 bits determina las fronteras en el espacio de 64Kbytes con cada nible que lo compone, como se muestra en la Figura 2.10, el primer nible (7 en la Figura 2.10) determina los límites entre el segmento ROOT y el de DATOS, el segundo nible determina los límites entre el segmento de DATOS y el de STACK, el segmento de STACK siempre tiene 4Kbytes de longitud y el segmento XPC se ubica en las posiciones de memoria restantes; luego, se usan los registros DATASEG, STACKSEG y XPC con el fin de sumarlos a la dirección de 16bits y generar una dirección de 20bits que marca el inicio de los segmentos de DATOS, STACK y XPC en el mapa de memoria de 20bits. Al igual que la familia MCS51 este tipo de microcontroladores soporta la separación o combinación de los espacios de memoria dedicados para código o para datos, sin Unidad 2: Interfaz con Memoria y E/S 15 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales embargo, debido a que la organización de memoria es a través de segmentos, la separación de los espacios de memoria de código y datos se aplica, en este caso, a los segmentos ROOT y DATOS tal que, si el registro SEGSIZE tiene el valor de D2, se tienen 52Kbytes en paralelo, uno para código y otro para datos, como lo muestra la Figura 2.11. Figura 2.11 Separación de espacios de memoria para código y datos, mapa de 16bits. La Figura 2.12 muestra el mapa de memoria de 20bits con separación de espacios de código y datos, como se observó en la interfaz de memoria de la familia MCS51 debe existir una herramienta hardware que permita la separación de estos espacios de memoria, en este caso, esto se logra con la inversión de las señales A16 y A19 del bus de direcciones tal que al invertir A16 (ubicándola en 1 lógico) para los accesos al espacio de datos del segmento ROOT hace que este espacio se mueva 64Kbytes hacia arriba en el espacio de memoria de 20bits, como se muestra en la Figura 2.12; al invertir A19 (ubicando un 1 lógico) para los accesos al segmento de DATOS hace que este espacio se mueva 512Kbytes hacia arriba en el espacio de memoria de 20bits, como se muestra en la Figura 2.12. Finalmente, la separación de espacios de memoria no se aplica para los segmentos XPC y STACK. 16 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Figura 2.12 Separación de espacios de memoria para código y datos, mapa de 20bits. Consideraciones de Programación Como se ha observado, el mapa de memoria de esta familia de microcontroladores es algo complicado, sin embargo, se dispone de la plataforma de desarrollo RCM3200 la cual se basa en un microcontrolador RC3000 y con un ambiente de desarrollo que se encarga de todo el manejo de memoria, es decir, ubicación del código, variables, constantes, vectores de interrupción, etc. Este ambiente de desarrollo emplea el lenguaje Dynamic C para la implementación de aplicaciones de usuario, el cual asume el mapa de memoria que se muestra en la Figura 2.13. Unidad 2: Interfaz con Memoria y E/S 17 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Figura 2.13 Mapa de memoria asumido por el compilador de Dynamic C. Los módulos de desarrollo RCM3200 poseen 512Kbytes de memoria FLASH, 256Kbytes de SRAM de datos y 512Kbytes de SRAM de programa, la suma de estos valores supera el espacio total de memoria que se puede acceder con el microcontrolador RC3000, esto se debe a que la secuencia de inicialización ocurre de la siguiente manera: se inicia la ejecución de instrucciones en la dirección 0x00000, donde se encuentra la memoria FLASH que contiene la BIOS del sistema, este programa de inicio copia las rutinas de acceso a los periféricos, aplicaciones y herramientas software para el desarrollo de aplicaciones en la memoria SRAM de 512Kbytes y luego activa esta última memoria, junto con los 256Kbytes de SRAM para datos de usuario. Debido al esquema de manejo de memoria que posee este microcontrolador, se deben tener en cuenta ciertas recomendaciones para la manipulación de punteros y bloques de datos: • Si se desea realizar transferencias de bloques de datos entre segmentos (ROOT, DATOS, XPC), se deben usar funciones que Dynamic C ofrece para tal fin. • Los punteros a memoria no son de 20bits de longitud, sino de 16 bits de longitud, por tal razón se deben usar funciones de librería del sistema de desarrollo para realizar las conversiones de formato adecuadas. • Las rutinas de C que el usuario diseñe son ubicadas en el segmento ROOT a 18 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales medida que éste se va llenando, sin embargo, si se desea que ciertas rutinas queden dentro de este segmento y no en el XPC se debe agregar la palabra reservada root con el fin de forzar al compilador a hacerlo. Subtema 3.4 Familia 68HC12 Esta familia de microcontroladores presenta un mapa de memoria sencillo, práctico y flexible. El mapa de memoria depende del modo de operación en el cual se encuentre la CPU, básicamente, en operación normal se distinguen dos modos: expandido y modo de un solo integrado; el modo expandido no usa la FLASH de 32Kbytes interna que posee el integrado y asume que el programa y los datos están en un mapa de memoria combinado al exterior del integrado; y el modo de un solo integrado habilita el uso de los 32Kbytes de FLASH interna para almacenar el programa inicial. Ambos modos usan un mapa de 64Kbytes como máximo. Según la Figura 2.14 se tienen los siguientes espacios de memoria en esta familia de microcontroladores: Figura 2.14 Mapa de memoria de la familia 68HC12. • Registros de Programación de Periféricos Lo componen 512bytes de registros especiales para programar cada periférico del microcontrolador, sin embargo, posee la gran ventaja de poder ubicarlo en cualquier espacio de memoria de 2Kbytes dentro de los 64Kbytes. • Memoria SRAM interna de 1Kbyte Se usa comúnmente para acceder a variables con mayor rapidez que las que se Unidad 2: Interfaz con Memoria y E/S 19 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales encuentran fuera del microcontrolador, también posee la posibilidad de ubicarlo en cualquier espacio de memoria de 2Kbytes dentro de los 64Kbytes que maneja el microcontrola • Memoria EEPROM de 768bytes interna Regularmente se usa para el almacenamiento de información persistente, configuraciones, estado actual del microcontrolador, calibraciones, etc. Puede ser ubicada en cualquier espacio de memoria de 4Kbytes dentro de los 64Kbytes que maneja el microcontrolador. • Vectores de interrupción Es un espacio de memoria de 48 bytes donde se almacenan las direcciones de memoria donde se encuentran las rutinas que atenderán cualquier petición de interrupción. • Memoria FLASH de 32Kbytes interna El microcontrolador posee una memoria FLASH interna que puede o no ser empleada, en modos expandidos esta memoria no se habilita ya que el microcontrolador busca la primera instrucción en memoria externa, sin embargo en los otros modos esta memoria está localizada en la mitad superior del mapa de memoria, albergando de esta manera a los vectores de interrupción. • Memoria de uso general Los espacios de memoria en blanco que la Figura 2.14 muestra espacios de memoria disponibles para poder implementar más dispositivos de memoria, ya sea de programa, datos o de E/S. Consideraciones de Programación Para esta plataforma existen dos formas de programación, una usando el ensamblador, que es la única opción de la herramienta de desarrollo de Motorola y la otra en ANSI C a través de un compilador cruzado para esta plataforma usando el GCC de la GNU. Cuando se programa este microcontrolador usando su ensamblador, se debe tener en cuenta que el mapa de memoria es combinado, tal que, la asignación y uso de los espacios de memoria deben realizarse siempre y cuando: primero, existan realmente, es decir, exista un dispositivo de memoria que responda en los rangos deseados; y segundo, no se ha modificado las asignaciones por defecto que muestra la Figura 2.14 para los bancos de memoria especiales como los registros de programación, la SRAM interna y la EEPROM interna del microcontrolador. Al tener esto en cuenta, la asignación de nombres a las variables del programa en ensamblador se reduce a realizar una lista de sentencias EQU, tal que cada sentencia posee la forma: SÍMBOLO EQU VALOR Donde SIMBOLO corresponde al nombre de la variable o constante y VALOR corresponde a una posición de memoria específica o a un valor inmediato, en el caso de tratarse de 20 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales una constante. La otra forma de programación es usando el compilador GCC para Motorola, donde el compilador asume ciertos mapas de memoria dependiendo del modo de operación del microcontrolador, independiente de esto, siempre existe una serie de parámetros que se deben tener en cuenta: un archivo llamado memory.x el cual define los bancos de memoria que se desean usar, existen archivos de este tipo que se pueden usar por defecto, sin embargo si se posee una aplicación con un mapa de memoria especial este archivo debe modificarse: MEMORY { page0 (rwx) : ORIGIN = 0x0, LENGTH = 256 text (rx) : ORIGIN = 0x08000, LENGTH = 0x8000 data : ORIGIN = 0x01100, LENGTH = 0x6F00 eeprom : ORIGIN = 0xb600, LENGTH = 512 } PROVIDE (_stack = 0x1100 + 0x6f00 - 1); Por ejemplo, las anteriores líneas definen espacios de RAM, ROM y EEPROM, se define una RAM entre 0x00 a 0xff y entre 0x1100 a 0x7fff; ROM entre 0x8000 a 0xffff; y EEPROM entre 0xb600 a 0xb7ff. Esto es útil para el programa enlazador, el cual ubicará las variables en los segmentos de memoria definidos en este archivo. Tema 4. Interfaz con E/S La sección anterior mostró los conceptos de la interfaz de memoria tanto de programas como de datos, sin embargo, todos los microcontroladores poseen un conjunto de periféricos que representan la interfaz de E/S usada para su interacción con el mundo real. Además, la mayoría de los microcontroladores pueden acceder a dispositivos de E/S externos adicionales que están implementados en su diseño original y en este caso se tienen dos posibilidades: un acceso a los dispositivos de E/S a través de un mapa de memoria combinado o un mapa de memoria separado, concepto que se introdujo al inicio de la anterior sección. Recordando, un mapa de memoria combinado permite que cualquier dispositivo de E/S se pueda acceder como cualquier dato en memoria, lo cual posee la gran ventaja de aplicar todo modo de direccionamiento. Un mapa de memoria separado para E/S posee señales de hardware especiales que seleccionan bancos de memoria dedicados exclusivamente a E/S, por lo general esto implica que sólo se pueden realizar movimientos de datos directos entre el dispositivo y la CPU. Unidad 2: Interfaz con Memoria y E/S 21 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Esta sección se dividirá en dos partes, la primera orientada al acceso de los periféricos que se encuentran en el microcontrolador y la segunda orientada a los métodos de acceso de los dispositivos fuera del microcontrolador. Subtema 4.1 Filosofía de la E/S Orientada al Registro En un curso de microprocesadores básico se muestra a un sistema de procesamiento robusto y sin ninguna clase de periférico, además, cada dispositivo de E/S ya sea un teclado conectado a través de un puerto binario, o una interfaz de comunicación, etc., deben hacer parte del mapa de memoria del microprocesador, lo cual implica una serie de tareas que el desarrollador de hardware deberá tener en cuenta, sin embargo, esto es una herramienta útil y necesaria para configurar cada dispositivo de E/S, el cual posee una serie de registros de configuración y registros para almacenar y recibir datos. En un microcontrolador tanto la unidad de procesamiento, la interfaz de memoria y los periféricos están en un solo integrado, como los periféricos son dispositivos de E/S que la unidad de procesamiento puede acceder en cualquier momento, ellos deben pertenecer al mapa de memoria del microcontrolador. A través de la sección anterior se habló de los SFR o registros de función específica, cuyo objetivo es el acceso a los periféricos del microcontrolador. Este tipo de acceso, es decir, el mover una serie de datos binarios a unas posiciones de memoria determinadas con el fin de configurar algún dispositivo es lo que se llama la filosofía de E/S orientada al registro. Todo microcontrolador moderno obedece a esta forma de programación, incluso para tareas propias de la CPU, es decir, modos de operación, configuración inicial, tamaño del bus de datos, modos de ahorro de energía, etc. La siguiente sección mostrará la organización básica de las familias de microcontroladores que se usarán en el curso en términos de la programación de sus periféricos, es decir, qué registros tener en cuenta tanto para los dispositivos de E/S como para la configuración de la CPU y qué consideraciones se deben tener en cuenta respecto al mapa de memoria. Después, se finalizará con las consideraciones más importantes para la ampliación de las capacidades de E/S para cada familia de microcontroladores. Subtema 4.2 Interfaz de E/S para periféricos del microcontrolador Al trabajar con dispositivos de procesamiento orientados al registro, tales como los microcontroladores, los pasos más importantes para la programación de un dispositivo de E/S son los siguientes: • Identificar el conjunto de registros que configuran, obtienen y ubican información en el periférico. • Modificar el comportamiento del periférico verificando el significado de cada bit en los registros de configuración. 22 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales • Asignación del dato adecuado a los registros de configuración. • Finalmente, en la fase de utilización del periférico se debe obtener y ubicar información a través de registros orientados para este fin. Además, es común el uso de información que describe el estado del periférico, esta información también está almacenada en registros de función específica. Estos son los cuatro pasos fundamentales para la configuración y manejo de un periférico en un microcontrolador, ahora, la herramienta de desarrollo empleada para la programación del microcontrolador, ya sea ensamblador o ANSI C, tratará a los registros como variables en memoria; por ejemplo, en ensamblador es común el uso de mnemotécnicos como LD, MOV, ST para almacenar datos en memoria, mientras que en ANSI C, los registros de función especial son variables normales a las cuales se les asignan datos inmediatos, esto es: TL0 = 0x34 o PORTE = 0x11, etc. Familia MCS51 La Figura 2.15 muestra la estructura de registros de función específica para la mayoría de microcontroladores de la familia MCS51 los cuales se encuentran en posiciones de memoria determinadas por la arquitectura en particular. A este punto del curso no se entrará en detalle sobre estos registros ya que se podrán cubrir con profundidad en capítulos siguientes, sin embargo, se debe notar el tipo de periféricos que se tienen disponible en esta familia: • 3 Temporizadores de 16 bits. • Una interfaz para comunicaciones tipo serie, tanto síncronas como asíncronas. • Hasta 32 líneas de E/S digitales. • Controlador de interrupciones tanto internas (periféricos) como externas. Familia DS80C390 La base de esta familia de microcontroladores es la misma que la de los MCS51, incluso, como ya se afirmó anteriormente, son compatibles desde el punto de vista software. Sin embargo, los periféricos que se tienen disponibles en esta familia de Dallas Semiconductor son más evolucionados y de una configuración más flexible que la familia MCS51. La Figura 2.16 muestra un resumen de los registros de función específica de la familia DS80C390 más importantes y relacionados con los periféricos de este tipo de microcontroladores. En comparación con la anterior familia, el espacio de memoria dedicado a los SFR es el mismo, sin embargo, de acuerdo a las direcciones de memoria que ocupan los SFR de la familia MCS51 se observa que muchas direcciones quedaban sin implementar, estos espacios de memoria en este caso son ocupados por registros Unidad 2: Interfaz con Memoria y E/S 23 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales que configuran, obtienen y escriben información de nuevos periféricos o de funciones ampliadas de periféricos existentes. Los periféricos que se tienen disponibles en esta familia son los siguientes: • • • • • • • Tres temporizadores programables de 16 bits. Dos puertos seriales independientes full-duplex. Cuatro puertos de E/S digitales con funciones alternativas. Dos controladores CAN 2.0B. Reloj programable adicional para comunicaciones IrDA. Temporizador guardián. Controlador de interrupciones externas (hasta 5) e internas. Familia RC3000 El conjunto de registros de función específica para la familia RC3000 es uno de los más amplios que se tienen a disposición en el curso, pues se tiene un rango hasta 256 bytes dedicados para este fin. Esto es debido a que esta familia soporta las siguientes clases de periféricos: • Hasta 6 puertos seriales programables de diferentes formas: - Como puertos seriales asíncronos (SCI). - Como puertos seriales síncronos (SPI). - Como puertos que soportan HDLC/SDLC. - Como puertos que soportan IrDA. - Como puertos seriales tipo SCI o SPI usados para descarga de códigos de inicialización del microcontrolador. - Como puerto serie esclavo, tal que otro microcontrolador pueda iniciar y descargar código en el microcontrolador local. • Hasta 4 salidas PWM, las cuales pueden ser programables con ciclos efectivos ubicados a la derecha, centro e izquierda. • Hasta dos canales de decodificadores de cuadratura con el fin de conectar encoders incrementales de dos canales cada uno. • Hasta 16 entradas digitales de captura y retención de eventos. • Reloj de tiempo real independiente del sistema de temporizadores principal. • Un sistema de 2 temporizadores que poseen una serie de temporizadores esclavos para controlar varios periféricos en el microcontrolador. • Hasta 56 líneas de E/S digital, sin embargo, muchas líneas comparten funciones con otros periféricos del dispositivo. • Sistema de control de interrupciones para la mayoría de los periféricos del microcontrolador incluyendo hasta 4 fuentes de interrupción externa. 24 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales La configuración y uso básicos de todas estas características será tema de próximas guías, pero al igual que los periféricos que no están disponibles en el microcontrolador, este conjunto de dispositivos de E/S pertenece al mapa de memoria del dispositivo ya que cada registro de configuración posee una dirección específica a través de la cual se ubicarán datos específicos para operar cada periférico. Familia 68HC12 Al igual que la familia anterior la familia de microcontroladores 68HC12, posee una gran cantidad de registros de configuración permitiendo una flexibilidad bastante alta en la programación de los periféricos que hacen parte del integrado. Es de destacar que esta familia de microcontroladores es totalmente de 16bits, no de 8 como eran las anteriores, además, posee uno de los módulos de temporizadores más interesantes entre las plataformas que se estudian en el curso. El espacio de memoria dedicado a los registros de función específica es de 512bytes los cuales, como se dijo anteriormente, pueden ser localizados en cualquier parte de los 64Kbytes de memoria en fronteras de 2Kbytes. Esta familia posee los siguientes tipos de periféricos: • Aunque no es un periférico propiamente dicho, es un sistema de almacenamiento de información persistente, esta familia posee un bloque de 768 bytes de memoria EEPROM. • Posee un sistema de conversión analógico a digital de 8 entradas y con una resolución de 10bits. • Dependiendo de la versión del dispositivo se dispone de un módulo de temporizadores básico o ampliado, con las siguientes características: • Sistema básico. - 8 canales que se pueden emplear como entradas de captura de eventos o como salidas de comparación. - 4 canales para generar señales de PWM independientes. - Módulo de generación de reloj, el cual genera las señales de sincronización para cada uno de los sistemas del microcontrolador. • Sistema ampliado. - Un temporizador de 16bits adicional a los 8 canales y con un divisor de frecuencia de 7 bits. - Canales de entrada de captura de eventos y de salida de comparaciones con buffers. - 4 acumuladores de 8 bits o 2 de 16 bits adicionales. - Temporizador de 16bits con cuenta hacia abajo y 4 bits de división de frecuencia. - 4 contadores de retardo programables para filtrado de señales. Unidad 2: Interfaz con Memoria y E/S 25 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales • Interfaces seriales síncrona (SPI) y asíncrona (SCI) independientes. • Dependiendo del dispositivo se posee una interfaz de comunicación tipo BDLC o CAN. • Hasta 63 señales digitales de E/S, sin embargo, muchas de estas están compartiendo funciones con otros periféricos del microcontrolador. • Dos fuentes de interrupción externa: una no enmascarable y otra enmascarable. Temporizador guardián. Adicionalmente a cada uno de estos periféricos, esta familia de microcontroladores posee sistemas que son propios de ella, esto es, la presencia de un módulo de depuración de programas pero implementado en hardware y con un sistema de comunicación independiente. Además, desde el punto de vista del conjunto de instrucciones, esta familia posee instrucciones en lenguaje ensamblador diseñadas para la implementación de controladores basados en lógica difusa. Tema 5. Interfaz de E/S Mapeada en Memoria Este tipo de interfaz de memoria es realizado solamente en el caso que los periféricos del microcontrolador no sean suficientes para cumplir con los requerimientos de la aplicación. En este caso, se hará uso de los mapas de memoria de la plataforma en particular con el fin de implementar interfaces de E/S externas, pero que hagan parte del espacio de memoria del microcontrolador. Subtema 5.1 Familia MCS51 Ahora, dado el caso que la aplicación que se desea implementar requiere de un dispositivo de E/S que no está listado anteriormente, es necesaria la implementación de este dispositivo como un puerto de E/S externo, teniendo en cuenta las siguientes consideraciones para esta plataforma: • Hasta 16 líneas de E/S digitales no pueden ser empleadas, debido a que se usarían para la generación de las direcciones (16 líneas) y adquisición del dato (8líneas). • Se dispone de un bus de direcciones y datos multiplexado de tal manera que la parte baja del bus de direcciones y los datos comparten el mismo puerto de E/S. • Se dispone de un espacio de hasta 64Kbytes para ubicar al dispositivo de E/S. • Con el fin de realizar una decodificación adecuada de la dirección de memoria donde se ubicará al dispositivo, es necesario incluir la señal /PSEN la cual distingue entre el espacio de direcciones de datos y de código. 26 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales • Debido a que se necesitan señales para lectura y/o escritura de datos, los dos bits más significativos del puerto número 3 no se pueden emplear como E/S digital ya que su función alterna es generar las señales de /RD y /WR para la interfaz de memoria externa. • Desde el punto de vista de software se tienen dos posibilidades: - Ensamblador, si se está trabajando bajo este tipo de herramienta de desarrollo se debe emplear instrucciones de movimiento de datos externos, esto es, instrucciones del tipo: MOVX. - ANSI C, para este tipo de herramienta de desarrollo se debe determinar, dependiendo del fabricante del software, la manera de definir a través de directivas especiales la ubicación de variables en una localidad específica de los espacios de memoria del microcontrolador. Teniendo en cuenta estas recomendaciones y los tipos de mapas de memoria que maneja esta plataforma es posible ampliar las capacidades de E/S de la familia MCS51. Por ejemplo, la adición de un conversor A/D, la ampliación de puertos digitales de E/S a través de una PPI, un teclado, una pantalla de LCD, etc. La Figura 2.17 muestra un ejemplo muy general de la interfaz de memoria necesaria para la conexión de un dispositivo de E/S bajo esta arquitectura. Figura 2.17 Ejemplo de interfaz de E/S para la familia MCS51. La Figura 2.17 muestra que la parte más importante es la interfaz de memoria entre el dispositivo de E/S y el microcontrolador, la cual recibe el bus de datos, direcciones y bus de control con el fin de entregar al dispositivo de E/S el bus de datos y la señal de habilitación con el fin de que éste pueda enviar o recibir datos. Los circuitos integrados típicos a través de los cuales se realiza este tipo de implementaciones son los decodificadores de 3 a 8, como el 74LS138, o de 2 a 4, como el 74LS139. La idea es dividir el mapa de memoria y usar cada división para el acceso a un dispositivo de E/S. Unidad 2: Interfaz con Memoria y E/S 27 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Subtema 5.2 Familia DS80C390 De igual forma que para la anterior familia, existe la posibilidad de necesitar la presencia de un dispositivo de E/S adicional que no esté dentro del listado anterior, para lo cual es necesaria la implementación de un puerto de E/S externo usando la interfaz de memoria de este microcontrolador. Para este fin, se debe recordar que la interfaz de memoria de esta familia posee una versión mejorada de la interfaz de memoria de la familia MCS51; primero que todo se trata de un mapa de memoria con una separación (si se desea) entre código y datos, en la familia MCS51 la separación se realizaba a través de la señal /PSEN, en este caso esta señal mantiene su significado y utilidad, sin embargo, existe un conjunto de señales adicionales como son /CE0 a /CE3 y /PCE0 a /PCE3 disponibles en los nuevos puertos P4 y P5 las cuales dependiendo de la configuración del mapa de memoria (realizada a través de los SFR) son habilitadas para seleccionar bancos de memoria con tamaños que varían entre: 32Kbytes, 128Kbytes, 256Kbytes, 512Kbytes y 1Mbyte. La Figura 2.18 muestra un ejemplo de conexión con bancos de memoria tanto para programa como para datos. Bajo esta arquitectura las señales de habilitación /CE0 a / CE3 son empleadas para seleccionar los dispositivos de memoria de programa, como se observa en la parte superior de la Figura 2.18, usando /PSEN como señal de habilitación de salida para los dispositivos. Las señales /PCE0 a /PCE3 se emplean para la habilitación de dispositivos de memoria de datos (SRAM), como se observa en la parte baja de la Figura 2.18, usando /RD y /WR como señales de control de bus. Los rangos de memoria anteriormente citados para los cuales estas señales se habilitan son configurados en registros especiales como son P4CNT y P5CNT. Las principales consideraciones a tener en cuenta para la implementación de E/S externa para esta familia de microcontroladores son las siguientes: • Definir un mapa de memoria determinado a través de los registros de función específica que controlan la interfaz con memoria. • Habilitación del uso de las señales /PCEX a través del registro MCON. • Se debe tener en cuenta que el uso de las señales de habilitación /CE0 a /CE3 y /PCE0 a /PCE3 son funciones alternas de los puertos 4 y 5 respectivamente. • En esta arquitectura se posee la posibilidad de tener un bus de datos y direcciones multiplexado y no multiplexado, esto es seleccionado a través de la señal de entrada /MUX, la cual en la Figura 3.5 es un 1 lógico definiendo un bus de direcciones y datos no multiplexado. Esto hace que señales de E/S digitales de los puertos 0, 1, 2 y 4 se dediquen a la 28 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales generación del bus de direcciones, datos y control. • De acuerdo a los rangos de memoria dedicados para la conexión de dispositivos de memoria para datos, se debe usar cualquiera de las señales /PCE0 a /PCE3 y parte del bus de direcciones con el fin de implementar una serie de rangos de memoria más específicos dedicados a los dispositivos de E/S. • Desde el punto de vista del software esta plataforma es la base del sistema de desarrollo TINI, la cual es programada en JAVA. Teniendo en cuenta esto, los siguientes pasos de programación deben ser realizados: • Escribir una función en leguaje nativo, es decir en ensamblador, con el fin de tener acceso a la dirección específica donde está ubicado el dispositivo de E/S. Este paso debe considerar las observaciones que se encuentran en el API NATIVE que la TINI incluye con los siguientes puntos: - Ensamblar el archivo que contiene la función en lenguaje ensamblador, teniendo en cuenta: funciones especiales para el llamado a otras funciones, configuración de registros protegidos, modelo de programación para el paso de parámetros y el retorno de resultados. Produce un archivo de extensión MPP. - Generar la librería que se cargará a través de la aplicación en JAVA. Genera un archivo de extensión TLIB. • Luego, debido a que la filosofía de programación es la orientada a objetos, se debe implementar una clase que tenga las siguientes características: - Declaración del método nativo. - Definir un constructor que cargue la librería generada anteriormente donde se encuentra el método nativo y llame con su parámetro al método nativo. - Opcionalmente, si se desea probar la funcionalidad de la clase, definir un programa principal para escribir y/o leer del puerto. Normalmente la TINI posee un mapa de memoria combinado de programa y datos, lo cual implica que solamente las señales /CE0 a /CE3 son empleadas, mientras que las señales /PCE0 a /PCE3 no están habilitadas. Esto permite un buen grado de libertad en emplear este tipo de señales para conectar libremente interfaces a periféricos externos a la tarjeta de desarrollo. Subtema 5.3 Familia RC3000 Desde el punto de vista de los sistemas de E/S externos, esta familia posee un mapa Unidad 2: Interfaz con Memoria y E/S 29 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales de memoria dedicado a la implementación de puertos de E/S separado del espacio de memoria dedicado a datos y/o código. Para este fin se ha dispuesto un rango de direcciones de 64Kbytes los cuales son accedidos a través de instrucciones dedicadas a la transferencia de información de E/S. Este esquema de un espacio de memoria separado para E/S es común en procesadores como el Z80, Z180 y la familia x86 de Intel, donde señales de lectura, escritura y selección de dispositivos son dedicadas para uso exclusivo de la E/S externa. En la familia de procesadores RC3000 se tiene a disposición el puerto E, el cual posee 8 señales digitales de E/S que pueden ser habilitadas para seleccionar dispositivos de E/S externos en un rango de direcciones específico. La Figura 2.19 muestra una tabla que relaciona cada señal del puerto E con un rango de direcciones de 8Kbytes cada una y un registro de control (IBXCR); este registro de control permite la habilitación de la función de selección de dispositivos de E/S a través de las señales del puerto E, configura bajo que ciclos (lectura o escritura) debe activarse la selección de dispositivos y permite la configuración de estados de espera con el fin de conectar dispositivos de E/S lentos. Adicionalmente, la Figura 2.20 muestra los parámetros que son posibles de configurar para cada rango de direcciones. Notemos que una vez se tiene la selección del rango de direcciones para cualquier operación (lectura y/o escritura) es responsabilidad del usuario la separación aún más detallada de los espacios de direcciones dentro del rango seleccionado. Bits 7,6 Wait state code 11-1 10-3 01-7 00-15 Bits 5,4 Bit 3 /IX strobe type 00 chip select 01 read strobe 1 permit write 10 write strobe 0 inhibit write 11 or of read and write strobe Bits 2-0 ignored Figura 2.20 Registro de configuración de E/S, familia RC3000. Desde el punto de vista del software, el sistema de desarrollo RCM3200 y la herramienta de desarrollo Dynamic C poseen una librería llamada IO.LIB la cual contiene una serie de rutinas implementadas en código nativo para la escritura y lectura de puertos de E/S externos al dispositivo, los prototipos de las funciones son los siguientes: void WrIOport(int portaddr, int value); unsigned char RdIOport(int portaddr); 30 Universidad del Valle Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Subtema 5.4 Familia 68HC12 Como se mostró al inicio de la guía, la familia 68HC12 posee un esquema de memoria combinada, es decir los datos y el código comparten un mismo espacio de memoria. Con el fin de implementar puertos de E/S externos al microcontrolador es necesario tener en cuenta los siguientes puntos propios de esta familia: • El modo de operación que se ha seleccionado para la operación del microcontrolador (Expandido o Normal). Esto es, en modo expandido la FLASH interna está en la parte inferior del espacio de memoria, mientras que en modo normal está en la parte superior del espacio de memoria. • El ancho del bus de datos, es decir, 16 u 8 bits. Esto implica que si existe solo memoria externa, se deberá implementar dos o un solo dispositivo de memoria en paralelo (uno para la parte baja y otro para la parte alta si es necesario). • El tipo de bus de datos y direcciones que se manejará, es decir, multiplexado o no multiplexado. Lo cual implica que el diseñador debe implementar uno o dos circuitos integrados para separar las direcciones de los datos, lo cual es realizado usando las señales de control del microcontrolador. • Se debe habilitar el uso de /LSTSTB con el fin de poder realizar ciclos de escritura en memoria externa. Una vez definidos estos puntos el diseño de la interfaz de E/S deberá tener en cuenta los rangos de memoria donde se desea ubicar al dispositivo, las señales de control que se necesitan y los integrados de soporte para aislar los buses del dispositivo de E/S. La Figura 2.21 presenta el esquema general para la expansión de memoria en la familia 68HC12. Figura 2.21 Esquema general de interconexión de memoria externa, familia 68HC12. La Figura 2.21 muestra señales de control como: E que es un reloj a través del cual se sincronizan los accesos a memoria; R/W para lectura y escritura respectivamente; /LSTRB con el fin de poder tener acceso al byte menos significativo en un acceso a memoria externa; y otra /DBE la cual se activa en el momento de realizar transferencias Unidad 2: Interfaz con Memoria y E/S 31 Universidad del Valle Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales entre memoria externa y el microcontrolador. Por lo tanto desde el punto de vista del hardware, /RD en la E/S se conecta a /DBE, /WR en la E/S se conecta a R/W, se usa /LSTRB y /A0 con el fin de acceder al byte bajo y alto de la E/S, finalmente, de acuerdo al mapa de memoria asumido se habilita o no /CE en la E/S. Desde el punto de vista software se usan comúnmente estructuras DEFINE para programación en ANSI C con el fin de especificar una dirección de E/S de la siguiente forma: #define IO_ADDRESS_EXTERNAL (unsigned int *) 0x0200 Donde se define una constante que es un puntero a una dirección de memoria determinada, en este caso por 0x0200. Notemos que se trata de un entero, es decir 16 bits, si se desea un solo byte se debe cambiar la palabra int por char. Resumen E n el presente documento veremos la interfaz con memoria de los microcontroladores en detalle. Ya que el curso cubre 4 diferentes plataformas basadas en microcontroladores, explicaremos inicialmente los conceptos generales de la interfaz con memoria y luego aplicaremos estos conceptos a cada una de las familias de microcontroladores. Veremos que al hablar de una interfaz con memoria no sólo tocaremos temas como el acceso a memoria externa, sino, la forma en que esta memoria puede ser accedida gracias a un conjunto de circuitos digitales que juegan el papel de la interfaz de bus y decodificación de segmentos de memoria. Finalmente, en conjunto con la interfaz de memoria, la interfaz con la E/S o periféricos es un tema que le permite al microcontrolador conectarse con el mundo externo, sin embargo, para poder acceder a ella el microcontrolador debe tenerla dentro de su mapa de memoria. En esta sección veremos un resumen de los diferentes tipos de periféricos que un microcontrolador puede tener, los cuales serán explicados en detalle en los próximos documentos. Actividades de Aprendizaje D 32 Universidad del Valle escargue el archivo Actividades_02.pdf que se encuentra en la página 1 de las Actividades de Aprendizaje, de la unidad 2 en el campus virtual. Unidad 2: Interfaz con Memoria y E/S Programa de Postgrados en Ingeniería Eléctrica y Electrónica Especialización en Informática Industrial – Arquitectura de Procesos Industriales Lecturas Complementarias • STRODIEK, Robert. “The IDT Four Port SRAM Facilitates Multiprocessor Design”, application Note, IDT Corporation. • Dallas Semiconductor, “Expanding TINI’s IO Capability”,http://pdfserv.maximic.com/en/an/AN3664.pdf • Motorola Semiconductor, “A Serial BootLoader for Reprogramming the MC68HC912B32 Flash EEPROM”, archivo AN1718.pdf • Atmel Semiconductor, “AT89C51 In – Circuit Programming”, http://www.atmel.com/dyn/resources/prod_documents/DOC0287.pdf • Atmel Semiconductor, “Designing Boards with Atmel 89C51/52 for Writing FLASH at In-Circuit Test”, http://www.atmel.com/dyn/resources/prod_documents/DOC0534.PDF • Dallas Semiconductor, “Adding an External File System to TINI”, http://pdfserv. maxim-ic.com/en/an/app709.pdf Bibliografía • Motorola, “M68HC12B Family, Technical Data”, Rev. 4 2002. • Motorola, “CPU12, Reference Manual”, Rev. 3 2002. • Motorola, “M68EVB912b32 Evaluation Board”, Rev. 1 1999. • Dallas Semiconductor, “High-Speed Microcontroller User´s Guide: DS80C390 Supplement”, Reference 070102. • Dallas Semiconductor, “DS80C390 Dual CAN High-Speed Microprocessor”, Reference 110199. • iButton, TINI board: URL http://www.ibutton.com. • Intel, “MCS 51 Microcontroller Family User´s Manual”, February 1994. • GONZÁLES VÁSQUEZ, Adolfo, “Introducción a los Microcontroladores”, Editorial McGrawHill, 1991. • Microchip, “PICmicro Mid-Range MCU Family Reference Manual”, December 1997. Unidad 2: Interfaz con Memoria y E/S 33 Universidad del Valle