E/S: Polling e Interrupciones Organización del Computador 1 Ejercicio 1 ciclo: llegoPersona: MOV R0, 0x0000 CMP [0xFFF0], 0x0001 JE llegoPersona JMP ciclo ADD R0, 0x0001 MOV [0xFFF0], 0x0000 JMP ciclo Ejercicio 2 Una nueva señal de entrada INTR de solicitud de interrupción. Una nueva señal de salida INTA de reconocmiento de interrupción. Un nuevo Flag I que indica: • 1 el procesador puede ser interrumpido. • 0 el procesado no puede ser interrumpido. Se reserva la dirección de memoria 0x0000 para almacenar la dirección de la RAI del dispositivo. Se agregan 4 nuevas instrucciones al procesador: • CLI: Coloca I en 0. • STI: Coloca I en 1. • Push Ri: [SP ] = Ri y luego SP = SP − 1 • Pop Ri: SP = SP + 1 y luego Ri = [SP ] Ejercicio 3 a) 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) 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 1 cada 7 ∗ t sg. En conclusión, la frecuencia de muestreo es 7∗t Hz. c) i. 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 1 E/S: Polling e Interrupciones Organización del Computador 1 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 5 ∗ t sg. En conclusión, 1 1 la frecuencia de muestreo es 5∗t > 7∗t Hz. ii. sensar: CALL sonarAlarma ;invoca rutina de alarma IRET Ejercicio 4 a) Registros: • IMR: Registro mascara. • IRR: Registro de solicitudes. Memoria: • 0x0000: Dirección RAI Detector. • 0x0002: Dirección RAI Radio. • 0x0004: Dirección RAI Actualizador. Lı́neas de interrupción: • IR0: Componente detector. • IR1: Componente radio. • IR2: Componente actualizador. Configuración Normal: • I=1 • IMR = (0000 0111) b) a) Detector levanta IR0 b) CI (8259A) estima si corresponde enviar solicitud de int. al CPU (INTR) c) CPU termina ciclo d ) Si I=1 entonces (atómicamente) 1) 2) 3) 4) Apila PSW Apila PC responde INTA Obtiene ID del dipositivo y coloca P C = InicioV ector + ID c) RAI\_Radio: CLI ;Inhabilitar interrupciones ;Guardar la mascara actual PUSH R0 ;Apilar el registro R0 MOV R0, [0xFFFA] ;Mascara Actual -> R0 PUSH R0 ;Apilar la máscara actual ;Setear nueva mascara MOV R0, 0x0001 ;Nueva Mascara en R0 MOV [0xFFFA], R0 ;R0 -> Mascara STI ;Habilitar interrupciones CALL TratarMensajeRadial ;Restaurar mascara CLI ;Inhabilitar interrupciones POP R0 ;Restauro mascara y el registro R0 MOV [0xFFFA], R0 POP R0 STI ;Habilitar interrupciones IRET ;Volver de la interrupción 2