Página 1 de 1

Reseta MCU quando ativo interrupções

MensagemEnviado: 22 Jun 2007 11:53
por DaniloCM
Pessoal, não sei o q acontece...
Mas quando ativo as interrupções o MCU simplesmente reseta.
Se eu tirar a linha "EnableInterrupts;" funciona, mas eu preciso executar o q ta dentro dessa interrupção...
:?

MensagemEnviado: 22 Jun 2007 12:10
por Nightcrawler
Onde reseta? Qual o mcu? Qual interrupção está ligada?
Explica melhor, senão fica dificil ajudar.

MensagemEnviado: 22 Jun 2007 13:43
por DaniloCM
Então...

O MCU é um QY4A, é a interrupção do TIM.

O programa é assim:
Eu seleciono algum ciclo, dou início, seleciono o tempo, confirmo e vai pro abastecimento de água.
Quando chega no tal do 'EnableInterrupts' é que é o problema...
Já mudei essa linha de lugar, coloquei depois de um bip, e só roda até chegar nela.

MensagemEnviado: 22 Jun 2007 14:10
por Paulo
DaniloCM escreveu:Então...

O MCU é um QY4A, é a interrupção do TIM.

O programa é assim:
Eu seleciono algum ciclo, dou início, seleciono o tempo, confirmo e vai pro abastecimento de água.
Quando chega no tal do 'EnableInterrupts' é que é o problema...
Já mudei essa linha de lugar, coloquei depois de um bip, e só roda até chegar nela.


Vc já verificou se o watchdog está habilitado?

Faz um teste, coloca algumas linhas de reset do watchdog em vários trechos do programa e vê o que acontece.

Nunca usei o QY4A, mas acredito que tenha uma macro "__RESET_WATCHDOG".


Até +...
Paulo D.

MensagemEnviado: 22 Jun 2007 14:27
por DaniloCM
Brigadão Paulo! Mas o meu WDT não está habilitado. Até porque as configurações eu copiei de um outro código no qual ele não havia sido ligado.
Realizando alguns testes percebi o seguinte:

O registrador SRSR registra os estados de reset, certo?
E eu fui verificando os bits. Pedi pra emitir um bip se o último reset foi ocasionado por opcode ilegal, mas não foi...
Aí eu tentei o bit ILAD, que indica se o último reset foi provocado por uma busca de opcode em endereço ilegal da memória. E este sim me retornou uma resposta positiva e depois do reset o MCU emitiu o bip que pedi...
Mas não sei porque isso está acontecendo... no meu protoboard não dá nada... é só pôr o micro na placa que reseta quando habilito a interrupção. E agora fiquei mais intrigado ainda por causa desse bit ILAD... a instrução CLI em assembly busca um endereço ilegal?

MensagemEnviado: 22 Jun 2007 20:01
por Fábio Pereira
Olá Danilo,

Provavelmente exista uma interrupção pendente quando você apaga o I e o vetor desta interrupção não está mapeado para um endereço de FLASH (ou não há código válido no endereço de destino).

O resultado disso é um reset por endereçamento ilegal !

T+

MensagemEnviado: 22 Jun 2007 21:37
por Nightcrawler
É verdade, agora que o Fabio falou, lembrei que isso já aconteceu comigo. De uma olhada nas interrupções que estão ativadas.

MensagemEnviado: 22 Jun 2007 22:00
por CCandido
ou vc abilita a int5, mas usa uma outra, ai _int.......sem RTI, não retornar
vira bagunça e reseta.
melhor simular e ve se na _int ele vai mesmo la no seu codigo de _int();
t+

MensagemEnviado: 25 Jun 2007 11:59
por DaniloCM
Pessoal, obrigado pelas dicas, mas meu circuito voltou a funcionar sem resetar, sem eu fazer nada...
Isso é realmente estranho, mas vou verificar o que pode ter acontecido... talvez algum curto por resíduo de solda... não sei.
Quanto a ter uma interrupção pendente quando limpo o I, não estava mesmo acontecendo... nem o watchdog.
Estranho mesmo, pois no meu protoboard funcionava sem problemas... mesmo assim vou dar uma olhada e se descubrir, posto aqui o que era...
Mais uma vez agradeço a todos!