enviando datos a través de bluetooth a mi hardware a través de una interfaz gráfica de usuario serie MATLAB

2

Tengo un hardware con el módulo bluetooth RN-41 y el microprocesador de brazo lpc 214. Actualmente, mi dispositivo solo envía datos al PC y trato de configurarlo para poder recibir algunos comandos a través del bluetooth y realizar ciertas acciones, por ejemplo. parpadeo del LED, apagado, etc.

Tengo una GUI en serie en matlab que tiene botones (LED encendido, LED apagado, APAGADO, etc.) donde cada botón que se presiona envía un valor asociado al hardware a través de un puerto serie virtual para realizar una acción determinada .

Hasta ahora no he podido hacer que mi dispositivo realice ninguna acción correctamente. Definitivamente veo que el hardware responde a una pulsación de un botón de formas extrañas pero nunca realiza la acción deseada. Creo que puedo haber configurado el UART incorrectamente. Aquí estoy pegando un código asociado con este problema.

Cualquier ayuda sería muy apreciada.

¡Gracias!

void setup_uart0(int newbaud, char want_ints)

{
baud = newbaud;
U0LCR = 0x83;   // 8 bits, no parity, 1 stop bit, DLAB = 1
U0DLM = 0x00;   // set for baud high byte
U0DLL = 0x06;   // set for baud low byte
U0FDR = 0xC1;   
U0LCR = 0x03; 
VICVectCntl1 = 0x00000026;
VICVectAddr1 = (unsigned int) UART0ISR;
VICIntEnable = (1<<6);
//PINSEL0 = 0x0F001555;
}


void UART0ISR(void)
{
    unsigned int i;
unsigned char ch;
U0IER = 0x01; 

while(!(U0LSR&0x01));
uart0_rx_buffer[uart0_rx_extract_idx++]=U0RBR;
uart0_rx_extract_idx %=UART0_RX_BUFFER_SIZE;
ch = uart0_rx_buffer;

for (i=0;i<8;i++)
uart0_rx_buffer[i]= 0;

return U0RBR;

if(ch ==0x0A){
   VICIntEnable &= (~0x00020000);
   eventMarker=1;
   ch=0;
}

else if (ch ==0x0B){
    shutdown();
  ch=0;
  }
else if (ch ==0x0C){
blink(1,ON);
 ch=0;
 }

else if (ch ==0x0D){
blink(1,OFF);   
    ch=0;
}

VICIntEnable |= 0x00024000;
VICVectAddr= 0;
U0IER = 0x00; 

}
    
pregunta serendipity

2 respuestas

1

No pasa nada porque nada más allá de

return U0RBR;

en el ISR se ejecuta. Todos sus condicionales que podrían hacer algo están en el código muerto después de la devolución incondicional.

Es probable que necesite reconsiderar la arquitectura de su programa, en particular la relación entre el ISR y el ciclo principal del programa: hay ventajas y desventajas de realizar el procesamiento de comandos en cualquier lugar.

    
respondido por el Chris Stratton
0

Haz esto y podrás solucionarlo, probablemente :-).

  • Si bien ese código no es complejo, los mejores resultados de depuración generalmente se logran eliminando TODO lo que no se considera esencial

  • y, luego cambiando lo menos posible durante el curso de la ejecución.

Aquí, por ejemplo, si se trata de enviar o recibir caracteres,

  • Enviar un solo carácter con pausas adecuadas entre.

  • Si puede hacerlo con una sola prueba o bucle o condicional, lo que sea, entonces solo tiene una.

  • Una vez que las obras completamente triviales puedan agregarse.

  • Si el fallo completamente trivial hace que sea mucho más fácil detectar las suposiciones, acciones o hardware erróneos.

respondido por el Russell McMahon

Lea otras preguntas en las etiquetas