Aula Microprocessadores

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 14

EEC2104

Microprocessadores
Edição 2005/2006

Sistemas de interrupções

Interrupção...
• Acontecimento assíncrono, inesperado para um processador
• Resulta na invocação automática de uma subrotina
desencadeada por hardware (event-driven subroutine call)

• A maioria dos processadores verifica a existência de pedidos


de interrupção no fim de cada instrução (há excepções...)

• Alguns processadores suportam vários tipos de interrupções:


– Mascaráveis: podem ser ignoradas
– Não mascaráveis: não podem ser ignoradas
– Por software
• Não são assíncronas, logo não são inesperadas...
• São simples chamadas a subrotinas.

Interrupções - 1 MP0506, [email protected]


Atendimento de pedidos de interrupção
• Sequência de processamento:
– Acabar de executar a instrução corrente
– Guardar o PC na stack (mais nenhum registo é guardado)
– Invocar a subrotina de atendimento do pedido de interrupção
Nota: não existe nenhuma instrução de chamada de subrotinas
envolvida neste processo!

• Interrupções vectorizadas e não vectorizadas


– Vectorizadas: pedido é acompanhado por um identificador que
permite ao processador saber qual a rotina a invocar (como?)
– Não vectorizadas:
• Uma única rotina
• Uma rotina pré-definida para cada tipo de interrupção

Interrupções - 2 MP0506, [email protected]

Atendimento de pedidos de interrupção


• Latência: tempo que decorre entre o aparecimento de um
pedido de interrupção e o início do seu atendimento

• Factores que influenciam a latência


– Arquitectura do processador
– Existência de zonas do programa onde o atendimento está inibido
(zonas críticas)
– Existência de pedidos de interrupção de maior prioridade
– Ser ou não vectorizada

Interrupções - 3 MP0506, [email protected]


Retorno de uma interrupção
• Pela instrução RETI
– RETI (retorno de interrupção) informa o processador que terminou
o atendimento da interrupção e extrai da stack o endereço de
retorno (PC)
– RET (retorno de subrotina) só extrai da stack o endereço de
retorno (PC)
• Indiferente usar uma ou outra? Não! Porquê?

Interrupções - 4 MP0506, [email protected]

Nível versus transição


• Interrupção activa ao nível
– só é reconhecida se o pino estiver no nível activo quando o
processador verifica a existência de pedidos pendentes
– Podem ocorrer múltiplos atendimentos (quando? porquê?)
– Podem perder-se os pedidos que deixem de estar activos antes da
verificação ser efectuada

• Interrupção activa à transição


– o pedido é registado, nunca se perdendo
– mais indicadas quando os pedidos são muito longos ou muito
curtos

Interrupções - 5 MP0506, [email protected]


Interrupções na família 51...

Vcc

128 RAM CPU TIMER 1


OSC RST
128 RAM INT TIMER 0
Barramento interno

4k ROM Bus CTR I/O PORTS UART

P0 P1 P2 P3 (P3.2 e P3.3)

Interrupções - 6 MP0506, [email protected]

Interrupções na família 51...


• 5 Fontes de interrupção (6 no 8032/52)
– Externas: IE0 e IE1
– Internas: TF0, TF1, RI ou TI, (TF2 ou EXF2)
• Controlo e configuração
– Registos IE, IP e TCON
• Endereços (pré-definidos) para as rotinas de atendimento
IE0: 0003h TF0: 000Bh
IE1: 0013h TF1: 001Bh
RI/TI: 0023h (TF2/EXF2: 002Bh)
• Duas classes de prioridade (alta e baixa)

Interrupções - 7 MP0506, [email protected]


Fontes de interrupção
IT0
• Bits do TCON
– IT0, IT1
0 – IE0, IE1
INT0 IE0 0003h
1 – TF0, TF1
• Bits do SCON
TF0 000Bh

RI
– RI, TI
0023h
Pedidos de • Pinos
interrupção
TI – INT0 = P3.2
TF1 001Bh – INT1 = P3.3
0
INT1 IE1 0013h
1

Bit
IT1
Pino

Interrupções - 8 MP0506, [email protected]

Interrupções externas
• Assinaladas nos bits IE0 (INT0) e IE1 (INT1) do registo TCON
• Activas ao nível baixo ou à transição descendente no pino
respectivo (P3.2 para INT0, P3.3 para INT1)
• Activação à transição descendente
– É necessário que o bit ITx=1
– O bit IEx é limpo automaticamente quando a rotina de
atendimento é invocada
• Activação ao nível baixo
– Quando o bit ITx=0
– O bit IEx terá que ser limpo manualmente por software

Interrupções - 9 MP0506, [email protected]


Interrupções internas
• Interrupções dos TC
– Assinaladas nos bits TF0 e TF1 do registo TCON
– Pedido de interrupção quando se dá o overflow (ou rollover) nos
registos de contagem do respectivo TC
– Bit TFx é limpo automaticamente quando é invocada a respectiva
rotina de atendimento

• Interrupções da porta série


– Assinaladas pelo OU lógico entre os bits RI (recepção) e TI
(transmissão) do registo SCON
– Rotina de atendimento é a mesma
– Nenhum dos bits é limpo automaticamente quando a rotina de
atendimento é chamada (porquê?)

Interrupções - 10 MP0506, [email protected]

Gestão do atendimento
• Registos IE e IP
– IE permite activar individual ou globalmente o atendimento dos
pedidos de interrupção
– IP permite definir duas classes de prioridade no atendimento dos
pedidos pendentes

• Código executado pelo µC


– Pode consultar, activar ou desactivar qualquer bit de interrupção
– É possível provocar “interrupções” por software

Interrupções - 11 MP0506, [email protected]


Registo IE

EA - - ES ET1 EX1 ET0 EX0

• Permite activar individual/globalmente o


atendimento dos pedidos de interrupção
• Bits (endereçáveis individualmente e activos a 1):
– EA: Global
– ES: Porta série
– ET1, ET0: Temporizadores/contadores
– EX1, EX0: Externas

Interrupções - 12 MP0506, [email protected]

Registo IP

- - - PS PT1 PX1 PT0 PX0

• Permite definir duas classes de prioridade no atendimento dos


pedidos pendentes
• Bits (endereçáveis individualmente, 1=alta, 0=baixa):
– PS: Porta série
– PT1, PT0: Temporizadores/contadores
– PX1, PX0: Externas
• Dentro de cada classe: IE0>TF0>IE1>TF1>RI,TI

Interrupções - 13 MP0506, [email protected]


Registo TCON

TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0

• Permite controlar o funcionamento dos TC e das interrupções


externas
• Bits (endereçáveis individualmente e activos a 1):
– ITx=1, pino /INTx activo à transição descendente
– ITx=0, pino /INTx activo ao nível baixo
– IEx=1 assinala a existência de um pedido no pino /INTx

Interrupções - 14 MP0506, [email protected]

Interrupções no dScope...

Interrupções - 15 MP0506, [email protected]


Exemplo: barreira óptica
• Problema:
– Contar as garrafas que atravessam uma barreira óptica
– Considerar:
• Barreira e actuadores activos a zero
• Ao fim de cada 5 garrafas o motor do transportador pára e é dada
ordem de empacotar
• Variável total acumula o total de caixas empacotadas

P1.6

P1.7 /INT0 (P3.2)

Interrupções - 16 MP0506, [email protected]

Exemplo: barreira óptica


• Possível solução:
– Programa principal
• Inicializa variáveis
• Configura o sistema de interrupções
• Controla o transportador e dá as ordens de empacotamento
– Rotina de atendimento da interrupção
• Actualiza variáveis de contagem

P1.6

P1.7 /INT0 (P3.2)

Interrupções - 17 MP0506, [email protected]


Barreira óptica...
dseg at 30h
total: ds 1 ; Total de caixas
box: ds 1 ; Garrafas já na caixa

cseg at 0000h
ljmp main ; Programa principal

cseg at 0003h ; Atendimento de INT0


inc box ; Mais uma na caixa...
reti ; Fim de interrupção

Interrupções - 18 MP0506, [email protected]

Barreira óptica...
cseg at 0100h
main: mov total,#0 ; Inicializa variável
setb it0 ; INT0 activo à transição
mov ie,#81h ; EA = EX0 = 1
newbox: mov box,#0 ; Caixa vazia...
setb P1.6 ; Sobe êmbolo
clr P1.7 ; Arranca transportador
wait: mov a,box ; Espera que
cjne box,#5,wait ; a caixa encha
setb P1.7 ; Pára transportador
clr p1.6 ; Baixa êmbolo
inc total ; Mais uma caixa pronta...
sjmp newbox

end

Interrupções - 19 MP0506, [email protected]


Exemplo: botão rotativo...
• Problema:
– Controlar a sintonia de um rádio por um botão rotativo “digital”
– Considerar:
• Botão acoplado a um codificador incremental
• 360 impulsos por volta, 2 saídas desfasadas 90º
• Variável Freq (16 bits) varia entre 0 e 35999 e é incrementada ou
decrementada dependendo do sentido de rotação do botão

• Funcionamento do codificador: Sentido Sentido


horário anti-horário
A
Vcc
B

Interrupções - 20 MP0506, [email protected]

Botão rotativo...
• Possível solução:
– Programa principal
• Inicializa variáveis e configura o sistema de interrupções
• Trata de outras coisas...
– Rotina de atendimento da interrupção
• Invocada por uma descida na saída A (ligada a INT1)
• Testa a saída B e actualiza a frequência de
acordo com o sentido de rotação detectado.

Sentido horário Sentido anti-horário

Interrupções - 21 MP0506, [email protected]


Botão rotativo...
; Definição de nomes simbólicos e variáveis
; --------------------------------------------------
sentido equ p1.0
clk equ p3.3 ; INT1

dseg at 30h
freq: ds 2 ; Frequência

; Entradas no programa principal e na rotina


; de atendimento da interrupção INT1
; --------------------------------------------------
cseg at 0000h
ljmp main

cseg at 0013h ; Atendimento de INT1


ljmp update ; Actualiza freq

Interrupções - 22 MP0506, [email protected]

Botão rotativo...
; Continuação do programa principal
; --------------------------------------------------
cseg at 0100h
main: clr a ; Inicializa variável
mov freq,a ; MSB = 0
mov freq+1,a ; LSB = 0
setb it1 ; INT1 activo à transição
mov ie,#84h ; EA = EX1 = 1

; Agora o programa pode ocupar-se de outras tarefas


; pois a variável freq é gerida por interrupção...

sjmp $

Interrupções - 23 MP0506, [email protected]


Botão rotativo...
; --------------------------------------------------
; Atendimento da interrupção INT1:
; Dependendo do sentido de rotação, incrementa
; ou decrementa a variável que indica a frequência
; desde que esteja compreendida entre 100 e 29999
; --------------------------------------------------
update: jb sentido,incr ; Sentido de rotação
mov a,freq+1 ; LSB
jnz simple ; Salta se LSB!=0
orl a,freq ; Se LSB = MSB = 0 não
jz exitd ; faz nada…
dec freq ; Decrementa LSB
simple: dec freq+1 ; Decrementa LSB
exitd: reti

Interrupções - 24 MP0506, [email protected]

Botão rotativo...
incr: mov a,freq+1 ; Verifica se já chegou ao
cjne a,#9Fh,ok ; valor máximo. Nesse
mov a,freq ; caso não faz nada!
cjne a,#8Ch,ok ; Nota: 35999 = 8C9Fh
reti
ok: inc freq+1 ; LSB++
mov a,freq+1
jnz exiti
inc freq ; Se LSB=0 então MSB++
exiti: reti ; Fim de interrupção

end

Interrupções - 25 MP0506, [email protected]


Dado electrónico (segunda abordagem)
• Batota simples e paragem do dado por interrupção
– Tecla P1.1 inactiva equivale a funcionamento sem batota
– Tecla P1.1 activa triplica a probabilidade de saír 5
– Tecla de interrupção (ligada a INT0) funciona como tecla de
paragem
• Questões em discussão:
– INT0 activa ao nível ou à transição: qual o mais conveniente?
– Como implementar a batota?

Interrupções - 26 MP0506, [email protected]

Avaliação e aprofundamento...
• Perceber, conhecer:
– Os conceitos genéricos associados às interrupções
– As funcionalidades oferecidas pelo sistema de interrupções da
família 51

• Estudar:
– Livro 1, pp. 183 a 185, 189 a 193
– Livro 2, pp. 275 e 276
– 80C51 family architecture, pp. 15
– 80C51 family hardware description, pp. 16 a 18

Interrupções - 27 MP0506, [email protected]

Você também pode gostar