Texas instruments ofrece el código fuente de una pila Bluetooth (Serial Port Profile) que fue escrita por Mindtree. Se ejecuta en un microprocesador MSP430 e interactúa con su chip controlador de banda base (es decir, el chip de RF). Utiliza el sistema operativo FreeRTOS. Este software viene en forma de varias demos; la que yo utilicé se llama demo del acelerómetro. Este chipset forma parte de un hardware portátil personalizado que estoy desarrollando. Estoy ejecutando la versión GA1.0 (demo del acelerómetro modificada para que funcione en el hardware personalizado). Estoy tratando simplemente de pasar datos entre Bluetooth SPP y una UART corriendo a 78K. Tengo el modo SNIFF deshabilitado y estoy deshabilitando RTS en la interrupción UART. No se hace ningún procesamiento en la interrupción, aparte de una escritura a un buffer y una toma de semáforo. Tengo una tarea de baja prioridad que maneja el buffer.
Todo lo que necesito que haga el chip es proporcionar un enlace entre el Bluetooth y una UART funcionando a 76K (esta UART se conecta con nuestro procesador DSP). Actualmente, el DSP es el cerebro del hardware y se comunica con un PC GUI a través de USB. Quiero tomar la UART del DSP y reenviarla a través de Bluetooth sin que el DSP sepa o le importe a qué está conectada su UART.
Tal y como está construido ahora mismo, el software se conecta vía bluetooth correctamente y he verificado la transmisión y recepción de datos. A bajas velocidades, esto funciona muy bien. Dado que el DSP siempre está transmitiendo un mensaje de estado a través de su UART, puedo conectar un PC con un dongle bluetooth al hardware, y utilizar Putty (terminal de puerto serie) para ver este mensaje de estado que llega correctamente. Sin embargo, una vez que intento conectarme con la interfaz gráfica de nuestro PC, el tráfico de RX resultante en el bluetooth es tal que el software ya no puede dar servicio a las interrupciones UART del DSP de manera oportuna. Sin Bluetooth RX, estoy recibiendo más de 100 interrupciones UART antes de que mi tarea sea capaz de procesar los datos, incluso con la prioridad de la tarea establecida en la más alta. Me imagino que es una gran magnitud más una vez que los datos RX comienzan a llegar, lo que actualmente nos bloquea. Desafortunadamente, este procesador MSP430 no ofrece DMA para la UART que estamos utilizando, y no ofrece almacenamiento en búfer de hardware.
Mis intentos de arreglar esto siempre han llevado a uno de tres resultados: mi interrupción UART desbordada, la interrupción BT UART desbordada, o mi buffer UART desbordado cuando el Stack no consigue enviar los datos a tiempo. La guía del desarrollador dice que a 18 MHz y 115K, el rendimiento medio de los datos es de 84K, y la utilización media de la CPU es del 10,7%, sin embargo, el software no puede seguir el ritmo de una UART de 78K.
En este momento me temo que la interrupción Bluetooth UART (parte de la pila de Mindtree) está acaparando demasiada CPU para permitir el manejo de cualquier otra interrupción al ritmo que queremos.
¿Alguien ha conseguido integrar la pila Bluetooth de TI/MindTree? Si es así, ¿te has encontrado con los mismos problemas? Básicamente estoy buscando cualquier y todas las sugerencias sobre cómo superar estos problemas.
3 votos
He tenido que leerlo dos veces para entender cuál es realmente su pregunta, e incluso así no estoy seguro.
0 votos
¿Le importaría iluminarnos?
0 votos
@cbursk: tl;dr;
0 votos
Lo siento, ha sido algunas noches tarde en esto. He editado mi propuesta original para añadir una pregunta más específica. Sólo espero que alguien aquí se ha encontrado con los mismos obstáculos que yo y tenía sugerencias.
0 votos
Puede ayudar si nos deja saber qué chip msp430 que está utilizando, ya que hay una diferencia entre USART y USCI.
1 votos
MSP430BT5190 + CC2560
0 votos
Estoy tratando de obtener una mejor comprensión de lo que está pasando, Por lo que puedo entender de su pregunta, el DSP se conecta a la mps430 a través de UART y el MSP430 se conecta a la radio (blue tooth) y de la radio a la PC. ¿Es esto correcto? Y usted está diciendo que el msp430 no puede mantenerse al día con los datos que desea pasar a través de? Si ese es el caso creo que estas en el camino correcto de que algo se esta desbordando y no esta engranando bien. BTW por que no puedes usar DMA, por la hoja de datos deberias tenerlo disponible para este proposito.