Error en las interrupciones por overflow del timer

Iniciado por FaiF (A¥åHøRå), 2 Agosto 2006, 12:22 PM

0 Miembros y 1 Visitante están viendo este tema.

FaiF (A¥åHøRå)

HOla, estoy trabajando con el emulador Softec inDART-HC08 y un micro MC908JL8CPE. En él tengo conectado un LED al PTA_PTA0, un zumbador al PTD_PTD3 y 4 switchs en PTA_PTA1, PTA_PTA2, PTA_PTA3 y PTA_PTA4.

Tengo el siguiente codigo en C escrito. Estoy trabajando con el Freescale CodeWarrior.
Cuando voy a compilar me da un error extraño. Me dice "Empty declaration" en la rutina para la interrupción.


<?php

#include "hidef.h"
#include "derivative.h" /* include peripheral declarations */


//-- Valor para conseguir overflow cada 100ms
#define T100ms  0x0EF7

void rsi_ov1 (voidinterrupt 6 
{
  
//-- Desactivar flag de interrupcion
  
T1SC=(~0x80);
//
//-- Cambiar de estado bit 0 del puerto B
pitar(1); 
}

#pragma DATA_SEG SHORT _DATA_ZEROPAGE
void delay (unsigned int dly);
void pitar (int parametro);
void luz (int parametro2);
void leerp (void);
int leido;
int i;
unsigned char valor;



void main (void
{
       

         
//***Inicialización
         
         
EnableInterrupts                        // Enables Global Interrupt
         
CONFIG1 |= 0x01;                        // Disables COP

         
DDRD_DDRD3=1//Zumbador as output
         
DDRA_DDRA0=1//LED as output
         
         
DDRA_DDRA1=0//Switch as input
         
DDRA_DDRA2=0//Switch as input
         
DDRA_DDRA3=0//Switch as input
         
DDRA_DDRA4=0//Switch as input
         
         
PTAPUE_PTAPU1=1;  //Pullup
         
PTAPUE_PTAPU2=1;  //Pullup
         
PTAPUE_PTAPU3=1;  //Pullup
         
PTAPUE_PTAPU4=1;  //Pullup
         
         
/*-----------------------------*/
        /*- Configurar el temporizador */
        /*-----------------------------*/
T1SC 0x76;    // Prescaler: Div entre 64

//-- Establecer modulo del contador
//-- IMPORTANTE!: Se debe realizar en este orden
//-- primero la parte alta y luego la baja
T1MODH 0x0E;   // Parte alta
T1MODL 0xF7;   // Parte baja

//-- Habilitar las interrupciones
 _asm CLI _endasm;
//-- Activar temporizador
T1SC&=~(0x20);

        
//***
        
        
        
for(;;) { // Forever
    
         //pitar(1); 
         //luz(0); 
        // leerp();
          
         
}
}

void delay (unsigned int dly)
{
int i;

do
{
for(i=0i<100i++)
;
}
while(dly-- > 0);
}

      
void pitar (int parametro)
{
if (
parametro==0)
{
PTD_PTD3=0;
}
else
{
PTD_PTD3=1;
}
}

void luz (int parametro2)
{
if (
parametro2==0)
{
PTA_PTA0=0;
}
else
{
PTA_PTA0=1;
}
}

void leerp (void) {
leido=PTA_PTA1+PTA_PTA2+PTA_PTA3+PTA_PTA4;
}

//////////////////////////////////////////////////////////////////////////////
// IRQ Interrupt Handler
// ---------------------
// This subroutine is needed to implement the "Halt" debugging command.
//////////////////////////////////////////////////////////////////////////////
void irq_isr (void
{
asm {
wait_irq:
        
bil     wait_irq                        // Waits for the IRQ signal to go high
        
swi                                     // Jumps to monitor code
        
rti
        
}
}


Alguien sabe como solucionar estos errores???

Graciass

Salu2 ;)

FaiF (A¥åHøRå)

Ya lo solucioné asi que me contesto a mi mismo por si a alguien le es útil.

Lo que hay que hacer es en el archivo .PRM añadir una nueva línea especificando que vector corresponde a que función. Concretamente en el programa anterior habría que poner en el PRM:

VECTOR ADDRESS 0xFFF2 rsi_ov

Salu2 ;)