Pulse aquí para obtener el archivo

Anuncio
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
Descargar