Transcript
Page 1: Registradores Interrupções

#pragma varlocate somente deve ser utilizada com variaveis cujos endereqos ja foram explicitamente especificados no codigo.

A forma geral de declaraqio da diretiva #pragma varlocate e mostrada a seguir:

#pragma varlocate banco nome-da-variavel

banco: banco de memoria onde a variavel esta localizada.

a nome-da-variavel: nome da variavel.

Vejamos o codigo a seguir. Observe que as variaveis varl e var2 foram declaradas como extern devido ao fato de provavelmente terem sido declaradas em outro arquivo. Na execuqio do comando var2 +=5; n i o sera necessaria nenhuma instruqio de chaveamento de banco de memoria, uma vez que o compilador foi informado sobre as duas variaveis se encontrarem no banco 1 de memoria RAM.

extern unsigned char varl; extern unsigned char var2;

#pragma varlocate 1 varl #pragma varlocate 1 var2

l ldeclara~lo de variavel externa Ildeclaraqlo de variavel externa

Ilinforma ao compilador em que banco a variavel se encontra Ilinforma ao compilador em que banco a variavel se encontra

void main ( void ) I l f un~ Io main I

varl += 5; var2 += 5; llnenhuma instruqlo de chaveamento de banco sera necessaria para executar esse comando

1

A interrupqio e um evento de hardware que provoca uma interrupqio no programa, desviando-o para uma localidade especifica de memoria de programa para que o evento seja tratado para, em seguida, o programa retornar a execuqio do ponto em que foi interrompido.

0 PIC18F4520 trabalha com dois niveis de prioridade no serviqo de tratamento da interrupqio (ISR). As prioridades s i o denominadas high-priority (alta prioridade) e low-priority (baixa prioridade). Quando uma interrupqio e configurada como sendo de alta prioridade, o programa e desviado para o endereqo 0008h da memoria de programa quando ocorrer o evento responsavel pela interrupqio. Se, por outro lado, a interrupqio for configurada como sendo de baixa prioridade, o programa e desviado para a localidade 0018h da mernoria de programa quando ocorrer o evento responsavel pela interrupqio. Existem dez registradores no PIC18F4520 envolvidos com o recurso da interrupqio. S i o eles:

A RCON -.- PIRI, PIR2

INTCON .G PIEI, PIE2

A INTCON2 *. IPRI, IPR2

+ INTCON3

De uma forma geral, tr6s bits estio envolvidos com o recurso da interrupqio. S i o eles o bit de sinalizaqio (flag bit), o bit de habilitaqio da interrupqio (enable bit) e o bit que define a prioridade no tratamento da interrupqio (priority bit).

Page 2: Registradores Interrupções

0 s niveis de prioridade no tratamento da interrupqio s i o definidos pelo bit IPEN (RCON<7>). Quando esse bit e setado, o PIC18F4520 utiliza os niveis de prioridade no tratamento da interrupqio, podendo cada interrupqio ser configurada como de alta prioridade ou de baixa prioridade. Quando o bit IPEN e apagado o PIC18F4520 n i o utiliza as prioridades, desviando o programa para o endereqo 0008h da memoria de programa quando ocorrer o evento que pode dar origem a urna interrupqio. No POR o bit IPEN e apagado, devendo ser setado por soffware caso o programador queira utilizar os dois niveis de tratamento de interrupqio.

Quando o bit IPEN esta setado, s i o dois os bits utilizados para habilitar a interrupqio. S i o eles os bits GIEH:GIEL (INTCON<7:6>) que precisam estar setados para que o recurso da interrupq30 esteja habilitado. 0 bit GlEH habilita as interrupqdes de alta prioridade enquanto o bit GlEL habilita as interrupqdes de baixa prioridade.

Quando o bit IPEN esta apagado, o bit GlEH se transforma no bit GIE e o bit GlEL no bit PEIE. 0 primeiro liga a chave geral de interrupqio e o segundo liga a chave que habilita a interrupqio dos dispositivos perifericos.

Se os dois niveis de prioridade estiverem habilitados na ocorr6ncia de um evento que pode dar origem a urna interrupqio, um dos bits GElH ou GElL sera apagado para evitar futuras interrupqdes daquele nivel de prioridade enquanto a interrupqio atual estiver sendo tratada. No entanto, se urna interrupqio de baixa prioridade estiver sendo tratada e ocorrer urna interrupq20 de alta prioridade, o tratamento da primeira sera interrompido para que a segunda seja tratada. Essa e a essencia do conceit0 de prioridade. Quando a interrupqio de alta prioridade terminar de ser tratada, a interrupqio de baixa prioridade volta a ser tratada. Se o bit IPEN estiver apagado e ocorrer urna interrupqio, o bit GIE sera apagado para evitar que novas interrupqdes sejam geradas enquanto a atual estiver sendo tratada.

Quando ocorre urna interrupqio, a execuqio do programa principal e interrompida e o endereqo de retorno, endereqo da proxima instruqiio que sera executada quando o programa retornar da interrupqio, e armazenado em urna pilha. Em seguida, o programa e desviado para o endereqo 0008h ou para o 0018h da memoria de programa, dependendo do nivel de prioridade da interrupqio. A origem do evento que gerou a interrupqio pode ser detectada, testando o bit de sinalizaqio de cada interrupqio ativada. 0 PIC18F4520 possui 18 diferentes fontes de interrupqio, tendo cada urna um bit de sinalizaqio que e setado quando o evento correspondente aquela interrupq30 ocorre, independente de a interrupqio estar ou n i o ativada. 0 bit de sinalizaqio deve ser apagado por soffware dentro da funqio de tratamento da interrupqio para que o programa n i o retorne a rotina de tratamento de interrupqio apos ela ter sido tratada. A Figura 16.1 mostra a logica do recurso interrupqio.

Veja a seguir algumas informaqaes encontradas na descriqio de um registrador e, em seguida, a descriqio dos registradores que s i o utilizados pela interrupqio:

R: bit de leitura

+ W: bit de escrita

S: so pode ser setado

U: n i o implementado, lido como 0

-n: nivel Iogico assumido no POR

+ -x: valor desconhecido no (POR)

-q: depende da condiqio

Page 3: Registradores Interrupções

Figura 16.1: Logica da interrup~io no PIC18F4520.

or Sleep modes

lnterrupt to CPU Vector b Location

SSPIF SSPlE SSPIP

1 6.2.1. INTCON

ADlF ADIE PDIP IPEN

D.. . . . . ... .-..: RCIP

O Additional Peripheral Interrupts ?High-Priority Interrupt Generation 0 ------------------- $Low-Priolity Interrupt Generation

SSPIF SSPIE 2 ' SSPIP a -

GlEHlGlE

Bit 7: GIEIGIEH: chave geral de interrupqio

Quando o bit IPEN=O

1 = habilita chave geral de interrupqio

0 = desabilita chave geral de interrupqio

Quando o bit IPEN=I

1 = habilita chave geral de interrup~io de alta prioridade

0 = desabiliia chave geral de i"terrupF80 de alta prioridade

lnterrupt to CPU

Registrador INTCON

ADlF

Bit 7 W - 0

GIEIGIEH

Endereqo FF2h

I Vector to Location

I

Bit 3

W - 0

RBlE

ADlE ADIP--OU . I I

------I

RCIP

O Addilonal Perioheral lntenuots

Bit 6

R/W-0

PElElGlEL

Bit 2

RIW-0

TMROIF

Bit 5

W - 0

TMROIE

Bit 4

RNV-0

INTOIE

Bit 1

W - 0

INTOIF

Bit 0

W - x

RBIF(')

Page 4: Registradores Interrupções

Bit 6: PEIEIGIEL: habilita interrupqio de perifericos

Quando o bit IPEN=O

1 = habilita chave geral de interrupqio de perifericos

0 = desabilita chave geral de interrupqio de perifericos

Quando o bit IPEN=I

1 = habilita chave geral de interrupqio de baixa prioridade

0 = desabilita chave geral de interrupqio de baixa prioridade

Bit 5: TMROIE: chave individual da interrupqio de estouro do TMRO

1 = habilita interrupqio de estouro do TMRO

0 = desabilita interrupqio de estouro do TMRO

Bit 4: INTOIE: chave individual da interrupqio externa

1 = habilita interrupqio externa

0 = desabilita interrupqio externa

Bit 3: RBIE: chave individual da interrupqio por mudanqa de estado no Port B

1 = habilita interrupqio por mudanqa de estado no Port B

0 = desabilita interrupqio por mudanqa de estado no Port B

Bit 2: TMROIF: bit de sinalizaqio da interrup~20 de estouro do TMRO

1 = ocorreu estouro do TMRO

0 = n i o ocorreu estouro do TMRO

Bit 1: INTOIF: bit de sinalizaqio da interrupqao externa

1 = ocorreu interrupqio externa

0 = n i o ocorreu interrupqio externa

Bit 0: RBIF: bit de sinalizaqio da interrupqio por mudanqa de estado no Port B

1 = ocorreu uma mudanqa de nivel Iogico em urn dos pinos RB7:RB4

0 = n i o ocorreu uma mudanqa de nivel Iogico em nenhum dos pinos RB7:RB4 Nota 1: Apos a leitura do Port B esse bit pode ser apagado.

Registrador lNTCON2

Bit 7

W - I - RBPU

Endereqo FFl h

Bit 3

U - 0

-

Bit 6

W - 1

INTEDGO

Bit 2

RNV-1

TMROIP

Bit 5

R/W-1

INTEDGI

Bit 4

RIW-1

INTEDG2

Bit 1

U - 0

Bit 0

RNV- 1

RBlP

Page 5: Registradores Interrupções

Bit 6:

Bit 5:

Bit 4:

Bit 3:

Bit 2:

Bit 1:

Bit 0:

- RBPU : habilita resistores de pull-up

1 = desabilita resistores de pull-up 0 = habilita resistores de pull-up

INTEDGO: bit de seleqBo de borda da interrupqao externa 0

1 = interrupqio externa ocorrera na borda de subida 0 = interrup~Bo externa ocorrera na borda de descida

INTEDGI: bit de sele$%o de borda da interrupqao externa 1

1 = interrupqBo externa ocorrera na borda de subida 0 = interrupqBo externa ocorrera na borda de descida

INTEDGP: bit de seleqBo de borda da interrup~ao externa 2

1 = interrupqBo externa ocorrera na borda de subida 0 = interrupqao externa ocorrera na borda de descida

NBo implementado. Lido como nivel logico '0'

TMROIP: bit de seleqio de prioridade da interrupqBo de estouro do TMRO

1 = alta prioridade 0 = baixa prioridade

NBo implementado. Lido como nivel logico '0'

RBIP: bit de seleqio de prioridade da interrupqio por mudan~a de estado no Port B

1 = alta prioridade 0 = baixa prioridade

Bit 7: INTZIP: bit de seleq%o de prioridade da interrupqio externa 2

1 = alta prioridade

0 = baixa prioridade

Bit 6: INTPIP: bit de seleqao de prioridade da interrupqio externa 1

1 = alta prioridade

0 = baixa prioridade

Bit 5: NBo implementado. Lido como nivel logico '0'

Registrador INTCON3

Bit 7 RNV-1

INT21P

Enderego FFOh

Bit 6

RNV-1

INTI lP

Bit 3

RIW-0

INTllE

Bit 1

RIW-0

lNT2lF

Bit 2

U - 0

Bit 5

U - 0

Bit 0

RNV-0

INTIIF

Bit 4

RIW-0

INT21E

Page 6: Registradores Interrupções

Bit 4: INTZIE: chave individual da interrupqio externa 2

1 = habilita interrupqio externa 2

0 = desabilita interrupqio externa 2

Bit 3: INTIIE: chave individual da interrupqiio externa 1

1 = habilita interrupqio externa 1

0 = desabilita interrupqio externa 1

Bit 2: N i o implementado. Lido como nivel Iogico '0'

Bit 1: INTZIF: bit de sinalizaqio da interrupqio externa 2

1 = ocorreu interrupqio externa 2

0 = n i o ocorreu interrupqio externa 2

Bit 0: INTIIF: bit de sinalizaqio da interrupqio externa 1

1 = ocorreu interrupqio externa 1

0 = n i o ocorreu interrupqio externa 1

1 6.2.4. PlRl

Bit 7: PSPIF: bit de sinalizaqio da interrupqio de leituralescrita da Parallel Slave Port

1 = leitura ou escrita ocorreu (precisa ser apagado por software)

0 = leitura ou escrita ocorreu

Bit 6: ADIF: bit de sinalizaqio da interrupqio do conversor AID

1 = uma convers%o AID foi completada (precisa ser apagado por software)

0 = convesio AID n i o ocorreu

Registrador PlRl

Bit 5: RCIF: bit de sinalizaqio da interrupqio do modulo receptor da porta serial

1 = um byte chegou pela porta serial (apagado quando o registrador RCREG e lido)

0 = n i o chegou informaqio pela porta serial

Endere~o F9Fh

Bit 7 w - 0

PSPlF

Bit 4: TXIF: bit de sinalizaqio da interrupqio do modulo transmissor da porta serial

1 = o buffer de transmissio da porta serial esta vazio (apagado quando o registrador TXREG 6 escrito)

Bit 0

R r w - 0

TMRIIF

Bit 6

RIW-0

ADlF

Bit 3

RAN-0

SSPlF

0 = buffer de transmissio da porta serial esta cheio

Bit 5

R - 0

RClF

Bit 2 RIW-0

CCPllF

Bit 4

R - 0 TXlF

Bit 1

RNV-0

TMR21F

Page 7: Registradores Interrupções

Bit 3: SSPIF: chave individual da interrupq%o do modulo MSSP

1 = transmiss%olrecepq%o esta completa (precisa ser apagado por software)

0 = esperando transmiss%olrecepq%o

Bit 2: CCPIIF: bit de sinalizaq20 da interrupqio do modulo CCPl

Modo Capture 1 = uma captura do reg TMRI ocorreu (precisa ser apagado por software)

0 = n20 ocorreu uma captura do registrador TMRI

Modo Compare 1 = uma igualdade com o reg TMRI ocorreu (precisa ser apagado por software)

0 = n%o ocorreu uma igualdade com o registrador TMRI

Modo PWM

N%o e usado nesse mod0 de funcionamento

Bit 1 : TMR2IF: bit de sinalizaq20 da interrupqio de estouro do TMR2 (TMR2= PR2)

1 = ocorreu estouro do registrador TMR2

0 = n%o o correu estouro do registrador TMR2

Bit 0: TMRIIF: bit de sinalizaq%o da interrupqio de estouro do TMRI

1 = ocorreu estouro do registrador TMRI

0 = n20 ocorreu estouro do registrador TMRI

Bit 7: OSCFIF: bit de sinalizaq80 da interrupqio de falha no oscilador

1 = oscilador falhou. Clock foi chaveado para o INTOSC (precisa ser apagado por software) 0 = oscilador em operaq%o

Bit 6: CMIF: bit de sinalizaqio da interrupq20 do modulo comparador

1 = nivel logico da saida o comparador foi alterado (precisa ser apagado por software) 0 = nivel logico da saida o comparador n%o foi alterado

Registrador PIR2

Bit 5: N%o implementado. Lido como nivel logico '0'

Enderego FA1 h

Bit 4: EEIF: bit de sinalizaq%o da interrupq30 de final de escrita na EEPROM

1 = final de escrita na EEPROM 0 = final de escrita na EEPROM n%o terminou

Bit 7 RNV-0

OSCFIF

Bit 5

U - 0

Bit 3

RNV-0

BCLlF

Bit 6

RAW-0

CMlF

Bit 1

R i w - 0

TMR3lF

Bit 4

RAW-0

EElF

Bit 2

R i w - 0

HLVDIF

Bit 0

RNV-0

CCPR21F

Page 8: Registradores Interrupções

Bit 3: BCLIF: bit de sinalizaq20 de colis2o no barramento 1 = houve colisio (precisa ser apagado por software)

0 = n%o houve colis%o

Bit 2: HLVDIF: bit de sinalizaqio da interrupq%o de detecq%o de altalbaixa tensio

1 = condiqao de altalbaixa tens20 de alimentaq%o ocorreu (condiqio determinada pelo bit VDIRMAG (HDLVCON<7>))

0 = condiq30 de altalbaixa tens20 de alimentaq%o n%o ocorreu

Bit 1 : TMR31F: bit de sinalizaq20 da interrupq%o de estouro do TMR3 1 = ocorreu estouro do registrador TMR3

0 = n%o ocorreu estouro do registrador TMR3

Bit 0: CCPZIF: bit de sinalizaqao da interrupq20 do modulo CCP2

Modo Capture 1 = uma captura do registrador TMRI ocorreu (precisa ser apagado por software)

0 = n i o ocorreu uma captura do registrador TMRI

Modo Compare 1 = uma igualdade com o reg TMRI ocorreu (precisa ser apagado por software)

0 = n%o ocorreu uma igualdade com o registrador TMRI

Modo PWM N%o e usado nesse mod0 de funcionamento

Bit 7: PSPIE: chave individual da interrupqio de leituralescrita da Parallel Slave Pod

1 = habilita interrupqio de leituralescrita da Parallel Slave Port

0 = desabilita interrupq30 de leituralescrita da Parallel Slave Port

Bit 6: ADIE: chave individual da interrupqio do conversor AID

1 = habilita interrupq80 do conversor AID

0 = desabilita interrupqio do conversor AID

Bit 5: RCIE: chave individual da interrupq30 do modulo receptor da porta serial

1 = habilita interrupqio modulo receptor da porta serial

0 = desabilita interrupq20 modulo receptor da porta serial

Registrador PIE1 Endereqo F9Dh

Bit 7

RAW-0

PSPlE

Bit 5

RIW-0

RClE

Bit 6

RAW-0

ADlE

Bit 3

RbN-0

SSPlE

Bit 4

F W - 0

TXlE

Bit 1

R N - 0

TMR21E

Bit 2

RIW-0

CCPIIE

Bit 0

RMI -0

TMRllE

Page 9: Registradores Interrupções

Bit 4: TXIE: chave individual da interrupqio do modulo transmissor da porta serial

1 = habilita interrupqio do modulo transmissor da porta serial

0 = desabilita interrupqio do modulo transmissor da porta serial

Bit 3: SSPIE: chave individual da interrupqio do modulo MSSP

1 = habilita interrupqio do modulo MSSP

0 = desabilita interrupqio do modulo MSSP

Bit 2: CCPIIE: chave individual da interrupqio do modulo CCPl

1 = habilita interrupqio do modulo CCPl

0 = desabilita interrupqio do modulo CCPl

Bit 1 : TMR21E: chave individual da interrupqio de estouro do TMR2 (TMR2= PR2)

1 = habilita interrupqio de estouro do TMR2

0 = desabilita interrupqio de estouro do TMR2

Bit 0: TMRIIE: chave individual da interrupqio de estouro do TMRI

1 = habilita interrupqio de estouro do TMRI 0 = desabilita interrupqio de estouro do TMRI

Bit 7: OSCFIE: chave individual da interrupqio de falha no oscilador

1 = habilita interrupqio de falha no oscilador

0 = desabilita interrupqio de falha no oscilador

Bit 6: CMIE: chave individual da interrupqio do modulo comparador

1 = habilita interrupqio do modulo comparador

0 = desabilita interrupqio do modulo comparador

Bit 5: N i o implementado. Lido como nivel Iogico '0'

Bit 4: EEIE: chave individual da interrupqio de final de escrita na EEPROM

1 = habilita interrupqio de final de escrita na EEPROM

0 = desabilita interrupqio de final de escrita na EEPROM

Bit 3: BCLIE: chave individual da interrupqio de colisio no barramento

1 = habilita interrup~io de colisio no barramento

0 = desabilita interrupqio de colisio no barramento

Registrador PIE2 Endereqo FAOh

W - 0 OSCFIE

Bit 6

RNV-0

CMlE

Bit 3

W - 0 BCLlE

Bit 1 RNV-0 TMR31E

Bit 2

RIW-0 HLVDIE

Bit 0

RNV-0

CCPR21E

Bit 5

U - 0

Bit 4

RNV-0

EElE

Page 10: Registradores Interrupções

Bit 2: HLVDIE: chave individual da interrupqio de detecqio de altalbaixa tensio

1 = habilita interrupqio de detecqio de altalbaixa tensio

0 = desabilita interrupqio de detecqio de altalbaixa tensio

Bit 1 : TMR31E: chave individual da interrupqio de estouro do TMR3

1 = habilita interrupqio de estouro do TMR3

0 = desabilita interrupqio de estouro do TMR3

Bit 0: CCPZIE: chave individual da interrupqio do modulo CCP2

1 = habilita interrupq%o do modulo CCP2

0 = desabilita interrupqio do modulo CCP2

Bit 7: PSPIP: prioridade da interrupqio de leituralescrita da Parallel Slave Port

1 = alta prioridade

0 = baixa prioridade

Bit 6: ADIP: prioridade da interrupqio do conversor AID

1 = alta prioridade

0 = baixa prioridade

Bit 5: RCIP: prioridade da interrupqio do modulo receptor da porta serial

1 = alta prioridade

0 = baixa prioridade

Bit 4: TXIP: prioridade da interrupqio do modulo transmissor da porta serial

1 = alta prioridade

0 = baixa prioridade

Bit 3: SSPIP: prioridade da interrupqio do modulo MSSP

1 = alta prioridade

0 = baixa prioridade

Bit 2: CCPIIP: prioridade da interrupqio do modulo CCPl

1 = alta prioridade

0 = baixa prioridade

Registrador IPRl Enderego F9Fh

Bit 7

RIW-1

PSPlP

Bit 5

RNV-1

RClP

Bit 3

W - 1

SSPlP

Bit 6

RNV-1

ADlP

Bit 1

RNV-1

TMR21P

Bit 4

RNV-1

TXlP

Bit 2

W-1

CCPIIP

Bit 0

R/W-1

TMRIIP

Page 11: Registradores Interrupções

Bit 1 : TMRZIP: prioridade da interrupqio de estouro do TMR2 (TMR2= PR2)

1 = alta prioridade

0 = baixa prioridade

Bit 0: TMRIIP: prioridade da interrup~20 de estouro do TMRI

1 = alta prioridade

0 = baixa prioridade

Bit 7:

Bit 6:

Registrador IPR2

Bit 5:

Bit 4:

Bit 7

W - 1 OSCFIP

Endere50 FA1 h

Bit 3:

Bit 3

RNV-1

BCLlP

Bit 2:

Bit 6

R A N - 1

CMlP

Bit 1:

Bit 2

R/W-1

HLVDIP

Bit 0:

Bit 5

U - 0

OSCFIFP: prioridade da interrupq20 de falha no oscilador

1 = alta prioridade

0 = baixa prioridade

Bit 4

RIW-1

EElP

Bit 1

RMI-1

TMR31P

CMIP: prioridade da interrupqgo do modulo comparador

1 = alta prioridade

0 = baixa prioridade

N2o implementado. Lido como nivel Iogico '0'

EEIP: prioridade da interrupqio de final de escrita na EEPROM

1 = alta prioridade

0 = baixa prioridade

BCLIP: prioridade da interrupqao de colisio no barramento

1 = alta prioridade

0 = baixa prioridade

Bit 0

F W - 1

CCPR21P

HLVDIP: prioridade da interrupqio de detecqio de altalbaixa tens20

1 = alta prioridade

0 = baixa prioridade

TMR31P: prioridade da interrupqio de estouro do TMR3

1 = alta prioridade

0 = baixa prioridade

CCPZIP: prioridade da interrupqio do modulo CCP2

1 = alta prioridade

0 = baixa prioridade

Page 12: Registradores Interrupções

16.2.1 0. RCON

Bit 7:

Bit 6:

Bit 5:

Bit 4:

Registrador RCON

Bit 3:

Bit 2:

Bit 1:

Bit 7 R M I - 0

IPEN

Endereqo FDOh

Bit 0:

Bit 3

R - I - TO

IPEN: habilita niveis de prioridade da interrupqio

1 = niveis de prioridade habilitado

0 = niveis de prioridade desabilitado

Bit 6

RIW-1

SBOREN

SBOREN: habilita o Brown-out Reset

Bit 2

R - I - PD

Se os bits BOREN1:BORENO = 012

1 = habilita o Brown-out Reset

0 = desabilita o Brown-out Reset

Se os bits BORENI :BORENO = 002,102 ou 112

Bit desabilitado. Lido como npivel logico '0'

Bit 5

U - 0

N i o implementado. Lido corno nivel Iogico '0'

Bit 4

W - I - RI

Bit 1

RAW-0 - POR

- RI : bit de sinalizaqio da ins t ru~ io RESET

1 = a instruq%o RESET n i o foi executada (setado somente pelo firmware)

Bit 0

R W - 0 - BOR

0 = a instruqio RESET foi executada (precisa ser setado por software apos a ocorrencia de urn Brown-out Reset) - TO : bit de sinalizaqio da ocorrencia de urn time-out gerado pelo WDT

1 = setado pelo power-up timer ou pela execu$%o de uma das instruq6es WDT ou RESET

0 = ocorreu urn time-out gerado pelo WDT - PD : bit de sinalizaqio de detecqio de urn Power-Down Detection

1 = setado pelo power-up timer ou pela execuqio da instruqio WDT

0 = a instruqio SLEEP foi executada -

POR : bit de sinalizaqio do Power-on Reset

1 = n i o ocorreu urn Power-on Reset (setado somente pelo firmware)

0 = ocorreu urn Power-on Reset (precisa ser setado por software apos a ocorrencia de urn Power-on Reset) -

BOR : bit de sinalizaqio do Brown-out Reset

1 = n i o ocorreu um Brown-out Reset (setado somente pelo firmware)

0 = ocorreu urn Brown-out Reset (precisa ser setado por soffware apos a ocorrencia de urn Brown-out Reset)

Page 13: Registradores Interrupções

A Figura 16.2 mostra graficamente como o programa se comporta na ocorriincia de urna interrupqio. Sendo a interrupq20 um acon- tecimento assincrono, ela pode ocorrer em qualquer ponto de execuqio do programa. Ocorrendo o evento responsavel pela inter- rupqio, o programa e interrompido, sendo ele desviado para um dos vetores de inter- rupqio, o endereqo 0008h ou o endereqo 0018 da memoria de programa, dependendo do nivel de prioridade. Apos a interrupqio ter sido tratada o programa principal volta a ser END

executado a partir do ponto em que foi Figura 16.2: Desvio no programa devido interrompido. a ocorrencia de uma interrup~iio.

1 6.2.1 1 . Funqiio de tratamento de interrup~iio Duas diretivas s i o as responsaveis pelas funqbes de tratamento de interrupqbes. S2o elas a #pragma interrupt, destinada a rotina de tratamento da interrupqio de alta prioridade, e a #pragma interruptlow, destinadaa rotina de tratamento de interrupq20 de baixa prioridade.

Quando ocorre um evento responsavel por urna interrupqio, estando o recurso habilitado, o prograrna principal e interrompido, o endereqo da proxima instruqio a ser executada e salvo em urna pilha, e salvo o contexto e, na sequiincia, o prograrna e desviado para o endereqo no qua1 a interrupq20 sera tratada.

0 minimo contexto salvo e, posteriormente, restaurado por urna interrupq20 s i o os registradores W, BSR e STATUS. As interrupqbes de alta prioridade utilizam registradores como espelhos para salvar e restaurar o contexto. As interrupqbes de baixa prioridade utilizam o software satck (pilha por software) para salvar e restaurar o contexto. Podemos intuir que o salvamento e o resgate do contexto provocam um overhead (atraso) de tempo antes de retornar ao programa principal.

E importante ressaltar, no entanto, que salvar o contexto e urna tarefa essential, urna vez que a ISR pode alterar o conteirdo de alguns registradores como os W, BSR e STATUS. Se eles n20 forem salvos antes de o programa executar a ISR, urna alteraqio no conteudo desses registradores dentro da ISR pode provocar efeitos colaterais desastrosos para o programa quando o processamento retornar ao prograrna principal.

0 serviqo de tratamento de interrupq20 utiliza urna seq2o de dados temporaria distinta das seqbes utilizadas por outras fun~bes implementadas por software. Qualquer dado temporario requerido durante a avaliaqio de urna express80 dentro da rotina de interrupqio e alocado nessa seqio e n2o cornpartilha o endereqamento de memoria com dados temporarios utilizados em outras funqbes, incluindo outras fun~bes utilizadas no tratamento de interrupqbes. Vemos a seguir a forma geral de utilizaqio da diretiva #pragma na declaraq20 de urna ISR.

#pragma interrupt nome-da-fun@o nome-se@o-temp save=salvar-cont nosave=n%o-salvar-cont

#pragma interruptlow nome-da-funv%o nome-sego-temp save=salvar-cont nosave=n%o~salvar~cont

Page 14: Registradores Interrupções

e nome-da-fun~lo: nome da funqio que fara o tratamento da interrupqio.

+ nome-se~lo-temp: nome da se@o temporaria na qua1 ser%o salvos os dados da ISR.

+ savar-cont: nome da seqio ou lista de registradores a serem salvos no contexto.

* nlo-salvar-cont: nome da seqio ou lista de registradores que n%o ser%o salvos no contexto.

Como qualquer outra funqio a ISR pode conter variaveis locais e globais. No entanto, uma ISR n i o pode conter paritmetros nem retornar valores. Alem disso, variaveis globais que s%o acessadas no programa principal e na ISR devem se declaradas como volatile.

0 MPLAB C18 n i o coloca automaticamente a rotina de tratamento da interrup~io no vetor de interrupq50, lsso deve ser feito com a utilizaqio da instruqio GOT0 que vai transferir o controle para o ISR correto, como mostrado a seguir.

#pragma code high_vector=Ox08 llvetor de interrupqso de alta prioridade void interrupt-at-high-vector(void) {

-asm GOT0 high-isr -endasm lldesvia programa para rotina de tratamento de interrup~so 1 #pragma code I1 retorna para a seqso de codigo default

#pragma interrupt high-isr void high-isr (void) 1

llrotina de tratamento da interrupqso de nivel alto de prioridade 1 /p*************************t*t******************************

Como veremos no capitulo 23, as diretivas -asm e -endasm s i o utilizadas quando se deseja introduzir em um programa-fonte escrito em C instru~des em Assembly. lsso foi feito na ISR anterior. Quando ocorre a interrup~io, o programa e desviado para a localidade 0008h onde encontra a instru- q%o GOT0 high-isr, que o desvia para a funqio high-isr(), a qua1 efetua o tratamento da interrupqio. A definiqio mostrada anteriorrnente para a ISR pode ser tambem utilizada quando n%o estiverem sendo usados os niveis de prioridade. Vimos que, nesse caso, o programa sera desviado para o endereqo 0008h da memoria de programa quando ocorrer uma interrupqiio. A funqio high-isr() deve ser prototipada para que o compilador possa tratar a interrupqio corretamente. Vejamos, a seguir, um exemplo de definiqio da ISR de baixo nivel de prioridade.

//*t*n*******t**t*n****t**************************~*********

#pragma code low~vector=0x018 llvetor de interrupqso de baixa prioridade void interrupt-at-low-vector(void) { -asm GOT0 low-isr -endasm lldesvia programa para rotina de tratamento de interrupqso 1 #pragma code I1 retorna para a se@o de codigo default

#pragma interruptlow low-isr void low-isr (void) I

Ilrotina de tratamento da interrupcso de nivel baixo de prioridade 1 ..............................................................

Page 15: Registradores Interrupções

1 6.2 .I 2. Como salvar o contexto E possivel salvar um contexto definido pelo programador alem do contexto minimo que e salvo pelo MPLAB C18 quando ocorre urna interrupqio, os registradores W, BSR e STATUS. Para isso, e neces- sario definir os registradores ou seqio de dados que devem ser salvos quando ocorrer urna inter- rupqio. Por exemplo, se o programador quer salvar os conteudos das variaveis soma e sub quando ocorrer urna interrupqio, a ISR deve ser definida da forma mostrada a seguir. Veja que as variaveis a serem salvas no contexto foram separadas por virgula.

#pragma interrupt high-isr save = soma, sub

Alem das variaveis, e possivel salvar toda urna seqio de dados no contexto de urna interrupqio. Su- ponha que desejamos salvar, alem das variaveis soma e sub, a seqio name. A sintaxe apresentada a seguir mostra como fazer isso.

#pragma interrupt high-isr save =soma, sub, section ("name")

16.3. Interrup@o .- externa Para mostrar na pratica como o recurso interrupqio pode ser utilizado em urna determinada aplicaq20, vamos ver como funciona a interrupqBo externa. 0 PIC18F4520 possui tr6s pinos pelos quais e possivel gerar urna interrupqio externa. S i o eles os pinos RB211NT2, RBl l lNTl e RBDIINTO, associa- dos respectivamente as interrupqbes externas INT2, INTI e INTO. A interrupqio externa INTO possui sempre alta prioridade, enquanto as outras duas podem ser configuradas como de alta prioridade ou de baixa prioridade. 0 s bits responsaveis pela prioridade s i o INT21P (INTCON3<7>) e INTllP (INTCON3<6>). 0 s bits INTEDGx (INTCON2<6:4>) configuram a borda do sinal aplicado nos pinos que vai gerar a interrupqio, se a borda de subida ou a borda de descida.

Cada urna das interrupq3es externas, assim com as demais, pode ser habilitada individualmente por meio das chaves individuais. 0 s bits que habilitarn individualmente as interrupqbes extemas s i o INT21E (INTCON3<4>), INTI IE (INTCON3<4) e INTIE (INTCON4>). Para habilitar a chave individual, deve-se setar o bit associado aquela interrupqio. Alem das chaves individuais, a chave geral de interrupqio, o bit GIE, precisa estar setado para que o microcontrolador possa tratar a interrupqio externa.

Quando a borda configurada para disparar a interrupqio externa for aplicada no respectivo pino, estando ela habilitada, o programa principal sera interrornpido e urna interrupqio sera gerada, desviando o programa para o vetor definido pela prioridade da interrupqio.


Top Related