Interrupção dentro de Interrupção - PICC

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Interrupção dentro de Interrupção - PICC

Mensagempor ronnei » 14 Ago 2008 16:15

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
Exclaim Tecnologia - Soluções em Aplicativos Comerciais e Programação para Automação
ronnei
Bit
 
Mensagens: 17
Registrado em: 04 Ago 2008 10:01

Mensagempor Fábio Pereira » 14 Ago 2008 16:52

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+
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor Djalma Toledo Rodrigues » 14 Ago 2008 17:41

É 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.
.
Editado pela última vez por Djalma Toledo Rodrigues em 18 Ago 2008 16:07, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor ronnei » 14 Ago 2008 18:51

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!!!
Exclaim Tecnologia - Soluções em Aplicativos Comerciais e Programação para Automação
ronnei
Bit
 
Mensagens: 17
Registrado em: 04 Ago 2008 10:01

Mensagempor msamsoniuk » 14 Ago 2008 19:54

dah uma olhada nessa ideia, as vezes ajuda no seu caso:

http://www.best-microcontroller-project ... sking.html
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x