Autor Tema: error al usar interrupcion por usb  (Leído 2494 veces)

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

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
error al usar interrupcion por usb
« en: 15 de Enero de 2012, 16:01:27 »
Hola a todos, estoy haciendo un programa para comunicar la pc con mi PIC via usb-cdc y todo ha funcionado bien, hasta que intento usar la interrupcion por usb, les comento cuando pongo estas lineas me compila bien

Código: [Seleccionar]
#int_usb
void usb_data();

sin embargo cuando intento completar la funcion:
Código: [Seleccionar]
#int_usb
void usb_data()
{

}
me marca el siguiente error al compilar:
Código: [Seleccionar]
Duplicate interruption function
alguna idea de porque pasa esto, tambien si intento poner mas lineas dentro de la funcion de interrupcion me marca el mismo error.

lo que quiero es que al recibir el dato brinque a la interrupcion para no tener que estar preguntando por datos dentro de la funcion principal

"Nada es imposible, no si puedes imaginarlo"

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: error al usar interrupcion por usb
« Respuesta #1 en: 15 de Enero de 2012, 16:47:23 »
se ve que hay otro usb_data por ahi (en el stack del usb por ejemplo) y por eso te salta ese error.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: error al usar interrupcion por usb
« Respuesta #2 en: 15 de Enero de 2012, 16:52:19 »
gracias merlinz, entonces solo con cambiar el nombre de la funcion quedaria?, voy a probar
"Nada es imposible, no si puedes imaginarlo"

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: error al usar interrupcion por usb
« Respuesta #3 en: 15 de Enero de 2012, 17:09:38 »
yam probe cambiando el nombre de la funcion pero me sigue mandando el mismo error, me dice que la funcion de interrupcion esta duplicada no se porque  :?
"Nada es imposible, no si puedes imaginarlo"

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: error al usar interrupcion por usb
« Respuesta #4 en: 15 de Enero de 2012, 22:37:29 »
pues no logro hacer funcionar la interrupcion, ahora estoy con otro problema, si logro enviar datos a la pc, pero cuando envio de la pc al pic, este siempre me lee el mismo dato, solo estoy haciendo un echo, pero no me funciona. pongo mi codigo

Código: [Seleccionar]

#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=115200,xmit=pin_c6,rcv=pin_c7)//configuracion del puerto rs232 envia por pin_c6 y recibe por pin_c7
#include "usb_cdc.h"
char datos_usb=0,rs232_dat=0;

void config()
{
   setup_adc_ports(no_analogs);
   delay_ms(300);
   //enable_interrupts(int_usb);

   //enable_interrupts(global);
   usb_cdc_init();
   usb_init();
}

void main()
{
   config();
   //while(!usb_cdc_connected());//espera mientras no esta conectado     
   while(true)
   {
      usb_task();//habilita periférico usb e interrupciones
      if(usb_enumerated())
      {
         
         if(usb_cdc_kbhit())
         {
            datos_usb=usb_cdc_getc();
            printf(usb_cdc_putc,"Recibi el dato:--%c",datos_usb);//imprimo datos por el usb;
           
            usb_cdc_putc('--');
         }
      }
   }
   
}

si imprime bien todo exepto el valor que le envio desde la pc, me parece qe es un error del ccs, alguno le ha pasado algo similar?
"Nada es imposible, no si puedes imaginarlo"

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: error al usar interrupcion por usb
« Respuesta #5 en: 16 de Enero de 2012, 14:37:38 »
Me respondo yo solo, por si alguien tiene el mismo problema despues, ya logre corregir el error de la lectura de, en efecto era un problema con los drivers del ccs, simplemente los substitui por los que tengo de una version anterior y funciono

ahora sigo con el problema de la interrupcion que no se porque no la puedo poner  :?
"Nada es imposible, no si puedes imaginarlo"

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1696
Re: error al usar interrupcion por usb
« Respuesta #6 en: 17 de Enero de 2012, 10:25:57 »
hola rivale, nunca habia intentado usar la int_usb pero mira lo que encontré en el
foro de ccs
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: error al usar interrupcion por usb
« Respuesta #7 en: 17 de Enero de 2012, 10:50:26 »
gracias jhozate, en efecto la interrupcion existe en la libreria de pic18_usb.h en la linea 1013

Código: [Seleccionar]
#int_usb
void usb_isr() {
   if (usb_state==USB_STATE_DETACHED) return;   //should never happen, though
   if (UIR) {
      debug_usb(debug_putc,"\r\n\n[%X] ",UIR);
      if (UIR_ACTV && UIE_ACTV) {usb_isr_activity();}  //activity detected.  (only enable after sleep)

      if (UCON_SUSPND) return;

      if (UIR_UERR && UIE_UERR) {usb_isr_uerr();}          //error has been detected

      if (UIR_URST && UIE_URST) {usb_isr_rst();}        //usb reset has been detected

      if (UIR_IDLE && UIE_IDLE) {usb_isr_uidle();}        //idle time, we can go to sleep
      if (UIR_SOF && UIE_SOF) {usb_isr_sof();}
      if (UIR_STALL && UIE_STALL) {usb_isr_stall();}        //a stall handshake was sent

      if (UIR_TRN && UIE_TRN) {
         usb_isr_tok_dne();
         UIR_TRN=0;    // clear the token done interrupt., 0x190.3
      }    //a token has been detected (majority of isrs)
   }
}

tendria que quitarla de aca y ponerla en mi archivo .c
"Nada es imposible, no si puedes imaginarlo"


 

anything