Página 1 de 1

Teste do pino IRQ em C (migrado)

MensagemEnviado: 17 Out 2006 17:29
por Fábio Pereira
BFCardoso
Aprendiz



43 Posts Posted - 19/04/2006 : 10:01:22
--------------------------------------------------------------------------------
Olá...
Estou fazendo um programa em C e, usando a Interrupção Externa IRQ.
Em assembly, para testar o pino IRQ, usa-se as instruções BIL e BIH. Em C o que eu tenho que fazer para testar o pino IRQ?

Grato pela atenção!

BFCardoso


001
Aspirante


Brazil
141 Posts Posted - 19/04/2006 : 10:18:42
--------------------------------------------------------------------------------
Bom, de qual mcu vc está falando ?
Se for 908Q, é da mesma forma (com assembly dentro do C) se a função IRQ estiver ativa, ou é claro, usando a própria interrupção. Em outros casos a leitura é como qualquer outro IO.




Fui...

O problema é sempre o dinheiro ou a falta dele...
KrafT
Conselheiro


Brazil
3476 Posts Posted - 19/04/2006 : 10:48:42
--------------------------------------------------------------------------------
Negativo 001... O pino IRQ só pode ser lido como o BFCardoso falou.

No CW eu uso: __isflag_int()



KrafT
Conselheiro


Brazil
3476 Posts Posted - 19/04/2006 : 10:53:17
--------------------------------------------------------------------------------
Esbarrei num aexplicação bem legal:

http://forums.freescale.com/freescale/b ... age.id=608

Aliás, nada como a mãe Freescale, hehe...


001
Aspirante


Brazil
141 Posts Posted - 19/04/2006 : 11:23:35
--------------------------------------------------------------------------------
Uai mas não foi isso que eu disse?


quote:
--------------------------------------------------------------------------------
é da mesma forma (com assembly dentro do C) se a função IRQ estiver ativa
--------------------------------------------------------------------------------


ou seja, usando BIL e BIH dentro do C...

Quando a função IRQ está desativada, lê-se como PTA_PTA2 normalmente.


Fui...

O problema é sempre o dinheiro ou a falta dele...
KrafT
Conselheiro


Brazil
3476 Posts Posted - 19/04/2006 : 12:06:55
--------------------------------------------------------------------------------
Ave... Tava com o JL8 na cabeça... Foi mal 001.


BFCardoso
Aprendiz



43 Posts Posted - 20/04/2006 : 08:19:40
--------------------------------------------------------------------------------
Valeu galera.Obrigado pelas dicas.

BFCardoso

MensagemEnviado: 08 Fev 2007 20:35
por Nightcrawler
No MC9S08GT16 ha um pino exclusivo pro IRQ, então a leitura é feita da mesma forma, no caso, "if(__isflag_int())" ????

MensagemEnviado: 08 Fev 2007 20:47
por KrafT
Ni, usa KBI se puder e fuja do IRQ... Não sei o que difere de uma int para outra mas toda vez que tentei usar IRQ deu m... Já com KBI a coisa funciona muito bem.

MensagemEnviado: 08 Fev 2007 22:35
por Nightcrawler
Kraft, que problema teve?? Eu só vou usar a INT do IRQ pra acorda o bixo. Acho q não vou ter problemas. Vou fazer alguns testes aqui.

MensagemEnviado: 09 Fev 2007 07:25
por KrafT
O bixo ficava doido.. Algo como se a Int estourasse o Stack. Como o KBI faz a mesma coisa e ainda assim dá para ler o pino direto alem de ter vários pinos KBI, eu passei a usar só ele.

Agora em chips que tem INT dedicado como os JL, JK aí é de se pensar. Mas não é o meu caso. Uso o Qt, Qy.

Pergunta urgente

MensagemEnviado: 16 Mar 2007 01:40
por mega.rod
Pessual, estou tendo dificuldades com a interrupção externa do QY4...
Logo a baixo fiz um programinha bem simples apenas pra que alguém possa me ajudar a descobrir o que esta errado nas configurações....

#include <MC68HC908QY4.h>
#define cpu_clock 20000
#define liga_int {asm CLI;} // macro para ligar as interrupções

//*******************************Nomeação dos pinos***************************************************
#define led PTA_PTA1
//****************************************************************************************************

//*******************************Inicialização********************************************************
void ini(void)
{
CONFIG1 = 1; // desliga o COP

DDRA =0b00000010;
PTAPUE =0b00000000;
DDRB =0b00000000;
PTBPUE =0b00000000;

INTSCR =0b00000001;
CONFIG2 =0b01000000;
}
//****************************************************************************************************

//*******************************Rotinas de temporização**********************************************
void delay_ms(unsigned int tempo) //Função de atraso para N milicegundos
{
unsigned int temp;
for (;tempo;tempo--) for(temp=(cpu_clock/120);temp;temp--);
}
//****************************************************************************************************

//*******************************ISR do TIM***********************************************************
void interrupt 15 trata_ext (void)
{
INTSCR_ACK=1;
led=1;
delay_ms(1000);
led=0;
}
//****************************************************************************************************

void main(void)
{
ini();
liga_int;
while(1);
}

Obrigado
Rodrigo Trainotti

bahh

MensagemEnviado: 14 Set 2007 11:30
por mega.rod
Alguma dica ?

Fico no aguardo...

Obrigado...
Rodrigo Trainotti

MensagemEnviado: 14 Set 2007 11:50
por KrafT
Olha, esse pino IRQ só me deu problemas... Parece que ele estourava o stack, pois bastava uma int do IRQ que o mcu se perdia.

Resolvi usando a int da KBI que faz a mesma coisa e não incomodou mais.

MensagemEnviado: 14 Set 2007 14:20
por CCandido
resto nao verifiquei....

void interrupt 15 trata_ext (void)
{
INTSCR_ACK=1;
led=1;
delay_ms(1000); ( não se deve (esperar) tempo dentro da interrupçao)
led=0;
}

exerto tempo bem pequeno.

Opa!!

MensagemEnviado: 28 Set 2007 10:43
por mega.rod
Ola pessoal...

Realmente trabalhar com IRQ do QY4A é tarefa complicada, por isso estou utilizando as interrupções de teclado (Moleza)...Estou montando em “exemplinho” e postarei aqui.

Duvida: Como no exemplo que coloquei logo acima é necessário incerir ""liga_int;"" para iniciar as interrupções definido pela macro "#define liga_int {asm CLI;}" certo?
A questão é seguinte: como eu faria de desligar estas interrupções ?

Dicas, sugestões e reclamações serão bastante úteis...

Obrigado...
Rodrigo Trainotti

MensagemEnviado: 28 Set 2007 11:03
por mastk
DisableInterrupts;

Ola

MensagemEnviado: 28 Set 2007 12:07
por mega.rod
Funciona não amigão...

Já tentei isso...

Exibe uma mensagem de erro informando variável não declarada tanto "DisableInterrupts;" quanto "EnableInterrupts;"...

Mais alguma idéia ?

Obrigado...
Rodrigo Trainotti

MensagemEnviado: 01 Out 2007 13:14
por Fábio Pereira
Olá Rodrigo,

Que tal asm SEI; ?

Mas inclua o arquivo hidef.h que as macros EnableInterrupts; e DisableInterrupts; irão funcionar.

T+

...

MensagemEnviado: 16 Abr 2008 13:58
por mega.rod
Mas o que é mais leve para o programa ?
Incluir todo este arquivo hidef.h ou apenas apenas dar o comando asm CLI ?

Obrigado...
Rodrigo Trainotti

MensagemEnviado: 16 Abr 2008 16:06
por mastk
mesma coisa...

O ponto H são apenas referencias...