Professional Documents
Culture Documents
k1 Interrupcao Geral
k1 Interrupcao Geral
INTERRUPÇÃO
Aulas 17 , 18 e 19
Objetivos
Atendimento de eventos
externos e internos!
CPU MEM
PROG
Controlador
GSI RSI
INTERRUPÇÃO
Como eu informo a
CPU que um evento Cada linha de interrupção
quer interrompê-la? têm associada a ela um
dispositivo (ou conjunto
deles) que enviam o sinal
Via um sinal de de interrupção quando
interrupção desejam ser atendidos.
enviado ao GSI por
linhas de interrupção
EXEMPLO
• Vejamos agora o atendimento de uma interrupção mais detalhadamente:
SINAL DE
INTERRUPÇÃO
O que vai
acontecer?
BUSCA EXECUÇÃO
• ARQUITETURA:
D Q
PARTIDA
CLR Q sinal do fim
GERADOR DE SEQUÊNCIA da sequência
Flip-Flop DE INTERRUPÇÃO de micro-
de comandos
...
Interrupção
sinais de controle
GERADOR DE SINAIS DE INTERRUPÇÃO
ATENDIMENTO DE UMA INTERRUPÇÃO
Onde iremos
armazenas essas PILHA!
informações?
CPU MEM
L1 RS1
Mapeamento
L2 RS2
ROTINAS DE SERVIÇO DE INTERRUPÇÃO
Qual é o endereço da Rotina de
Serviço de Interrupção?
CPU MEM
L1 PUSH PC
Controlador
end PUSH PSW
de GSI
L2 Interrupções IN CONTRL
JUMP RSI
ROTINAS DE SERVIÇO DE INTERRUPÇÃO
Qual é o endereço da Rotina de
Serviço de Interrupção?
Polling
• Neste caso, temos uma Rotina de Serviço que lê o status de todos os dispositivos
conectados à linha de interrupção
• Caso algum dispositivo tenha emitido um sinal de interrupção, acontece o desvio
para RSI correspondente.
RS: IN STATUS1
CPU MEM Jcond RS1
IN STATUS2
Jcond RS2
LI GSI
...
IN STATUSn
Jcond RSn
INTERRUPÇÃO
• Resumindo o que vimos até agora...
MEMÓRIA
L1
END1
RS1 RS1
“mouse” “mouse”
L2 RS2
END2
“teclado” – P1
RS2 RS2
...
“teclado” “teclado”
JUMP ENDX
Ln
ENDn
Nesta forma de
organização, cada Invadiu a área
endereço SINAIS DO GSI ENDX RS2 reservada para a RSI
associado à linha
de interrupção PUSH PC “teclado” – P2 de outra linha de
possui um interrupção!
PUSH PSW Desviar a
conjunto de
palavras para
JUMP ENDi execução para
PC ← ENDi
instalação das uma área livre Solução?
RSIs. da memória
ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO
VETORES DE INTERRUPÇÃO!
ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO
(2) Em vetores (interrupção vetorizada)
MEMÓRIA
L1
END1 RS1
L2 END2 RS2 VETOR DE
... INTERRUPÇÕES
Ln RS3
ENDn
• Processadores mais modernos (por exemplo, ARM) possuem uma área da memória
reservada para os endereços das RSIs. Essa área é chamada de “Vetor de Interrupções” e
geralmente localiza-se no início do espaço de memória, a partir do endereço 0
• A vantagem desta estratégia é que as RSIs podem ser instaladas em qualquer área livre da
memória sem restrição de tamanho
ORGANIZAÇÃO DOS ENDEREÇOS DE INTERRUPÇÃO
• Em algumas circunstâncias, para que a Rotina de Serviço de Interrupção seja executada
corretamente, podem ser necessárias algumas condições especiais
• Por exemplo, o evento “reiniciar”:
- Ao pressionar o botão “reiniciar”, o programa corrente é interrompido e a execução
é desviada para uma RSI que inicializa o Sistema Operacional
- Durante esta inicialização, nenhum sinal de interrupção pode interromper a RSI
- Para que nenhuma interrupção aconteça, precisamos desabilitá-las no Registrador de
Estado (PSW)
- Uma forma de implementação é associar bits do PSW à linhas de interrupção. Se bit =
1, a linha correspondente ao bit pode interromper a execução. Se bit = 0, não pode
interromper.
REGISTRADOR DE ESTADO (PSW) L3 L2 L1
0 0 1
END DA Vetor de
Própria Instrução
ROTINA DE SERVIÇO Interrupções
DESVIO DA
Salva PC Salva PC e PSW
EXECUÇÃO
Seja uma arquitetura onde as linhas de interrupção L1, L2 e L3 estão associadas a um Vetor de
Interrupções de endereços contíguos e sem PSW. O Vetor de Interrupções começa na posição 0
de memória e as RSIs estão, respectivamente, nas posições 300, 400 e 500. Escreva um programa
que implemente estas condições.
L1 0
END1 RS1 300
L2 RS2 1 400
END2
L3 END3 RS3 2 500
Seja uma arquitetura onde as linhas de interrupção L1, L2 e L3 estão associadas a um Vetor de
Interrupções de endereços contíguos e sem PSW. O Vetor de Interrupções começa na posição 0
de memória e as RSIs estão, respectivamente, nas posições 300, 400 e 500. Escreva um programa
que implemente estas condições.
L1 0
END1 RS1 300
L2 RS2 1 400
END2
L3 END3 RS3 2 500
Instalando as RSIs: ORG 300
Instalando o VI: RS1: ...
...
ORG 0 RTI
ADR RS1 ou DW 300 ORG 400
ADR RS2 ou DW 400 RS2: ...
ADR RS3 ou DW 500 ...
RTI
ORG 400
RS2: ...
...
RTI
INSTALANDO RSIs
Seja agora uma arquitetura onde as linhas L1, L2 e L3 estão associadas a um Vetor de Interrupções de endereços
contíguos e com PSW. O V.I. começa na posição 0 de memória e as RSIs estão, respectivamente, nas posições
150, 350 e 400. Cada linha pode ser interrompida pelas outras, menos por si mesma e os 3 bits menos
significativos do PSW habilitam e desabilitam as interrupções nas linhas. Escreva um programa Assembly que
implemente esta situação, lembrando que os sinais de controle gerados pelo GSI são: PUSH PC
PUSH PSW
MOV ENDi, PSW
JUMP (ENDi + 1)
INSTALANDO RSIs
Seja agora uma arquitetura onde as linhas L1, L2 e L3 estão associadas a um Vetor de Interrupções de endereços
contíguos e com PSW. O V.I. começa na posição 0 de memória e as RSIs estão, respectivamente, nas posições
150, 350 e 400. Cada linha pode ser interrompida pelas outras, menos por si mesma e os 3 bits menos
significativos do PSW habilitam e desabilitam as interrupções nas linhas. Escreva um programa Assembly que
implemente esta situação, lembrando que os sinais de controle gerados pelo GSI são: PUSH PC
PUSH PSW
MOV ENDi, PSW
JUMP (ENDi + 1)
psw1: 1102 L3 L2 L1
Definindo as máscaras: psw2: 1012 PSW
psw3: 0112
Instalando o VI: Instalando as RSIs: ORG 150
ORG 0 RS1: ...
DW 110 ...
ADR RS1 ou DW 150 RTI
DW 101 ORG 350
ADR RS2 ou DW 350 RS2: ...
DW 011 ...
ADR RS1 ou DW 400 RTI
ORG 400
RS2: ...
...
RTI
QUESTÕES ADICIONAIS
. EXCEÇÕES INTERNAS
. EXCEÇÕES PROGRAMADAS
Interrupção
Interrupções são uma sub-classe das
EXCEÇÕES
Prioridade de Atendimento
Prioridade Exceção
1 (máxima) Reset
2 Data Abort
3 FIQ
4 IRQ
5 Prefetch Abort
6 SWI
6 UI
Exceções
Atendimento
Programa Principal
3
1 Rotina de Exceção
2
Vetor de Endereço
Atendimento da Exceção
Vetor
• Contém os endereços das Exceções End de Int.#
0x40 + 4*N Int Ext. N 16 + N
• Permite até 496 interrupções externas … … …
- Implementação definida pelo usuário
0x40 Int Ext. 0 16
• Vetor pode ser realocado caso seja …
necessário 0x1C FIQ 7-10
- Usar um registrador offset para isso
0x18 IRQ 6
• Cada exceção possui um número 0x14 RESERVED 5
correspondente para ser feito o 0x10 Data Abort 4
mapeamento
• - Valor usado pelo Registrador de Estado 0x0C Prefetch Abort 3
e Controlador de Interrupções 0x08 SWI 2
0x04 UI 1
0x00 Reset N/A
Interrupções Externas
Cortex-Mx
INTISR[N] Processor Core • Suporta até 496
interrupções
• Suporta uma interrupção
Cortex-Mx Integration Layer não-mascarada
Interrupções
IRQ1
IRQ2
IRQ3
Base CPU
Time
• “Exceções Programadas”