Transmisor datos USB en MSP430

Buen dia

Estoy construyendo un equipo de dos canales que me permita adquirir 52734 muestras por segundo por canal, y enviar los datos adquiridos por USB al PC. Estoy usando dos ADC ADS1271 conectados en modo Daisy chain, con interface SPI hacia un microcontrolador MSP430F5510.

Los datos enviados desde el conversor hasta el microcontrolador llegan bien pero cuando se inicia la transmisión de los datos por USB y como los conversores continúan enviando datos algunos datos se dañan es como si el USB interrumpiera la adquisición, no se si con DMA pueda suprimir el problema.

este es le codigo cuando esta adquiriendo los datos y cuando "MEGA_DATA_LENGTH" se llena inicia el envio de los datos por USB

Código:
#define MEGA_DATA_LENGTH 1908 /// length of bytes
BYTE buffer[MEGA_DATA_LENGTH]; //// buffer

int inc; /// increment for each sample


 case ST_ENUM_ACTIVE:                
                 if (!(P1IN & BIT1)){ /// wait the sample ready pin DRDY

                    
                    while (!(UCB1IFG & UCTXIFG));                   
                    UCB1TXBUF = 0x00;                    
                    while (!(UCB1IFG & UCRXIFG));   /// wait RXBUF received complete  byte 3 ADC 1            
                      buffer[inc] = UCB1RXBUF;                      
                      while (!(UCB1IFG & UCTXIFG));                   
                      UCB1TXBUF=0x00;                       
                      while (!(UCB1IFG & UCRXIFG));    /// wait RXBUF received complete byte 2 ADC 1
                      buffer[inc+1] = UCB1RXBUF;                       
                      while (!(UCB1IFG & UCTXIFG));                      
                      UCB1TXBUF=0x00;                      
                      while (!(UCB1IFG & UCRXIFG));      /// wait RXBUF received complete  byte 1 ADC 1
                      buffer[inc+2] = UCB1RXBUF;                                             
                      while (!(UCB1IFG & UCTXIFG));
                      UCB1TXBUF=0x00;                            
                      while (!(UCB1IFG & UCRXIFG));   /// wait RXBUF received complete  byte 3 ADC 2
                      buffer[inc+3] = UCB1RXBUF;                      
                      while (!(UCB1IFG & UCTXIFG));                          
                      UCB1TXBUF=0x00;                           
                      while (!(UCB1IFG & UCRXIFG));   /// wait RXBUF received complete  byte 2 ADC 2
                      buffer[inc+4] = UCB1RXBUF;                       
                      while (!(UCB1IFG & UCTXIFG));                        
                      UCB1TXBUF=0x00;                            
                      while (!(UCB1IFG & UCRXIFG));  /// wait RXBUF received complete  byte 3 ADC 2
                      buffer[inc+5] = UCB1RXBUF;
                      inc = inc + 6;  //// inc the next 6 bytes                   
                      ///////////////////////////////
                      if(inc == MEGA_DATA_LENGTH) {        //// when inc == 1908 bytes send data            
                         USBCDC_sendData(buffer,MEGA_DATA_LENGTH,CDC0_INTFNUM);
                         inc = 0;                         
                     }             
                 }                
                break;

1908 bytes x 6 bytes = 318 muestras por canal

esta la grafica de como se ve
http://www.freeimagehosting.net/8b4ow

Gracias por la ayuda
 
Última edición por un moderador:
¿Usando la función cdcSendDataWaitTilDone pasa lo mismo?. USBCDC_SendData empieza el envío de datos, pero no espera a que se hayan enviado todos para retornar.
Puede estar pasando que la velocidad de toma de datos de los 2 ADC sea mayor a lo que se puede transmitir por el bus USB. ¿A cuantas muestras por segundo estás muestreando?
 
Atrás
Arriba