Clase Practica - Entrada Salida e Interrupciones

Anuncio
Clase Practica
Entrada-Salida e Interrupciones
Segundo Cuatrimestre 2008
David A. Gonzalez Marquez
Introducción
Entrada- Salida
• Mapeo de E/S
◦ Mapeo a memoria
◦ Espacio Independiente
• Mecanismo de interacción
◦ Por registro
◦ Por interrupción
• Primitivas de los dispositivos
Interrupciones
• Mecanismo de interrupciones
◦ Protocolo
Controlador de Interrupciones
• Mascara
• Vector de interrupciones
Mecanismo de interrupciones (ejemplo del protocolo)
1. El dispositivo genera una interrupción
2. El controlador de interrupciones decide si debe interrumpir al procesador
3. El CPU captura la interrupción e inhibe todas las interrupciones
4. La CPU guarda el PC
5. La CPU guarda el entorno de la ejecución anterior
6. El CPU lanza la rutina asociada al vector de interrupciones
7. La rutina guarda la mascara de interrupciones anterior
8. La rutina genera la nueva mascara de interrupciones
9. La rutina habilita las interrupciones
10. Código especifico de la rutina
11. La rutina inhibe las interrupciones
12. La rutina retorna la mascara de interrupciones anterior
13. La rutina retorna de la interrupción
14. El CPU retorna el entorno de la ejecución anterior
15. El CPU restaura el PC
Ejercicio 1 (6 de marzo de 2008) Una computadora ORGA1 está conectada a 4 dispositivos
de E/S para gobernar el funcionamiento de una escalera extensible de 2 tramos. Los dispositivos
de E/S son:
un motor (M1). Este motor pueden estar en 3 estados posibles: Apagado, Desplegando o
Replegando. El motor permite subir/bajar el 2do tramo de la escalera.
dos sensores (S1,S2). Los sensores indican si se alcanzó la extensión máxima (S1) o mı́nima
(S2) del 2do. tramo.
una botonera (B1). La botonera indica si el operario humano de la escalera está oprimiendo
el botón SUBIR, el botón BAJAR o ningún botón.
Arriba
Segundo Tramo
S2____
|_____|
|_____|
____ |_____|
|____[M1]____|
|_____||_____|
|_____||_____|
|_____||_____|
|_____|S1
|_____|
|_____|
|_____|
Primer Tramo
Abajo
a) Completar la siguiente tabla:
Dispositivo
E/S
M1
S1
S2
B1
Registro
E/S
M1 CTRL
M1 CTRL
M1 CTRL
...
...
...
...
...
...
...
Valor
00
01
10
...
...
...
...
...
...
...
Estado/Acción
Dispositivo
Apagar
Desplegar
Replegar
...
...
...
...
...
...
...
Solución. [dgonzalez]
Dispositivo
E/S
M1
S1
S2
B1
Registro
E/S
M1 CTRL
M1 CTRL
M1 CTRL
S1 STATUS
S1 STATUS
S2 STATUS
S2 STATUS
B1 STATUS
B1 STATUS
B1 STATUS
Valor
00
01
10
0
1
0
1
00
01
10
Estado/Acción
Dispositivo
Apagar
Desplegar
Replegar
Máximo no alcanzado
Máximo alcanzado
Mı́nimo no alcanzado
Mı́nimo alcanzado
Ningún botón presionado
Botón SUBIR
Botón BAJAR
b) Mapear los registros de E/S a direcciones de E/S de ORGA1
Solución. [jgaleotti]
0xFFF0 7→ M1 CTRL
0xFFF1 7→ S1 STATUS
0xFFF2 7→ S2 STATUS
0xFFF3 7→ B1 STATUS
c) Escribir el pseudocodigo del programa que controla la escalera. El comportamiento esperado
es el que sigue:
Cuando el operario oprime el Botón Subir, el Motor comienza a desplegarse hasta que:
o bien el operario deja de oprimir el Botón Subir, o bien el 2do tramo alcanza la altura
máxima.
Cuando el operario oprime el Botón Bajar, el Motor comienza a replegarse hasta que: o
bien el operario deja de oprimir el Botón Bajar, o bien el 2do tramo alcanza la altura
mı́nima.
Solución. [dgonzalez]
while(true)
{
if (B1_STATUS=01)
M1_CTRL=01
// SUBIR detectado
while(B1_STATUS=01) && (S1_STATUS=0) { // Mientras SUBIR oprimido o MAXIMO no alcanzado
// seguir
}
M1_CTRL=00
// apagar motor
if (B1_STATUS=10)
M1_CTRL=01
// BAJAR detectado
while(B1_STATUS=10)&&(S2_STATUS=0) {
// BAJAR oprimido o MINIMO no alcanzado
// seguir
}
M1_CTRL=00
}
// apagar motor
Ejercicio 2 (13 de marzo de 2008) Una computadora ORGA1 se encuentra conectada a 3
dispositivos de E/S que actúan como sensores. Cada sensor posee un registro de E/S que reporta
información climática. Los sensores son:
Temperatura: Mide temperatura en grados celsius (TEMP STATUS)
Presión Atmosférica: Mide presión en HectoPascales (ATM STATUS)
Intensidad del Viento: Mide intensidad en Metros/Segundo (WIND SPEED)
Las etiquetas MAX TEMP, MAX ATM, MAX WIND SPEED son constantes de 16 bits.
a) Mapear los registros de E/S a direcciones de E/S de ORGA1 y completar el siguiente código:
sensar: CMP [...], MAX_TEMP ;alcanzó temperatura máxima?
JG alarma
CMP [...], MAX_ATM ;alcanzó presión atmosférica máxima?
JG alarma
CMP [...], MAX_WIND_SPEED ;alcanzó velocidad máxima?
JG alarma
JMP sensar
alarma: CALL sonarAlarma ;invoca rutina de alarma
JMP sensar
Solución. [jgaleotti] Mapeo de registros.
TEMP STATUS 7→ 0xFFF0
ATM STATUS 7→ 0xFFF1
WIND SPEED 7→ 0xFFF2
sensar: CMP [0xFFF0], MAX_TEMP ;alcanzó temperatura máxima?
JG alarma
CMP [0xFFF1], MAX_ATM ;alcanzó presión atmosférica máxima?
JG alarma
CMP [0xFFF2], MAX_WIND_SPEED ;alcanzó velocidad máxima?
JG alarma
JMP sensar
alarma: CALL sonarAlarma ;invoca rutina de alarma
JMP sensar
b) Suponiendo que el ciclo de instrucción de cada instrucción del programa tarda t sg y los valores
máximos nunca se alcanzan ¿cuál es la frecuencia (en Hz) de muestreo (lectura) los registros
de E/S?
Solución. [jgaleotti] Si no se alcanzan los valores máximos, cada iteración ejecuta 7 instrucciones. Por lo tanto, podemos concluir que cada iteración tarda 7 ∗ t sg. Como podemos realizar
una única lectura por iteración, se lee la señal cada 7 ∗ t sg. En conclusión, la frecuencia de
1
muestreo es 7∗t
Hz.
c) Suponga que el CPU cuenta con soporte para 1 interrupción. El sensor de temperatura solicita
una interrupción si se alcanza la temperatura máxima.
i. Modificar el programa presentado para aprovechar esta caracterı́stica de modo que la
frecuencia de muestreo sea mayor.
Solución. [jgaleotti]
sensar: CMP [0xFFF1], MAX_ATM ;alcanzó presión atmosférica máxima?
JG alarma
CMP [0xFFF2], MAX_WIND_SPEED ;alcanzó velocidad máxima?
JG alarma
JMP sensar
alarma: CALL sonarAlarma ;invoca rutina de alarma
JMP sensar
Cada iteración ejecuta 5 instrucciones. Por lo tanto, podemos concluir que cada iteración
tarda 5 ∗ t sg. Como podemos realizar una única lectura por iteración, se lee la señal cada
1
1
5 ∗ t sg. En conclusión, la frecuencia de muestreo es 5∗t
> 7∗t
Hz.
ii. Escribir la rutina de atención de la interrupción del sensor de temperatura.
Solución. [jgaleotti]
sensar: CALL sonarAlarma ;invoca rutina de alarma
IRET
Ejercicio 3 (26 de junio de 2008) Se posee un microcontrolador con soporte para una única
interrupción y tres puertos de entrada-salida de 4 bits mapeados a memoria. El microprocesador
posee además cuatro registros de uso general (R0 a R3 ) y 1KB de memoria. El sistema consiste en
un teclado matricial de 16 teclas, conectado en el puerto P1 y puerto P2 , como muestra la figura.
microcontrolador
salida
Puerto_0
Puerto_1
teclado
Puerto_2
P0 Puerto de sólo Salida; muestra el número correspondiente a la ultima tecla presionada.
P1 Puerto de Entrada; al recibir cualquier cambio en alguno de sus 4 bits, se genera una interrupción en el microcontrolador.
P2 Puerto de sólo Salida; sirve como control del teclado.
Funcionamiento: el microcontrolador genera la secuencia 1, 2, 4 y 8 en el puerto P2 , es decir
que alterna los bits del puerto en forma secuencial. Al presionar una tecla se cortocircuita la fila y
columna correspondientes. En el momento en que la secuencia de P2 llega a la tecla presionada se
genera un cambio en el bit de P1 que corresponde a la lı́nea de la tecla, y se lanza la interrupción.
Consejo: No considerar rebote en las teclas.
1. Mencionar un conjunto de instrucciones necesarias para soportar una única interrupción
no enmascarable e indicar su tarea. Mencionar qué tareas realiza el microcontrolador para
poder llevar a cabo la atención de la interrupción, y qué queda como responsabilidad del
programador. Indicar en qué direcciones de memoria están mapeados los puertos de entradasalida.
2. Escribir en assembler de Orga I (con soporte para interrupciones),
a) la rutina del microcontrolador,
b) la rutina que atiende la interrupción del puerto P1 .
Solución.
[dgonzalez]
1. No existe ninguna instrucción indispensable para soportar esta interrupción, ya que la única
tarea que se debe realizar en la rutina de atención de interrupciones es guardar el estado
del procesador, tarea que se puede realizar con instrucciones usuales. No obstante, a fin de
tener un conjunto de instrucciones necesarias como pide el ejercicio debe mencionarse RETI
o retorno de interrupción. Que será la encargada de cargar el estado del procesador una vez
terminada la rutina de atención.
Una vez producida la interrupcion, en microcontrolador almacena temporariamente el estado
del procesador. Primero guarda el PC y el PSW en la pila y luego carga el nuevo PC con la
direccion de la rutina que atiende la interrupcion. Queda como tarea para el programador,
guardar los registros que su rutina modifique y finalizar la misma con RETI
Los puertos corresponderan a las siguientes direcciones de memoria:
PUERTO 1 = 0x3FD
PUERTO 2 = 0x3FE
PUERTO 3 = 0x3FF
2. a) Rutina del microcontrolador:
ciclo: MOV
MOV
MOV
MOV
JMP
[PUERTO_2],0x1
[PUERTO_2],0x2
[PUERTO_2],0x4
[PUERTO_2],0x8
ciclo
//
//
//
//
Asigno
Asigno
Asigno
Asigno
0x0001b
0x0010b
0x0100b
0x1000b
al
al
al
al
puerto
puerto
puerto
puerto
b) Rutina de atención de interrupción:
Rutina:
noEs8A:
noEs4A:
noEs2A:
next:
noEs8B:
noEs4B:
fin:
MOV R0, [PUERTO_1]
CMP R0, 0x0
// si se solto el boton
JE fin
CMP R0, 0x8
// Si fue en la fila 4
JNE noEs8A
MOV R0, 0x3
// Asigno un 3
JMP next
CMP R0, 0x4
// Si fue en la fila 3
JNE noEs4A
MOV R0, 0x2
// Asigno un 2
JMP next
CMP R0, 0x2
// Si fue en la fila 2
JNE noEs2A
MOV R0, 0x1
// Asigno un 1
JMP next
MOV R0, 0x0
// Sino asigno un 0
MOV R1, [PUERTO_2]
CMP R1, 0x8
// Si fue en la columna 4
JNE noEs8B
ADD R0, 0xC
// Sumo un 12
JMP fin
CMP R1, 0x4
// Si fue en la columna 3
JNE noEs4B
ADD R0, 0x8
// Sumo un 8
JMP fin
CMP R1, 0x2
// Si fue en la columna 2
JNE fin
ADD R0, 0x4
// Sumo 4
MOV [PUERTO_0], R0
RETI
2
2
2
2
Descargar