Registradores Interrupções
-
Upload
bruno-jonko-duarte -
Category
Documents
-
view
26 -
download
3
description
Transcript of 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).
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
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(')
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
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
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
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
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
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
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
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
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)
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
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 ..............................................................
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.