Soy un miembro de pregrado de un equipo de investigación que trabaja en un proyecto que involucra un ASIC transmisor de RF y su receptor inalámbrico que finalmente debería enviar datos a una PC.
El receptor emite una señal serial rápida , continua, asíncrona, no estándar (es decir, no SPI, I2C, UART, etc.), por lo que mi trabajo es escribir un software de microcontrolador para conectar el receptor a la computadora. Actualmente, mi enfoque es utilizar interrupciones activadas por bordes para colocar los datos en un búfer circular y hacer todo el proceso de decodificación bit a bit en el bucle principal. El microcontrolador debe emitir simultáneamente estos datos mediante USB (puerto de comunicación virtual) a la computadora.
Aquí hay un problema que estoy teniendo y que estoy anticipando:
No puedo procesar los datos almacenados en el búfer lo suficientemente rápido, incluso con mi potente procesador ARM Cortex M3 de 72 MHz. La velocidad de bits es de 400 Kbps (2.5 us / bit). Como referencia, solo deja 180 ciclos por bit (incluida la decodificación Y el ISR, que tiene ~ 30 ciclos de sobrecarga). El MCU también tiene que manejar muchas otras tareas que sondea en el bucle principal.
El controlador del puerto de comunicaciones virtual USB también está basado en interrupciones. Esto me hace casi seguro de que el controlador eventualmente tendrá el procesador interrumpido durante tanto tiempo que se perderá la ventana de 2.5 microsegundos (180 ciclos) en la que se puede transmitir un bit. No estoy seguro de cómo normalmente se resuelven los conflictos / carreras de interrupción como esta.
Entonces, la pregunta es simple, ¿qué podría uno hacer para resolver estos problemas o no es este el enfoque correcto? Estoy dispuesto a considerar enfoques menos centrados en el software también. Por ejemplo, el uso de un chip USB dedicado con algún tipo de máquina de estado de hardware para la decodificación, pero este es un territorio desconocido.