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