Página 1 de 1
Interrupção dentro de Interrupção - PICC

Enviado:
14 Ago 2008 16:15
por ronnei
Ola Amigos do Fórum, estou desenvolvendo um produto que dentro de uma interrupção externa (rb0) eu necessito receber dados da interrupção USART, porém pelo que percebi quando entro na interrupção de RB0 ele desativa geral, é assim mesmo? Ou posso configurar de forma diferente? Estou usando um PIC 16F648A e compilador PICC junto com a IDE MPLAB v7.6.
Obrigado pela atenção

Enviado:
14 Ago 2008 16:52
por Fábio Pereira
Ronnei,
O que o seu programa faz dentro da ISR de interrupção externa?
Uma regra básica a ser lembrada SEMPRE: mantenha as suas ISRs tão pequenas quanto possível.
Idealmente a sua ISR deve apenas setar um flag e o código fora da aplicação é que cuida de processar os dados.
No caso de interrupções reentrantes como o que você quer, acho EXTREMAMENTE perigoso habilitar as interrupções dentro de uma ISR. Isso pode causar facilmente um estouro de pilha.
Tenho certeza de que você poderá repensar a concepção lógica do seu produto de forma que o processamento da comunicação serial e da interrupção externa possa ser feito no corpo principal do programa (sob comando das interrupções).
T+

Enviado:
14 Ago 2008 17:41
por Djalma Toledo Rodrigues
É assim mesmo. Observe que ao sair da interrupção com a Instrução Retfie,
esta ira habilitar geral, setando o bit Gie automáticamente.
Se durante tratamento da interrupção outra interrupção for solicitada ela estará pendente. e será imediatamente atendida após o Retfie.
Mas, antes de Retfie é necessário dar um Clear no bit que gerou a interrupção , seja a externa (Intf), ou a Usart.
Abraço e boa interrupção.
.

Enviado:
14 Ago 2008 18:51
por ronnei
Obrigado Fabio e Djalma pelas dicas, eu ja havia pensado em tratar fora mesmo, a questao toda é que eu tenho alguns processamentos que devem ser parados, e ao sair da interrupcao ele volta pra esse processamento, sao processamentos de transferencia de dados via GPRS, o unico jeito de resolver isso seria inserir quase no programa todo IF pra ver se uma interrupcao aconteceu, mas pelo visto nao vou ter como fugir disso. Obrigado pela atenção!!!

Enviado:
14 Ago 2008 19:54
por msamsoniuk
dah uma olhada nessa ideia, as vezes ajuda no seu caso:
http://www.best-microcontroller-project ... sking.html