Vous êtes sur la page 1sur 12

Interrupes

Existem interrupes por software e por hardware, embora as que nos interessem mais neste contexto sejam as interrupes por hardware As interrupes por software so instrues que causam a chamada respectiva rotina de atendimento (e.g. RST 0038hH no Z80)
As interrupes por software so eventos sncronos Na famlia 51 no existem interrupes deste tipo
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 1

Interrupes por hardware


So despoletadas por eventos assncronos relativamente execuo do programa (quando carregamos numa tecla que gera um pedido de interrupo, no sabemos que instruo est a ser executada) o que sucede com as interrupes geradas por um perifrico de comunicao srie, quando pretende informar o CPU de que chegou um novo carcter
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 2

Event driven applications


Esta designao aplica-se nos casos em que no existe aco enquanto no ocorrer um evento que a determine So comuns nos embedded real-time systems Um sistema diz-se em tempo real quando capaz de responder e processar um evento num intervalo de tempo pr-determinado

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 3

Latncia das interrupes


Esta latncia corresponde ao intervalo de tempo que decorre entre o pedido de interrupo e o incio ao seu atendimento depende de vrios factores:
Arquitectura do CPU (e.g. quando que o CPU v se existem pedidos pendentes e d incio ao atendimento) Existirem ou no sequncias de cdigo que no admitem o atendimento de interrupes Existncia de interrupes de prioridade superior
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 4

Exemplo (no se refere famlia 51)


Nota: Este exemplo corresponde a um sistema de interrupes vectorizadas (o endereo de atendimento fornecido pelo controlador de interrupes)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 5

Atendimento das interrupes


A maioria dos CPU verifica se existem pedidos de interrupo pendentes quando termina a execuo de cada instruo Quando as interrupes esto habilitadas, o CPU guarda o endereo da prxima instruo na stack e carrega o PC com o endereo da rotina de atendimento (ISR, interrupt service routine) Na famlia 51 estes endereos esto pr-definidos (sero apresentados adiante)
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 6

Segmentos crticos
Neste exemplo, a sequncia de instrues 1 a 4 no pode ser interrompida sem corrermos o risco de funcionamento incorrecto

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 7

Prioridade das interrupes


possvel atender mltiplas interrupes em simultneo (i.e. uma interrupo pode interromper outra interrupo) O aninhamento (nesting) de interrupes requer a existncia de prioridades, que podem ser:
Multi-nvel (prioridades fixas) Multi-nvel (prioridades dinmicas) Nvel nico Nota: Neste caso ser possvel
que uma interrupo interrompa outra? E ser possvel atender umas e ignorar outras? (mscaras)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 8

Interrupes activas ao nvel


Uma interrupo activa ao nvel s reconhecida se o pino estiver no nvel activo quando o CPU verifica a existncia de pedidos pendentes
Podem perder-se os pedidos que deixem de estar activos antes da verificao ser efectuada Tambm podem ocorrer mltiplos atendimentos enquanto o pino continuar no nvel lgico activo

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 9

Interrupes activas transio


Nas interrupes activas transio o pedido registado, o que elimina os problemas anteriores As interrupes deste tipo so preferveis quando os pedidos so muito longos ou muito curtos

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 10

Interrupes no vectorizadas
Quando o endereo da rotina de atendimento comum a mais do que uma fonte de interrupo, necessrio determinar a sua origem Esta situao frequente nas interrupes geradas pelos perifricos de comunicao srie (nas interrupes por envio ou recepo)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 11

As interrupes na famlia 51
/INT0 0 1 TF0 IT0 IE0

/INT1

0 1 IT1 IE1

Fontes de interrupo IE0 e IE1 so flags de interrupo que pertencem ao registo TCON (SFR com endereo 88H)

TF1 TI RI

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 12

Gesto das interrupes


O cdigo executado pelo microcontrolador pode activar / desactivar (set / clear) todas as flags de interrupo Cada fonte de interrupo pode ser habilitada / inibida individualmente (registo IE nos SFR) A cada fonte de interrupo pode ser atribuda uma prioridade alta ou baixa (registo IP nos SFR)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 13

/INT0

0 1 IT0 IE0

Interrupes externas

TF0

/INT1

0 1 IT1 IE1

TF1 TI RI

/INT0 e /INT1 podem ser activos ao nvel (0) ou transio (), de acordo com o contedo do registo TCON (SFR com endereo 88H) Se as interrupes forem activas transio, as flags que as geram so limpas pelo hardware quando a respectiva rotina executada (caso contrrio, ter que ser o cdigo do utilizador a faz-lo)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 14

/INT0

0 1 IT0 IE0

Interrupes dos T/C

TF0

/INT1

0 1 IT1 IE1

TF1 TI RI

As interrupes pedidas pelos temporizadores / contadores so geradas por TF0 e TF1 e activadas por rollover nos respectivos registos (excepto T/C 0 em modo 3, como se ver mais tarde) Quando gerada uma interrupo proveniente dos T/C, a flag que a gerou limpa pelo hardware quando a rotina de atendimento executada

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 15

Interrupes da comunicao srie

/INT0

0 1 IT0 IE0

TF0

/INT1

0 1 IT1 IE1

TF1 TI RI

Os pedidos de interrupo do perifrico de comunicao srie resultam do OR entre as flags RI (recepo) e TI (transmisso) Nenhuma destas flags limpa pelo hardware quando a respectiva rotina executada (o cdigo da rotina tem primeiro que identificar a causa da interrupo e depois limpar a flag)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 16

O registo IE (end. SFR A8H) enderevel ao bit


Este registo permite-nos habilitar / inibir cada fonte de interrupo:
IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 EA ES ET1 EX1 ET0 EX0

EA inibe todas as interrupes se estiver em 0; se estiver em 1, estaro habilitadas as que tiverem o bit IE.x em 1 ES: perifrico srie; ET1 e ET0: T/C 1 e 0; EX1 e EX0: externas (pinos /INT1 e /INT0)
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 17

O registo IP (end. SFR B8H) enderevel ao bit


Este registo permite-nos atribuir a cada fonte de interrupo uma prioridade alta ou baixa:
IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 PS PT1 PX1 PT0 PX0

Uma fonte de interrupo ter prioridade alta quando o bit IP.x estiver em 1 e baixa quando estiver em 0 PS: perifrico srie; PT1 e PT0: T/C 1 e 0; PX1 e PX0: externas (pinos /INT1 e /INT0)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 18

O registo TCON (end. SFR 88H) enderevel ao bit


Para alm de controlar os T/C, este registo est tambm relacionado com as interrupes externas: TC.7 TC.6 TC.5 TC.4 TC.3 TC.2 TC.1 TC.0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

IEx: O hardware activa (set) esta flag transio descendente em /INTx e limpa-a (clear) quando a respectiva rotina de atendimento executada ITx: Se estiver em 1 a interrupo em /INTx activa transio descendente; se no, activa ao nvel 0.
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 19

Atendimento das interrupes


Ao atender uma interrupo, o hardware do 80C51 determina a execuo de uma instruo LCALL para a respectiva rotina de atendimento:
Endereos de atendimento: IE0 - 0003H; TF0 - 000BH; IE1 - 0013H; TF1 - 001BH; RI ou TI - 0023H LCALL fora o PC na stack, mas quaisquer outros registos (e.g. ACC, PSW, ...) tero que ser guardados pelo cdigo do utilizador A flag associada interrupo limpa pelo hardware nuns casos, mas noutros ter que o cdigo a faz-lo

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 20

Retorno das interrupes


A execuo da rotina de atendimento continua at que seja encontrada uma instruo RETI (return from interrupt):
RETI informa o processador que terminou o atendimento interrupo e extrai da stack o endereo de retorno RET (retorno de subrotina) faria algo semelhante, mas manter-se-ia a indicao de estar em curso o atendimento a uma interrupo (qual o problema?)

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 21

Exemplo (KEIL): Interrupes via /INT0


; cdigo para ilustrar o atendimento de interrupes ; externas em /INT0, activas transio cseg salta: jmp inicio ; uma vez que 0003H tem que conter o cdigo de atendimento ; a /INT0, em 0000 cabe apenas uma instruo de salto cseg at 0003h intext0: inc r1 reti ; o atendimento a /INT0 apenas incrementa o R1, pelo que o ; seu contedo nos diz quantas interrupes foram atendidas cseg at 0010h inicio: mov r1,#0 mov tcon,#01 mov ie,#81h ; programa o funcionamento das interrupes via /INT0 ciclo: mov a,p0 add a,p1 mov p2,a jmp ciclo ; est sempre a colocar em P2 o valor de P1+P0 end
EEC2104 Microprocessadores - FEUP / DEEC / JMF - 22

at

Int. via /INT0: Visualizao no dScope

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 23

Trabalho do dado (Stop via /INT0)


Que alteraes so necessrias para implementar o boto de Stop atravs de /INT0? (para libertar a tecla que era usada para este efeito)
Como deve ser feita a inicializao? Que tarefas devero ser realizadas pela rotina de atendimento?

EEC2104 Microprocessadores - FEUP / DEEC / JMF - 24

Vous aimerez peut-être aussi