Autor Tema: Interrupción por USB en C18  (Leído 2159 veces)

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

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Interrupción por USB en C18
« en: 05 de Septiembre de 2011, 19:37:05 »
Estoy usando C18, hay alguna forma de que se dispare la interrupción que me indique que ha llegado algún dato por USB? Hed probado con getsUSBUSART pero tendria que estar constantemente leyendo para saber si algo llegó, no hay formas de que se active la interrupción de byte recibido?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Interrupción por USB en C18
« Respuesta #1 en: 05 de Septiembre de 2011, 19:59:23 »
USB no es como un puerto serial  :? Lo más adecuado es llamar con suficiente frecuencia a getsUSBUSART para recibir los datos.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Interrupción por USB en C18
« Respuesta #2 en: 05 de Septiembre de 2011, 21:36:49 »
Entiendo, entonces leeré constantemente con getsUSBUSART, gracias por todo.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Interrupción por USB en C18
« Respuesta #3 en: 06 de Septiembre de 2011, 00:05:24 »
tienes el USBIF el cual se activa en muchos casos. Creo que usando el TRNIF podrias detectar cuando llegan datos. el TRNIF te avisa de que una transaccion se ha completado, ahora lees los registros para ver que transaccion es, si es de datos/entrante pues lees los datos.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Interrupción por USB en C18
« Respuesta #4 en: 06 de Septiembre de 2011, 14:31:36 »
Segun el datasheet el usbif se dispara por varios motivos en cambio el trnif se dispara cuando una transaccion esta completa voy a leer mas esto y probare el trnif luego regreso a comentar los resultados, por el momento usare el cdc por ser relativamente mas facil despues lo hare con el hid.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Interrupción por USB en C18
« Respuesta #5 en: 06 de Septiembre de 2011, 23:27:40 »
Bueno estuve haciendo varias pruebas pero no parece originarse la interrupción por un byte(s) recibido(s), creo que se dispara en algún momento dado y las librerias usb borran los flags de tal forma que en mi main.c el flag ya viene en 0, y como recien estoy empezando en C no veo donde modificar, si alguien tiene resuelto esto a ver si me da una luz.

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Interrupción por USB en C18
« Respuesta #6 en: 07 de Septiembre de 2011, 12:32:00 »
Tengo lo siguiente en el archivo usb_descriptors.c :

    /* Endpoint Descriptor */
    //sizeof(USB_EP_DSC),DSC_EP,_EP02_IN,_INT,CDC_INT_EP_SIZE,0x02,
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    _EP01_IN,            //EndpointAddress
    _INTERRUPT,                       //Attributes
    0x08,0x00,                  //size
    0x02,                       //Interval

    /* Interface Descriptor */
    9,//sizeof(USB_INTF_DSC),   // Size of this descriptor in bytes
    USB_DESCRIPTOR_INTERFACE,               // INTERFACE descriptor type
    1,                      // Interface Number
    0,                      // Alternate Setting Number
    2,                      // Number of endpoints in this intf
    DATA_INTF,              // Class code
    0,                      // Subclass code
    NO_PROTOCOL,            // Protocol code
    0,                      // Interface string index
   
    /* Endpoint Descriptor */
    //sizeof(USB_EP_DSC),DSC_EP,_EP03_OUT,_BULK,CDC_BULK_OUT_EP_SIZE,0x00,
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    _EP02_OUT,            //EndpointAddress
    _BULK,                       //Attributes
    0x40,0x00,                  //size
    0x00,                       //Interval

    /* Endpoint Descriptor */
    //sizeof(USB_EP_DSC),DSC_EP,_EP03_IN,_BULK,CDC_BULK_IN_EP_SIZE,0x00
    0x07,/*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
    _EP02_IN,            //EndpointAddress
    _BULK,                       //Attributes
    0x40,0x00,                  //size
    0x00,                       //Interval

Creo que tengo definido el Endpoint1 IN pero no tengo el Endpoint 1 OUT tal vez por eso no se da la interrupción?

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Interrupción por USB en C18
« Respuesta #7 en: 07 de Septiembre de 2011, 14:36:00 »
Gracias Mr. xxopiumxx por el apoyo y por el link mas adelante me meteré con el HID entonces. Saludos.

Desconectado borodelostoldos

  • PIC10
  • *
  • Mensajes: 7
Re: Interrupción por USB en C18
« Respuesta #8 en: 07 de Mayo de 2013, 09:46:10 »
Hola muchachos, resolvieron el tema de la interrupción por USB con la clase CDC para C18??
Usando la comunicación con detección por polling anda perfecto, pero me gustaría hacer algo más eficiente!
No quiero pasarme a HID porque me resulta más fácil interactuar con un virtual COM del lado de la PC, ya que tengo muchas cosas funcionando de esa manera y debería mudar todo!!
Muchísimas gracias por sus respuestas!!