Teste do pino IRQ em C (migrado)

Software e Hardware para uC da Qualcomm, NXP, FreeScale e Motorola

Moderadores: 51, guest2003

Teste do pino IRQ em C (migrado)

Mensagempor Fábio Pereira » 17 Out 2006 17:29

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
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 Nightcrawler » 08 Fev 2007 20:35

No MC9S08GT16 ha um pino exclusivo pro IRQ, então a leitura é feita da mesma forma, no caso, "if(__isflag_int())" ????
Diego
Avatar do usuário
Nightcrawler
Byte
 
Mensagens: 450
Registrado em: 11 Out 2006 14:20
Localização: Santa Maria - RS

Mensagempor KrafT » 08 Fev 2007 20:47

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.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor Nightcrawler » 08 Fev 2007 22:35

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.
Diego
Avatar do usuário
Nightcrawler
Byte
 
Mensagens: 450
Registrado em: 11 Out 2006 14:20
Localização: Santa Maria - RS

Mensagempor KrafT » 09 Fev 2007 07:25

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.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Pergunta urgente

Mensagempor mega.rod » 16 Mar 2007 01:40

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
Avatar do usuário
mega.rod
Nibble
 
Mensagens: 83
Registrado em: 17 Out 2006 09:52

bahh

Mensagempor mega.rod » 14 Set 2007 11:30

Alguma dica ?

Fico no aguardo...

Obrigado...
Rodrigo Trainotti
Avatar do usuário
mega.rod
Nibble
 
Mensagens: 83
Registrado em: 17 Out 2006 09:52

Mensagempor KrafT » 14 Set 2007 11:50

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.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor CCandido » 14 Set 2007 14:20

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.
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR

Opa!!

Mensagempor mega.rod » 28 Set 2007 10:43

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
Avatar do usuário
mega.rod
Nibble
 
Mensagens: 83
Registrado em: 17 Out 2006 09:52

Mensagempor mastk » 28 Set 2007 11:03

DisableInterrupts;
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Ola

Mensagempor mega.rod » 28 Set 2007 12:07

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
Avatar do usuário
mega.rod
Nibble
 
Mensagens: 83
Registrado em: 17 Out 2006 09:52

Mensagempor Fábio Pereira » 01 Out 2007 13:14

Olá Rodrigo,

Que tal asm SEI; ?

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

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 mega.rod » 16 Abr 2008 13:58

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
Avatar do usuário
mega.rod
Nibble
 
Mensagens: 83
Registrado em: 17 Out 2006 09:52

Mensagempor mastk » 16 Abr 2008 16:06

mesma coisa...

O ponto H são apenas referencias...
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43


Voltar para NXP (ex-FreeScale (ex-Motorola))

Quem está online

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

cron

x