Página 1 de 1

utilizar interupções no coldfire 532x

MensagemEnviado: 29 Jun 2007 08:34
por leandrosilva
Olá estou com dificuldades de utilizar as interrupções no coldfire 5329, estou utilizando a placa de desenvolvimento MCF5329EVB. Fiz um codigo mas não tá funcionando. Tento utilizar a interupção PIT0_handler , mas não da certo.


int count;

__declspec(interrupt) void PIT0_handler (void)
{
MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIF;
count++;
}


int main()
{
uart_init(0, 62000, 9600, 1);

//MCF_INTC1_ICONFIG = 0x8020;
MCF_INTC1_ICR43 = 0x07;
MCF_PIT1_PMR = ~MCF_INTC_IMRH_INT_MASK43;
//MCF_INTC1_CLMASK = MCF_INTC_CLMASK_CLMASK(1);
//MCF_INTC1_SLMASK = MCF_INTC_SLMASK_SLMASK(1);

mcf5xxx_set_handler(128+43,PIT0_handler);
mcf5xxx_irq_enable ();

MCF_PIT0_PMR = 0x0FFF;
MCF_PIT0_PCSR |= MCF_PIT_PCSR_PREE;
MCF_PIT0_PCSR |= ~MCF_PIT_PCSR_DOZE;
MCF_PIT0_PCSR |= ~MCF_PIT_PCSR_HALTED;
MCF_PIT0_PCSR |= MCF_PIT_PCSR_OVW;
MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIE;
MCF_PIT0_PCSR |= MCF_PIT_PCSR_PIF;
MCF_PIT0_PCSR |= MCF_PIT_PCSR_RLD;
MCF_PIT0_PCSR |= MCF_PIT_PCSR_EN;

MCF_GPIO_PAR_TIMER = 0x00;
MCF_GPIO_PDDR_TIMER = MCF_GPIO_PDDR_TIMER_PDDR_TIMER3 = MCF_GPIO_PDDR_TIMER_PDDR_TIMER3;
MCF_GPIO_PCLRR_TIMER = 0x00;

for(;;)
{
if(count >= 10000)
{
count = 0;
}

}
}

MensagemEnviado: 29 Jun 2007 09:19
por CCandido
não seria falta ( Enableinterrups ) o velho CLI
t+

MensagemEnviado: 03 Jul 2007 12:24
por msamsoniuk
existem duas outras possibilidades: a primeira de que ele esteja ignorando interrupcoes, pois quando um device interrompe o 68k/cf, ele encodifica um nivel de 0 a 7, q eh comparado com o a mascara de interrupcao no SR. dependendo do valor, ele filtra ou nao, mas para saber disso vc precisa debugar o codigo para ver se ele chega a processar interrupcoes.

se ele nao estiver mascarando, o problema pode ser que o registro VBR aponta para uma area que nao pode ser escrita (flash). isso significa que quando vc tenta registrar a funcao de tratamento de interrupcoes, nada eh feito e a tabela continua zerada ou apontando para uma funcao vazia de tratamento de interrupcoes.

MensagemEnviado: 30 Jul 2007 13:36
por Kremer
Acredito que o handler do PIT0 esteja sendo estabelecido de maneira errada.
Não seria

mcf5xxx_set_handler(64+43,PIT0_handler);

ao invés de

mcf5xxx_set_handler(128+43,PIT0_handler);

Outros detalhes podem estar ocorrendo tb, pois não sabemos como esta a sua inicialização do chip.