elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Informática
| |-+  Electrónica
| | |-+  Error en las interrupciones por overflow del timer
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error en las interrupciones por overflow del timer  (Leído 1,893 veces)
FaiF (A¥åHøRå)


Desconectado Desconectado

Mensajes: 343



Ver Perfil WWW
Error en las interrupciones por overflow del timer
« en: 2 Agosto 2006, 12:22 pm »

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.

Código:
<?php

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


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

void rsi_ov1 (void) interrupt 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=0; i<100; i++)
;
}
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 ;)


En línea

FaiF (A¥åHøRå)


Desconectado Desconectado

Mensajes: 343



Ver Perfil WWW
Re: Error en las interrupciones por overflow del timer
« Respuesta #1 en: 4 Agosto 2006, 23:36 pm »

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:

Código:
VECTOR ADDRESS 0xFFF2 rsi_ov 


Salu2 ;)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines