Download ENTRADA/SALIDA

Document related concepts
no text concepts found
Transcript
ENTRADA/SALIDA
EJERCICIO 1
Deseamos conectar a un procesador 68000 un periférico de entrada que transfiere 10.000
palabras/segundo. Suponemos que el procesador es capaz de ejecutar 106
instrucciones/segundo. Para la conexión se toman las siguientes alternativas:
1.- Se decide realizar la entrada de datos mediante muestreo (polling), para lo cual se
ejecuta el siguiente programa:
LeeBloque
Polling
move.w
lea
cmp.b
bne
move.w
dbf
#499,D0
Dir_Memoria,A0
#Preparado,Dir_Registro_Estado_Dispositivo
Polling
Dir_Registro_Buffer_Dispositivo,(A0)+
D0,Polling
2.- Se realiza la entrada de datos mediante interrupciones. El periférico envía una
interrupción cada vez que tiene un dato disponible. La rutina de tratamiento es la
siguiente:
Rutina_Tratamiento
move.l
movea.l
move.w
sub.w
move.l
move.l
rte
A0,-(sp)
Puntero, A0
Dir_Registro_Buffer_Dispositivo,(A0)+
#1,Contador
A0,Puntero
(sp)+,A0
donde Puntero es una variable que apunta a la dirección de memoria donde se
almacenan los datos y Contador es otra variable que contabiliza el número de datos
leídos.
3.- Por último, se incorpora un dispositivo de DMA. Por cada robo de ciclo que realiza
ocupa los buses durante 500 nS. El dispositivo de DMA no tiene ningún buffer, es decir,
pide robo de ciclo por cada dato que envía el dispositivo. Las instrucciones para
programar el DMA son:
Rutina_DMA
move.w
lea
move.l
bset
#500,Reg_Contador_DMA
Dir_Memoria,A2
A2,Reg_Direccion_Inicio_DMA
#4,Reg_Control_DMA
En un momento dado se va a realizar la transferencia de 500 palabras. Se pide, para cada
uno de los 3 casos:
a) Número medio de instrucciones, por palabra transferida, ejecutadas por la CPU
durante toda la transferencia de las 500 palabras.
1
b) Número máximo de instrucciones, pertenecientes a otros procesos diferentes del que
realiza la operación de transferencia, que puede ejecutar la CPU durante toda la
duración de la transferencia de las 500 palabras.
NOTA: Suponer que todas las instrucciones tienen el mismo tiempo de ejecución.
EJERCICIO 2
Se desea construir un ordenador con procesador MC68000, 64 Kbytes de memoria ROM,
1 Mbyte de memoria RAM y una pantalla cuyo controlador funciona mediante DMA. El
controlador de DMA se encargará de transferir bloques de información (pantallas) desde
la memoria del ordenador a la pantalla, por cada byte que transfiere requiere un robo de
ciclo. Cuando finaliza la transferencia del bloque de datos, el DMA avisa a la CPU
enviando una interrupción.
Los componentes de que se dispone son: un procesador MC68000, memorias EPROM de
32 Kbytes, memorias RAM de 512 Kbytes, un controlador de DMA asociado a la pantalla y
un número ilimitado de puertas lógicas con cualquier número de entradas. Los esquemas
de las memorias y del controlador son los que aparecen a continuación:
EPROM
32Kx8
RAM
512Kx8
DMA
Interface
con la
pantalla
R0-2
D0-7
D0-7
A0-22 BGACK*
OE*
OE*
A0-14
BG*
A0-18
D0-7
WE*
BR*
INTACK*
R/W*
CS*
CS*
INTR*
CS*
La memoria ROM se quiere situar en las direcciones bajas, seguida de la memoria RAM y
el controlador en las direcciones pares comprendidas entre el rango $FFFFF0 y
$FFFFFE. La siguiente figura muestra este mapa de memoria.
000000
010000
15
8 7
0
ROM
64 Kbytes
RAM
1024 Kbytes
VACIO
FFFFF0
Controlador DMA
FFFFFE
2
Se va a realizar la conexión del controlador de DMA y las memorias al procesador, no se
van a realizar las conexiones entre el DMA y las memorias. Para conectar el controlador
de DMA al procesador, se debe tener en cuenta que este controlador autovectoriza y que
el nivel de prioridad con la que se desea que interrumpa es 5, siendo esta la única
interrupcción en el sistema. En la figura que muestra el esquema del DMA, las líneas R0 a
R2 sirven para direccionar los registros del DMA.
SE PIDE:
1. Realizar la función de decodificación que genera las entradas CS* (selección de
pastilla) de las memorias y del controlador de DMA. Emplear decodificación TOTAL y
utilizar EXCLUSIVAMENTE puertas lógicas.
2. Realizar la conexión entre el resto de los pines del controlador y la CPU: D0-7 (bus de
datos), R0-2 (dirección de registro), INTR* (petición de interrupción), INTACK*
(aceptación de interrupción), BR* (petición de bus), BG* (cesión de bus) y BGACK*
(aceptación de bus).
3. Diseñar una función que detecte accesos desafortunados (cuando el procesador
intenta acceder a una dirección no implementada). Esta función se llevará a la entrada
BERR* del procesador.
EJERCICIO 3
Como parte de un proyecto es necesario realizar un subsistema dotado de memoria RAM
y de cuatro líneas de comunicaciones: LínA, LínB, LínC y LínD. El cometido del
subsistema es almacenar en RAM los primeros 256 bytes recibidos por LínA, los primeros
256 recibidos por LínB, los primeros 256 recibidos por LínC y los primeros 256 recibidos
por LínD. Las cuatro líneas operan a velocidades distintas. Dentro de la memoria RAM
disponible, los bytes procedentes de LínA deberán escribirse en las primeras 256
direcciones, los procedentes de LínB deberán escribirse en las segundas 256 direcciones,
los procedentes de LínC en las 256 terceras direcciones y los procedentes de LínD en las
siguientes 256 direcciones.
Se pide:
Construir el subsistema anteriormente especificado, a partir tan solo de un
microprocesador MC68000 y de los componentes hardware que se describen a
continuación (mas las puertas lógicas, codificadores y decodificadores que se consideren
necesarios):
•
•
•
dos pastillas, EPROM1 y EPROM2, de 1Kx8 (con patas CS*, A9-A0, D7-D0 y OE*),
dos pastillas, RAM1 y RAM2, de 32Kx8 (con patas CS*, A14-A0, D7-D0, OE* y
WE*), y
cuatro Pastillas Receptoras, PRA, PRB, PRC y PRD, de recepción a través de las
respectivas líneas de comunicación, LínA, LínB, LínC y LínD, cuyo funcionamiento
se describe a continuación.
3
LínA
PRA
LínB
PRB
LínC
PRC
LínD
PRD
D7-D0
DATOA
D7-D0
DATOB
D7-D0
DATOC
D7-D0
DATOD
REG
ESTADO
IACKC*
NVIC
IACKD*
NVID
INTC*
CS*
INTD*
CS*
CS*
INTB*
CS*
En PRA hay dos registros de 8 bits, DATOA y ESTADO, que pueden leerse activando la
pata CS* y REG (poniendo un 0 en REG se lee de DATOA, poniendo con un 1 en REG se
lee de ESTADO). Inicialmente el registro ESTADO tiene el valor $FF. A medida que se
recibe un byte por la línea de comunicación LínA, éste se va almacenando en el registro
DATOA. Cuando termina de recibirse el byte, el registro ESTADO toma el valor $00. La
lectura del registro DATOA provoca automáticamente que ESTADO vuelva a tomar el
valor $FF.
En PRB cuando termina de recibirse por la línea LínB un byte, éste se almacena en
DATOB, activándose inmediatamente la pata INTB*. El contenido de DATOB puede
leerse sin más que activar la pata CS*, provocando dicha lectura la desactivación de la
pata INTB*.
PRC y PRD funcionan ambas igual, por lo que sólo describiremos PRC. Cuando termina
de recibirse por LínC un byte, éste se almacena en DATOC, activándose inmediatamente
la pata INTC*. El contenido de DATOC puede leerse posteriormente activando la pata
CS*. La activación de la pata IACKC* provoca que la pastilla vuelque el contenido del
registro NVIC (Número del Vector de Interrupción utilizado por PRC) al bus de datos,
desactivándose en ese instante la pata INTC*.
Las pastillas receptoras PRA, PRB, PRC y PRD ya vienen configuradas de fábrica por lo
que no es necesario configurarlas por programa. El contenido de los registros NVIC y
NVID es 64 y 70 (en decimal) respectivamente, habiéndose grabado esos valores durante
el proceso de fabricación.
Para la resolución del ejercicio deberán seguirse los siguientes pasos haciendo uso de las
HOJAS DE RESPUESTA que se proporcionan:
1) Diseñar un mapa de memoria apropiado para ubicar en el espacio de
direccionamiento del MC68000 las pastillas de EPROM y RAM, y las pastillas
receptoras PRA, PRB, PRC y PRD.
2) Conectar al 68000 las pastillas de EPROM y RAM, y las pastillas receptoras PRA,
PRB, PRC y PRD (a excepción de sus patas INTB*, INTC*, INTD*, IACKC* e
IACKD*), utilizando decodificación parcial.
3) Realizar la conexión al 68000 de las pastillas receptoras PRB, PRC y PRD en lo
relativo a las patas INTB*, INTC*, INTD*, IACKC* e IACKD*, de forma que PRB
pueda interrumpir autovectorizando con nivel de prioridad 1 (vector de
interrupción número 25 en decimal), que PRC pueda interrumpir vectorizando con
nivel de prioridad 2 y que PRD pueda interrumpir vectorizando con nivel de
prioridad 4.
4
4) Escribir la parte del programa principal correspondiente al polling que es necesario
realizar sobre PRA, así como las tres rutinas de tratamiento de las interrupciones
procedentes de PRB, PRC y PRD.
5) Dar una relación de los datos que es necesario grabar en la EPROM (vector de
reset y vectores de interrupción utilizados), indicando su valor y las direcciones de
memoria que deben ocupar.
EJERCICIO 4
Deseamos controlar automáticamente la temperatura de una sala que debe permanecer
siempre entre los márgenes de 50 y 60 grados. Para realizar dicho control se dispone de
los siguientes dispositivos: un termómetro, un termostato y una luz de alarma. Cada uno
de estos dispositivos tiene conectado un chip controlador que se describe a continuación:
Controlador-termómetro.
ALARMA*
SAL*
REG_TEMP
N7-0
Sirve para indicar en todo momento la temperatura que hay en la sala. Tiene las
siguientes patas: SAL=Permiso de salida. Cuando se active esta señal, el chip saca por
las líneas N7-N0 la temperatura (en grados) que marca el registro REG_TEMP.
ALARMA=Señal de alarma. Si el controlador detecta una temperatura <50 o >60 activa
esta señal de salida. Esta señal permanecerá activa hasta que se lea REG_TEMP.
Controlador-termostato.
REG_CONTROL
SEL*
REG_ESTADO
LEC/ESC*
DAT7-0
AVERIA*
AVERIA-RECONOCIDA*
Sirve para regular la temperatura de la sala, para lo cual tiene dos registros internos:
REG_CONTROL=Registro de control (tamaño de 8 bits). Este registro es sólo de
escritura, donde los bits 7 y 6 sirven para aumentar o disminuir la temperatura de la
siguiente forma:
b7 b6 Acción
0
0
Enfriar
0
1 Calentar
1
x
Parado
5
Si se escribe la combinación “00” o “01” en estos dos bits, el controlador enfría o calienta
la sala hasta que se vuelva a escribir la combinación “1x”.
REG_ESTADO=Registro de estado (tamaño de 8 bits). Es sólo de lectura. El bit 7 indica
si se ha producido una avería, tomando el valor uno en este caso. Su lectura hace que se
ponga a cero. Estos dos registros pueden ocupar la misma posición dentro del mapa de
memoria y dependiendo de la señal Lec/Esc se selecciona uno u otro.
Cuando se produzca una avería, además de poner el bit 7 del REG_ESTADO a 1, el
controlador activa la señal AVERÍA. Mantendrá esta pata activa hasta que reciba la señal
AVERÍA_RECONOCIDA, momento en el que además pondrá a cero el bit 7 del
REG_ESTADO.
Controlador-luz-alarma.
SEL*
Mantiene la luz de alarma encendida mientras esté activada la señal de selección SEL.
Además disponemos de dos pastillas de memoria ROM de 8Kx8 y un procesador 68000.
El comportamiento del sistema que se desea realizar se puede describir con el
pseudocódigo siguiente:
REPEAT
IF (temperatura <50 o >60) THEN Regular temperatura a 55
IF Hay avería THEN REPEAT Encender luz de alarma FOREVER
FOREVER
Es decir, la temperatura de la sala puede bajar o subir dependiendo de factores externos.
El sistema deberá estar chequeando la temperatura y si detecta que baja de 50 grados o
sube de 60 grados deberá activar el termostato, calentando o enfriando la sala hasta
situarla en 55 grados. A continuación se parará el termostato hasta que detecte otra vez
que la temperatura ha alcanzado un valor extremo (50 o 60). Si en un momento dado el
sistema detecta una avería en el termostato, deberá activar la luz de alarma hasta el
nuevo reseteo del sistema.
APARTADO A
A1) Utilizando decodificación parcial, hacer las conexiones hardware necesarias para
realizar todo el control del sistema mediante muestreo (polling). Escribir además los
programas que deberán estar en la memoria ROM para realizar dicho control.
A2) Supongamos que el encendido de la luz de alarma se realiza de la siguiente forma:
IF hay avería THEN Encender luz de alarma y parar el procesador (STOP)
¿Qué tipo de dispositivo adicional habría que añadir al sistema para que la luz de
alarma se encendiese correctamente? ¿Cómo conectarías este dispositivo al
sistema?
6
APARTADO B
B1) A continuación se desea realizar el mismo control de temperatura, con los mismos
componentes, pero mediante interrupciones. Añadir las conexiones necesarias al sistema
para que las señales de ALARMA y AVERÍA se controlen como interrupciones
autovectorizadas de niveles 1 y 2 respectivamente.
B2) Indicar a partir de qué dirección de la memoria deberán estar las rutinas de
tratamiento de interrupción y cual deberá ser su contenido. Sabemos que la tabla de
vectores de interrupción está a partir de la dirección de memoria $0000 y a las
interrupciones autovectorizadas les corresponden los vectores 25, 26, ..., 31.
EJERCICIO 5
Se desea realizar una instalación de riego por aspersión en un campo dividido en tres
parcelas en las que se sembrará maíz, girasol y alfalfa. La forma en que se distribuyen los
cultivos en las parcelas y las necesidades de humedad de los mismos vienen dadas en la
siguiente tabla:
PARCELA CULTIVO
A
Maíz
B
Girasol
C
Alfalfa
FRECUENCIA RIEGO
1 vez al día
1 vez cada 2 días
1 vez cada 2 días
DURACION
45 minutos
30 minutos
45 minutos
Para la construcción de este sistema se dispone de un procesador MC68000, dos
pastillas de memoria EPROM, dos pastillas de memoria RAM, un timer TH y tres
dispositivos RIG. La siguiente figura muestra un esquema de las pastillas:
EPROM
1Kx8
RAM
8Kx8
CONT.
RIG
RS
D0-7
D0-7
OE*
A0-9
TIMER
TH
OE*
A0-12
IntR*
CS*
r0
r1
IntACK*
WE*
CS*
R/W* D0-7
D0-7
RS
r2
IntR*
CS*
El timer TH se programará para avisar que se debe iniciar el riego, es común a las tres
parcelas y su funcionamiento es como sigue: cada vez que pasan 24 horas genera una
interrupción activando la línea IntR*. Esta línea permanecerá activada mientras no se
active la línea IntACK* que indica reconocimiento de interrupción, momento en el que el
dispositivo pone en las líneas d0-d7 el valor $FF.
Cada parcela cuenta con un dispositivo RIG que permite que se programe la duración del
riego. Este dispositivo cuenta con un registro de control (registro r0), un contador (registro
7
r1) que son registros en los que únicamente se puede escribir, y un registro de estado
(registro r2) del que sólo se puede leer. Con RS a cero se direccionan los registros de
control y estado, mientras que con RS a uno se direcciona el registro contador.
Para activar el riego se debe de poner a 0 el bit 7 del registro de control. Cuando el riego
está activado, el contador se decrementa en uno por cada minuto que pasa. Cuando el
contador llega a 0 se pone a 0 el bit 7 del registro de estado y se activa la línea IntR* de
petición de interrupción, que permanecerá activada hasta que se escriba un 1 en el bit 7
del registro de control, en este momento el dispositivo pondrá a 1 el bit 7 del registro de
estado.
También se dispone de decodificadores DEC y un número ilimitado de inversores y
puertas lógicas de dos y tres entradas. Los decodificadores DEC operan según la
siguiente tabla:
CS*
1
0
0
0
0
e1
x
0
0
1
1
e0
x
0
1
0
1
s3
1
1
1
1
0
s2
1
1
1
0
1
s1
1
1
0
1
1
s0
1
0
1
1
1
SE PIDE:
Apartado a: Decodificación y conexión de los buses de datos y direcciones de las
pastillas de memoria y entrada/salida con el procesador.
a1: Realizar la conexión de las señales de selección de todos los componentes
necesarios para implementar el sistema que se ha descrito. Emplear decodificación
parcial utilizando el mínimo de componentes hardware. Indicar para cada pastilla de
memoria o dispositivo de entrada/salida el rango de direcciones en que se ha situado.
a2: Realizar la conexión del bus de datos, bus de direcciones, señales de lectura,
escritura y asentimiento de dato de todos los componentes que forman el sistema.
a3: Realizar la conexión para que el timer TH interrumpa con nivel de prioridad 1 y vector
255, y para que los tres dispositivos RIG interrumpan con nivel de prioridad 2
autovectorizando. Utilizar únicamente los componentes de que se dispone.
Apartado b: Programación de las rutinas de tratamiento de interrupción. A continuación
se da la estructura del código del programa que controla el sistema. Este programa y la
arquitectura que se ha construido son el único hardware y software que incluirá el sistema
de riego.
8
CODIGO
Bucle
EQU ........
ORG CODIGO
..........
..........
BRA Bucle
Rut_TH
..........
..........
RTE
Rut_RIG
..........
..........
RTE
b1: Escribir en lenguaje del MC68000 el código de la rutina de tratamiento de interrupción
Rut_TH asociada al dispositivo TH. La función de esta rutina es activar el sistema de
riego en la parcela que corresponda regar.
b2: Codificar en ensamblador la rutina de tratamiento de interrupción Rut_RIG para
desactivar el riego en la parcela que se haya regado el tiempo programado.
b3: Escribir en el cuerpo del programa las instrucciones necesarias para inicializar los
registros de CPU o direcciones de memoria RAM que se precisen para que el sistema
funcione correctamente.
b4: Justificar si es preciso grabar alguna dirección de memoria EPROM además de las
direcciones que ocupe el código y si es así indica cuales y con qué valores.
9