Logo Studenta

arq2b

¡Este material tiene más páginas!

Vista previa del material en texto

Interrupciones por Hardware
 Pedidos de Interrupción: 
Son generadas por dispositivos de Entrada / Salida
 Interrupciones creadas por el procesador en respuesta a 
ciertos eventos (ej. división por cero)
 Tenemos que escribir la rutina de manejo de la interrupción
Interrupciones por Hardware
• MSX88 utiliza un espacio de direcciones diferente para el acceso a la 
Entrada/Salida que para acceder a la memoria.
Vector de 
Interrupciones
Programa (variables, 
subrutinas, programa 
ppal)
Pila
0000h
03FFh
8000h
Memoria RAM
Registros del Timer
Registros del PIC
Registros de otros 
dispositivos
Memoria de ES
0010h
0020h
0011h
0027h
MOV IN / OUT 
Interrupciones - Instrucciones
OUT puerto, registro De registro a puerto de E/S
out 20h,al
IN registro, puerto De puerto de E/S a registro
in al, 24h
El único registro que se puede usar es AL
Interrupciones - Instrucciones
CLI Deshabilitan las interrupciones
STI Habilitan las interrupciones
Interrupciones por Hardware
• El msx88 tiene una única línea de interrupciones
• Necesitamos un intermediario entre la CPU y las interrupciones
• Controlador de Interrupciones Programable (PIC) 
Controlador Programable de Interrupciones 
El PIC tiene conectados los siguientes dispositivos a sus líneas de petición 
de interrupción:
INT0 Conectado a la tecla F-10
INT1 TIMER, Contador de Eventos
INT2 HANDSHAKE 
INT3 Controlador de DMA
Tecla F10
Timer
Handshake
CDMA
PIC CPUINT
Controlador Programable de Interrupciones(2)
 El encargado de administrar las interrupciones es el Controlador Programable de 
Interrupciones (PIC)
 Los dispositivos que pueden interrumpir al procesador se conectan directamente al 
PIC, el PIC se conecta a la CPU.
 El PIC puede manejar 8 peticiones de interrupción independientes, numeradas de 0 
a 7 (INT0 a INT7)
 Se atiende una interrupción a la vez. El número de interrupción es la prioridad, 
teniendo prioridad los números mas bajos.
 El manejador de la interrupción llamado deberá indicarle al PIC cuando termina de 
procesar la interrupción.
 Hasta que no se termine de atender a esta interrupción no se podrá atender a la 
siguiente interrupción.
Controlador Programable de Interrupciones(3) 
El PIC tiene conectados los siguientes dispositivos a sus líneas de petición 
de interrupción:
INT0 Conectado a la tecla F-10
INT1 TIMER, Contador de Eventos
INT2 HANDSHAKE 
INT3 Controlador de DMA
Controlador Programable de Interrupciones(4)
 El PIC posee varios registros donde podemos configurar/escribir u 
obtener su estado (con las instrucciones OUT e IN)
 Tiene 12 registros en total. Los registros se encuentran ubicados en 
forma consecutiva a partir de la dirección base (20h).
 Todos los registros son de 8 bits.
 EOI
IMR
IRR
ISR
INT 0 .. INT 7
EOI
IMR
IRR
ISR
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Memoria E/S
20h
21h
22h
23h
24h
Para trabajar con Interrupciones 
Indicar cual de las 8 interrupciones posibles vamos a permitir
Escribir la rutina que va a atender la interrupción
Indicar como hallar la subrutina
Registros del Controlador de Interrupciones
IMR (21h) Registro de Máscara de Interrupciones. 
Permite enmascarar selectivamente las interrupciones que va a recibir el PIC. 
Cada bit de este registro representa una línea de interrupción. 
Si el bit N es puesto en 1, la interrupción N estará inhibida.
1 1 1 1 0 1 0 1
Int1 e Int 3 habilitadas
MOV AL, F5h
OUT 21H, AL
EOI
IMR
IRR
ISR
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Memoria E/S
20h
21h
23h
24h
22h
Registros del Controlador de Interrupciones
INT0..7 (24h-2Bh) 
Cada uno de estos registros contiene la posición en el vector de interrupción correspondiente 
a la dicha interrupción
EOI
IMR
IRR
ISR
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Memoria E/S
20h
21h
23h
24h
22h
Vectorización
 El proceso de atención de las interrupciones en el 
simulador es vectorizado
 La tabla de vectores de interrupción es el nexo entre el 
tipo de interrupción y el procedimiento designado para 
atenderlo (manejador de interrupciones)
 Esta tabla esta alojada en la posición de memoria 0000h
 La tabla posee 256 entradas (una por cada tipo)
 Cada entrada ocupa 4 bytes: 2 bytes para la dirección 
donde esta el manejador de ese tipo de interrupción 2 
bytes siempre en 00h (por compatibilidad)
Dir Subrutina L
Dir Subrutina H
00
00
Dir Subrutina L
Dir Subrutina H
00
00
Dir Subrutina L
Dir Subrutina H
00
00
0000h
0001h
0002h
0003h
0004h
0005h
0006h
0007h
0008h
0009h
000Ah
000Bh
0
1
2
¿Como configurar INT0 / 7?
 En INT0/7 ponemos la posición del vector de 
interrupción
Dir Subrutina L
Dir Subrutina H
00
00
Dir Subrutina L
Dir Subrutina H
00
00
Dir Subrutina L
Dir Subrutina H
00
00
0000h
0001h
0002h
0003h
0004h
0005h
0006h
0007h
0008h
0009h
000Ah
000Bh
0
1
2
 si en INT0 puse el valor 2 ==>
en 0008h tengo que poner la dirección donde 
comenzará la subrutina
¿Como configurar INT0 / 7?
En INT0/7 ponemos la posición del vector de 
interrupción 
Dir Subrutina L
Dir Subrutina H
00
00
Dir Subrutina L
Dir Subrutina H
00
00
00
30
00
00
0000h
0001h
0002h
0003h
0004h
0005h
0006h
0007h
0008h
0009h
000Ah
000Bh
0
1
2
si en INT0 puse el valor 2 ==> en 0008h tengo 
que poner la dirección donde comenzará la 
subrutina
ORG 3000h
<cuerpo de la subrutina>
00
25
00
00
10
0028h
0029h
002Ah
002Bh
si en INT0 puse el valor Ah(10d) ==> en 
0028h(10x4) tengo que poner la dirección donde 
comenzará la subrutina
ORG 2500h
<cuerpo de la subrutina>
¿Como configurar INT0 / 7?
 En INT0/7 ponemos la posición del vector de interrupción
 Como cada posición ocupa 4 bytes, tomamos dicho valor y lo multiplicamos 
por 4
 En esa posición de memoria debo guardar la dirección de comienzo de la 
subrutina que va a manejar la interrupción
 Ejemplo : si en INT0 = 15 ORG 60 = dir de comienzo
si en INT0 = 11 ORG 44 = dir de comienzo
si en INT0 = 0Ah ORG 28h = dir de comienzo
si en INT0 = 10 ORG 28h = dir de comienzo
EOI (20h) Fin de Interrupción. 
Es para avisarle al PIC que finalizó la rutina que atiende la interrupción.
Se debe escribir el valor 20h 
PIC EQU 20h
…..
MOV AL, 20h
OUT PIC, AL
Registros del Controlador de Interrupciones(2)
Registros del Controlador de Interrupciones(3)
IRR (22h) Registro de Petición de Interrupciones. 
Almacena las interrupciones pendientes. Cada bit de este registro representa una línea de 
interrupción. Cuando la interrupción se satisface, el bit de dicha línea se pone a cero.
ISR (23h) Registro de Interrupción en Servicio. 
El bit que representa la línea de interrupción que se esta atendiendo estará en 1. El resto en 0.
0 0 0 0 0 1 1 0
0 0 0 0 1 0 0 0
Int1 e Int 2 están esperando
Int3 se esta ejecutando
Controlador Programable de Interrupciones(4)
 El PIC posee varios registros donde podemos configurar/escribir u 
obtener su estado (con las instrucciones OUT e IN)
 Tiene 12 registros en total. Los registros se encuentran ubicados en 
forma consecutiva a partir de la dirección base (20h).
 Todos los registros son de 8 bits.
 EOI
IMR
IRR
ISR
INT 0 .. INT 7
EOI
IMR
IRR
ISR
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Memoria E/S
20h
21h
22h
23h
24h
¿Como programar el PIC?
 Desactivamos las interrupciones
 Configuramos el registro IMR para tener activas solo las interrupciones 
que nos interesen
 Configuramos el o los vectores de interrupción elegidos en los registros 
INT0 a INT7 (según corresponda)
 Por último, volvemos a activar las interrupciones
Rutina de atención de la interrupción
 La CPU debe indicarle al PIC la culminación de la rutina de atención de la interrupción
<Subrutina de interrup>
…..
MOV AL, 20h
OUT PIC, AL
IRET
 Se debe escribir el valor 20h en el registro EOI
 Debe terminar con la instrucción IRET (desapila la dir de retorno y losflags)
Tecla F-10 
•Conectada a INT0
•Emite un pedido de interrupción cada vez que es apretada la tecla
EOI
IMR
IRR
ISR
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Memoria E/S
20h
21h
22h
23h
24h
Tecla F-10 – Contar cantidad de veces presionada
PIC EQU 20H
EOI EQU 20H
N_F10 EQU 10
ORG 40
IP_F10 DW 3000H
ORG 2000H
CLI
MOV AL, 0FEH
OUT PIC+1, AL 
MOV AL, N_F10
OUT PIC+4, AL ; 
MOV DX, 0
STI
LAZO: JMP LAZO
Constantes
Inhabilito interrupciones
AL = 11111110
IMR = 1111110 (solo INT0 hab) 
AL = 10
INT0 = 10 (pos 10 del vector)
Habilito interrupciones
Lazo infinito
Configuración del PIC
Tecla F-10 – Contar cantidad de veces presionada
ORG 3000H
RUT_F10: PUSH AX
INC DX
MOV AL, EOI
OUT EOI, AL ; PIC: registro EOI
POP AX
IRET
END
Salvo AX
Aviso al PIC que termina la sub
AL = 20h
Finalizar la subrutina
Restauro AX
Incremento contador
Interrupciones por Hardware
• MSX88 utiliza un espacio de direcciones diferente para el acceso a la 
Entrada/Salida que para acceder a la memoria.
Vector de 
Interrupciones
Programa (variables, 
subrutinas, programa 
ppal)
Pila
0000h
03FFh
8000h
Memoria RAM
Registros del Timer
Registros del PIC
Registros de otros 
dispositivos
Memoria de ES
0020h
0027h
MOV IN / OUT 
Registros
EOI
IMR
IRR
ISR
INT0
INT1
INT2
INT3
INT4
INT5
INT6
INT7
Memoria E/S
20h
21h
22h
23h
24h
10h
11h
Contador
Comparador
Timer
Timer
 Es un dispositivo contador de eventos.
 Posee dos registros (de 8 bits)
CONT: Registro contador, que se incrementa cada 1 segundo
COMP: Registro de comparación, cuando COMP y CONT 
son iguales, se genera una interrupción.
 El registro CONT no vuelve a cero cuando se genera una interrupción.
10h
11h
Contador
Comparador
Memoria E/S
Para utilizar el Timer
 Habilitar la interrupción en el PIC (Registro IMR)
 Configurar el registro COMP para que nos llame en el intervalo deseado
 Poner a cero el registro CONT
 Programar el manejador de interrupción.
Timer
TIMER EQU 10H
PIC EQU 20H
EOI EQU 20H
N_CLK EQU 10
ORG 40
IP_CLK DW RUT_CLK
ORG 1000H
SEG DB 30H
DB 30H
FIN DB ?
ORG 3000H
RUT_CLK: PUSH AX
00
30
40
30H
30H
?
1000h
FIN
SEG
Timer
ORG 2000H
CLI
MOV AL, 0FDH
OUT PIC+1, AL ; PIC
MOV AL, N_CLK
OUT PIC+5, AL 
MOV AL, 1
OUT TIMER+1, AL 
MOV AL, 0
OUT TIMER, AL 
MOV BX, OFFSET SEG
MOV AL, OFFSET FIN-OFFSET SEG
STI
LAZO: JMP LAZO
END
00
30
40
30H
30H
?
1000H
FIN
TIMER =10H N_CLK = 10
PIC = EOI = 20H
20H
11H
21H
10H
22H
23H
24H
25H
Cont
Comp
EOI
IMR
IRR
ISR
INT0
INT1
Memoria E/S
SEG
Timer
ORG 3000H
RUT_CLK: PUSH AX
INC SEG+1
CMP SEG+1, 3AH
JNZ RESET
MOV SEG+1, 30H
INC SEG
CMP SEG, 36H
JNZ RESET
MOV SEG, 30H
RESET: INT 7
MOV AL, 0
OUT TIMER, AL
MOV AL, EOI
OUT PIC, AL
POP AX
IRET
30H
30H
?
SEG
FIN
11H
10H Cont
Comp
Memoria E/S
BX = 1000h
AL = 2

Continuar navegando