registradores interrupções

15
#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 lldeclara~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 ) Ilfun~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 sio 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).

Upload: bruno-jonko-duarte

Post on 12-Dec-2015

30 views

Category:

Documents


3 download

DESCRIPTION

agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!agora vai!

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.