Chip-Select e Controle de
Interrupção
Sistemas Embarcados
Unidade de Chip-select
 Chip-Select (unidade de seleção de chip) é um mecanismo
fundamental para permitir à CPU acessar memórias e/ou
periféricos externos
 O chip-select pode ser um sinal extraído de um endereço
 No exemplo, qualquer
SRAM
endereço entre 10000h e 1FFFFh,
ou iniciando em 30000h
50000h ou 70000h, ... (A16=1)
habilita a SRAM
Unidade de Chip-Select
 Utilizando um decodificador, pode-se selecionar um entre
vários dispositivos (por exemplo, bancos de memória)
Decodificador (MUX)
Unidade de Controle de
Interrupção
 As interrupções podem ser mascaráveis ou não-mascaráveis
 As mascaráveis são controladas pela unidade de controle de
interrupção
 Interrupções podem surgir de periféricos do chip e de 5 pinos
de interrupção externa
 A unidade de controle de interrupção é responsável por
sincronizar e priorizar as interrupções, e fornecer o vetor de
tipo de interrupção à CPU
 Há duas formas de a CPU processar pedidos de periféricos:
Sondagem (polling) e interrupção
 Sondagem exige que a CPU verifique constantemente as
necessidades dos dispositivos periféricos
 Interrupção elimina tal necessidade, liberando a CPU para
tratar de outros assuntos
Unidade de Controle de
Interrupção
 Quando ocorre uma interrupção, a CPU para o processo
principal, salva seu status e transfere a execução para a
unidade periférica que a interrompeu.
 Finalizada a interrupção, a CPU restaura o status,
continuando a execução do processo principal exatamente no
ponto em que foi interrompido.
 Interrupções
mascaráveis
podem
ser
mascaradas
individualmente ou globalmente
 O Interrupt Enable bit do PSW é usado para habilitar ou
desabilitar globalmente interrupções mascaráveis
 Este controle é feito pelo programador através das instruções
STI (Set Interrupt) ou CTI (Clear Interrupt)
 O mascaramento individual de interrupções é feito através do
registrador Interrupt Mask
Unidade de Controle de
Interrupção
Unidade de Controle de
Interrupção
 Uma função crítica da unidade de controle de interrupção é
priorizar os pedidos de interrupção
 A prioridade das fontes de interrupção pode variar de zero
(maior prioridade) a sete (menor prioridade)
 As fontes podem ser programadas para compartilhar um
prioridade
Unidade de Controle de
Interrupção
 Prioridades de interrupções padrão após reset externo
 Timer 0 maior prioridade que Timer 1 que tem maior prioridade
que Timer 2
 Recepção serial tem maior prioridade que transmissão serial
Unidade de Controle de
Interrupção
 Ao atender uma interrupção, a CPU coloca o registrador PSW na
pilha e zera o bit IE (habilita temporariamente todas as
interrupções mascaráveis)
 As interrupções mascaráveis são habilitadas pela instrução IRET
ou explicitamente pelo programador
 Habilitar instruções mascaráveis permite o aninhamento (nesting)
de instruções
 Regras para aninhamento de interrupções:
 Uma fonte de interrupção não pode antecipar uma interrupção
de maior prioridade
 Uma fonte de interrupção não pode antecipar a si própria
 A forma mais simples de usar o controle de interrupção é não
utilizando o aninhamento
 O problema é que interrupções de maior prioridade passam a ter
que esperar até que uma interrupção em execução termine
Unidade de Controle de
Interrupção
 Sequência de interrupção
 Quando a unidade de controle de interrupção (UCI) detectada
uma interrupção, ela seta o bit correspondente no registrador
de pedido de interrupção, indicando que a interrupção está
pendente
 Depois a UCI checa todas as fontes de interrupção
pendentes, verifica se a interrupção não está mascarada e sua
prioridade, assegura o pedido de interrupção e espera o
reconhecimento da interrupção
 Quando a UCI recebe o reconhecimento de interrupção, ela
passa o tipo para a CPU, que dá início à sequência de
processamento
 Ao receber o reconhecimento de interrupção, a UCI limpa o bit
correspondente no registrador de pedido de interrupção e set
o bit correspondente no registrador In-Service
 O programador é responsável por limpar o bit In-Service com
a instrução EOI (End-Of-Interrupt)
Unidade de Controle de
Interrupção
 Resolução de Prioridade - o processo de aninhamento de
interrupções exige um controle mais complexo, onde tais
condições devem ser satisfeitas:
 Seu bit correspondente na máscara de interrupção está limpo
(não está mascarado)
 Sua prioridade é maior do que o valor no registrador da
máscara de prioridade
 Seu bit In-Service está limpo
 Sua prioridade é igual o maior do que aquela de qualquer
interrupção cujo bit In-Service está setado
Unidade de Controle de
Interrupção
 Exemplo de Resolução de Prioridade
Assume-se as seguintes condições iniciais:
 A UCI foi inicializada
 Nenhuma interrupção está pendente
 Nenhum bit In-Service está setado
 Todas as interrupções não estão mascaradas
 O esquema de prioridade padrão está sendo usado
 O registrador de máscara de prioridade está setado para
prioridade mais baixa (prioridade sete)
Unidade de Controle de
Interrupção
Unidade de Controle de
Interrupção
 Exemplo de Resolução de Prioridade
O exemplo usa as interrupções externas INT0 e INT3 para
descrever o processo:
1) Uma transição low-to-high em INT0 seta seu bit de pedido de
interrupção, de modo que a interrupção está agora pendente
2) A UCI assegura o pedido de interrupção à CPU e espera por
um reconhecimento
3) A CPU assegura a interrupção
4) A UCI passa o tipo de interrupção para a CPU
5) A UCI limpa o bit INT0 no registrador de pedido de
interrupção e seta o bit INT0 no registrador In-Service
6) A CPU executa a sequência de processamento, executando
o apontador de interrupção INT0
Unidade de Controle de
Interrupção
 Exemplo de Resolução de Prioridade
O exemplo usa as interrupções externas INT0 e INT3 para
descrever o processo:
7) Durante a execução de INT0, uma transição low-to-high em
INT3 seta seu bit de pedido de interrupção
8) A UCI determina que INT3 tem prioridade menor do que INT0
(em execução, pois o bit In-Service de INT0 está setado).
Logo o pedido de interrupção não é enviado para a CPU, de
modo que INT3 permanece pendente no registro de pedido
de interrupção
9) O apontador de interrupção INT0 completa e envia um
comando EOI para limpar o bit INT0 no registrador In-Service
10) INT3, ainda pendente, agora possui prioridade de execução.
A UCI assegura o pedido de interrupção e o processo segue
como para o apontador INT0
Unidade de Controle de
Interrupção
 Interrupções que compartilham uma fonte simples
 Pedidos de interrupções múltiplas podem compartilhar uma
entrada de interrupção simples (ex.: TIMER 0, TIMER 1 e
TIMER 2 compartilham uma entrada simples)
 Embora compartilhem uma entrada, cada interrupção tem o
seu próprio vetor de interrupção
 O registrador de status de interrupção atua como um
registrador de pedido de segundo nível
 Ele contém um bit para cada interrupção Timer
 Quando uma interrupção Timer ocorre, ambos o bit do
registrador de status de interrupção individual e o bit do
registrador de pedido de interrupção compartilhada são
setados
 Na sequência, a interrupção é processada como qualquer
outra fonte de interrupção
Unidade de Controle de
Interrupção
 Cascateando com o 8259 externo
 Os módulos 8259 permitem aumentar o número de pinos de
interrupção externos
 O modo cascade da UCI suporta o uso do 8259
 Os pinos INT 2 / INTA0 e INT 3 / INTA1 servem como entradas
para interrupções externas fora do modo cascade
 No modo cascade eles servem como saídas de
reconhecimento de interrupção
 Após reset, eles são configurados como entradas
 Resistores de pullup asseguram que os pinos não flutuem. Os
valores dos resistores devem ser altos o suficiente para
prevenir sobrecarga dos pinos
Unidade de Controle de
Interrupção
 Usando o módulo 8259 externo no modo cascata
Unidade de Controle de
Interrupção
 Mode aninhado completamente especial
 É uma característica opcional utilizada normalmente no modo
cascata, aplicável somente a INT0 e INT1
 Nesse modo de interrupção, um pedido de interrupção é
atendido mesmo se seu bit In-Service está setado
 No modo cascata, um 8259 controla até oito interrupções
externas que compartilham um pino de entrada de interrupção
simples
 Modo aninhado completamente especial permite que a
estrutura de prioridade do 8259 seja mantida. Deste modo,
enquanto o apontador de interrupção está executando, o 8259
recebe uma interrupção de maior prioridade de uma de suas
fontes, e é assegurado que tal interrupção seja executada
Unidade de Controle de
Interrupção
 Sequência de reconhecimento de
interrupção
 Durante
a
sequência
de
reconhecimento de interrupção,
a UCI passa o tipo de
interrupção à CPU, que o
multiplica por quatro para obter o
endereço
do
vetor
de
interrupção
 Os tipos de interrupções para
todas as fontes são fixos e são
passados pela UCI à CPU
 A primeira indicação externa da
sequência de reconhecimento
de interrupção é a busca de
CPU da tabela de vetor de
interrupção
Unidade de Controle de
Interrupção
 Registrador de controle de interrupção
 Cada fonte de interrupção tem seu próprio registro de controle
de interrupção, que permite definir o seu comportamento
Unidade de Controle de
Interrupção
 Registrador de controle de interrupção
 INT4:2 – Registradores de interrupção para pinos externos
não cascateáveis
Unidade de Controle de
Interrupção
 Registrador de controle de interrupção
 INT1:0 – Registradores de interrupção
cascateáveis
para
pinos
Unidade de Controle de
Interrupção
 Registrador de pedido de interrupção
Unidade de Controle de
Interrupção
 Registrador de máscara de interrupção
Unidade de Controle de
Interrupção
 Registrador de máscara de prioridade
Unidade de Controle de
Interrupção
 Registrador In-Service
Unidade de Controle de
Interrupção
 Registrador de Sondagem
Unidade de Controle de
Interrupção
 Registrador de Status de Sondagem
Unidade de Controle de
Interrupção
 Registrador de EOI
Unidade de Controle de
Interrupção
 Registrador de Status de Interrupção
Unidade de Controle de
Interrupção
 Inicialização da UCI
1) Determine qual fonte de interrupção deseja-se utilizar
2) Determine se será utilizado o esquema de prioridade padrão
ou um esquema próprio
3) Programe o registrador de controle de interrupção para cada
fonte de interrupção
a) Para pinos de interrupções externas, selecione gatilho de
borda ou de nível
b) Para INT0 ou INT1, habilite o modo cascata, modo de
aninhamento completamente especial, ou ambos
c) Se está usando um esquema de prioridade próprio,
programe o nível de prioridade para cada fonte
Unidade de Controle de
Interrupção
 Inicialização da UCI
4) Programe a máscara de prioridade com um nível de máscara
de prioridade se deseja mascarar interrupções baseadas em
prioridade (o nível padrão é sete)
5) Set o bit de máscara no registrador de máscara de
interrupção para quaisquer interrupções que se deseje
desabilitar
Unidade de Controle de Interrupção
Download

Registrador de controle de interrupção