Você está na página 1de 8

26/4/2010

Programação de Sistemas Embarcados


Prof. Murilo Plínio
muriloplinio@gmail.com

Aula 8 – Interrupções em PIC

UNIFACS – Universidade Salvador


Engenharia da Computação

Interrupções
• Uma interrupção é um evento (externo ou interno)
que, quando acionado, faz o microcontrolador
interromper a execução de programa e executa uma
outra rotina programada.
• Quando a execução desta outra rotina é finalizada, o
microcontrolador retorna para o programa principal
do ponto onde foi interrompido.

1
26/4/2010

Como acontece “por dentro”?

Interrupções
• Uma interrupção normalmente é um evento
assíncrono para o programa em execução. Ou seja,
pode acontecer em qualquer instante, ou pode nem
acontecer.
• Não é possível determinar exatamente qual instrução
estará em execução quando uma interrupção é
gerada.

2
26/4/2010

Fontes de Interrupções
• Um MC possui várias fontes de interrupção:
• Internas:
– IO Modules; Memoria ou CPU
• Timers, Escrita/Leitura na memória, divisão por zero

• Externas:
– Associadas à periféricos conectados aos
pinos

Quem gerou a interrupção?


• Cada fonte de interrupção tem um sinalizador que
indica se esta fonte gerou a interrupção. Estes
sinalizadores são chamados de Flags.
• Cada fonte de interrupção possui também um bit de
controle que habilita ou não a interrupção da CPU.

3
26/4/2010

Quem gerou a interrupção?

Pode acontecer 2 interrupções ao


mesmo tempo?
• Sim. São eventos assíncronos traduzidos em circuitos
ligados em paralelo por portas lógicas.

• Independente se uma ou mais interrupções foram


geradas, o programa será direcionado para mesma
rotina. Sua rotina de interrupção deverá tratar qual
interrupção foi acionada.

4
26/4/2010

E se uma interrupção acontecer


durante o tratamento de outra
interrupção?
• Uma maneira de evitar que isso aconteça, é, no início
de sua rotina de interrupção, você desabilitar todas
as interrupções e no final, reativá-las. Para isso existe
um registrador do tipo “desliga/liga tudo”.

GIE – Global interrupt enable

5
26/4/2010

Interrupções em C (CCS)

• O Compilador CCS traz duas formas para tratar


interrupções:
– Forma Automática: O compilador gera todo o
código para o tratamento (verificação de evento,
salvamento e restauração de registradores, apaga
flags, etc);
– Forma Manual: O programador deve incluir todo
o código para tratamento;

Interrupções em C (CCS)

• Vantagens e desvantagens:
– Forma Automática: Uso simples mas gera código
muito grande, aumenta a latência;
– Forma Manual: Uso complexo e código enxuto;

6
26/4/2010

Tratamento Automático

• Usa as directivas #INT_xxx antes de cada


função. Ex.: (Tratamento do evento do Timer0)

...
Int x;
...
#int_timer0
void trata_timer0 (void)
{
x++; //incrementa a variável global “x”
}

Tratamento Manual
//Exemplo de de tratamento “manual” de interrupções viod restaura_contexto()
int x; {
#bit t0if = 0x0b.2 #asm
//registradores temporários snapf status_temp, w
int w_temp, status_temp; movwf status
#byte status = 0x03 snapf w_temp, f
#inline movwf w_temp, w
#endasm
void trata_t0() }
//tratamento do evento de interrupção do timer 0
//#inline -> determina que o código da função #int_global
// seja inserido no local de chamada da função void trata_int()
{ {
x++; //incrementa a variável global “x” salva_contexto();
t0if=0; If (t0if) trata_t0();
} restaura_contexto();
}
void salva_contexto ()
//salva registradores que podem ser alterados no trat int
{
#asm
movwf w_temp
snapf status, w
movwf status_temp
#endasm
}

7
26/4/2010

Priorizando Interrupções

– Forma Automática:
• #priority timer1, timer0
– Forma Manual: A primeira interrupção verificada,
será a de maior prioridade;

Bibliografia

• Valdés Pérez, Fernando E. Microcontrollers : fundamentals


and applications with PIC. Fernando E. Valdes-Perez and
Ramon Pallas-Areny. 2009. ISBN 978-1-4200-7767-4
• Milan Verle, PIC mikrokontroleri.