Página 1 de 1

Interrupção no coldfire V1

MensagemEnviado: 07 Jul 2008 14:57
por mastk
Olá povo, tó com querendo usar os colds V1 e estou tendo um probleminha de vicio, que como qualquer vicio quero manter...

Nos HCS08 usamos os arquivo *.PRM e declaramos:

VECTOR ADREESS 0xFFF0 INT_FIM_DO_MUNDO

E no programa, é rotina fica do msm jeito:

#pragma TRAP_PROC
void INT_FIM_DO_MUNDO (void){
};

Gostaria de saber se nos colds tem um arquivo equivalente (que seria o "exceptions.c" ?) e como declarar as interrupções nele.

Re: Interrupção no coldfire V1

MensagemEnviado: 07 Jul 2008 16:30
por Paulo
mastk escreveu:Olá povo, tó com querendo usar os colds V1 e estou tendo um probleminha de vicio, que como qualquer vicio quero manter...

Nos HCS08 usamos os arquivo *.PRM e declaramos:

VECTOR ADREESS 0xFFF0 INT_FIM_DO_MUNDO

E no programa, é rotina fica do msm jeito:

#pragma TRAP_PROC
void INT_FIM_DO_MUNDO (void){
};

Gostaria de saber se nos colds tem um arquivo equivalente (que seria o "exceptions.c" ?) e como declarar as interrupções nele.


Fala mastk, tranquilo?

Estou utilizando o recurso Device Initialization->Initialize Device.
Antes eu fazia tudo na mão, de uns tempos pra cá passei a utilizar esse cara e achei ele muito bom e eficiente.

Ele gera uma pasta Generate Code que contém o arquivo "MCUinit.c" que possui o escopo das funções de interrupção dentro dele, daí vc pode editar do jeito que vc quiser.
Dá uma olhada, vale a pena...

Até +...
Paulo D.

MensagemEnviado: 07 Jul 2008 17:49
por Fábio Pereira
Para quê complicar tanto?

Basta utilizar as definições criadas pela Freescale ...

Para a ISR do RTC, basta utilizar:

void interrupt VectorNumber_Vrtc rtc_isr(void)

Tão fácil ... Não precisa modificar PRM e o melhor de tudo: é 100% portável de HCS08 para CFv1.

As definições de VectorNumber estão nos include files de cada device.

T+

MensagemEnviado: 11 Jul 2008 08:02
por Paulo
Fábio Pereira escreveu:Para quê complicar tanto?

Basta utilizar as definições criadas pela Freescale ...

Para a ISR do RTC, basta utilizar:

void interrupt VectorNumber_Vrtc rtc_isr(void)

Tão fácil ... Não precisa modificar PRM e o melhor de tudo: é 100% portável de HCS08 para CFv1.

As definições de VectorNumber estão nos include files de cada device.

T+


Eu já utilizei dessa maneira também, mas resolvi experimentar o "Device Inicialization" e achei bem legal para iniciar os micros e muito tranquilo, mas das duas maneiras funcionam e são tranquilas, daí depende muito do que se quer.

Flw...
Até +...
Paulo D.

Re: Interrupção no coldfire V1

MensagemEnviado: 11 Jul 2008 13:17
por msamsoniuk
no gcc com CFv2 eu tenho usado um array de funcoes com os enderecos das funcoes de tratamento de interrupcao. dae no linker script pode posicionar esse array no endereco 0 ou mudar o registro VBR para apontar para o array.

porem as funcoes de tratamento de excessao sao diferentes das funcoes normais: as funcoes normais empilham apenas o PC e retornam com RTS, enquanto que as excessoes criam um stack frame com codigos extendidos sobre aquela excessao. para limpar automaticamente esse stack frame e restaurar o estado corretamente, a funcao de tratamento de excessao retorna com RTE ao inves de RTS. para isso utilizo o prefixo interrupt no gcc.

mas nao sei qto de compatibilidade o v1 tem com o v2...

mastk escreveu:Olá povo, tó com querendo usar os colds V1 e estou tendo um probleminha de vicio, que como qualquer vicio quero manter...

Nos HCS08 usamos os arquivo *.PRM e declaramos:

VECTOR ADREESS 0xFFF0 INT_FIM_DO_MUNDO

E no programa, é rotina fica do msm jeito:

#pragma TRAP_PROC
void INT_FIM_DO_MUNDO (void){
};

Gostaria de saber se nos colds tem um arquivo equivalente (que seria o "exceptions.c" ?) e como declarar as interrupções nele.