2 votos

enviando datos por bluetooth a mi hardware a través de una GUI serial de matlab

Tengo un hardware con el módulo bluetooth RN-41 y el microprocesador lpc 214 arm.Actualmente mi dispositivo sólo envía datos al PC y estoy tratando de configurarlo para ser capaz de recibir algunos comandos a través de bluetooth y realizar ciertas acciones, por ejemplo, parpadear el LED, apagar, etc.

Tengo una GUI serial en matlab que tiene botones (LED ON, LED OFF, SHUTDOWN etc) donde cada botón al ser presionado envía un valor asociado al hardware a través de un puerto serial virtual para realizar una determinada acción.

Hasta ahora no he podido conseguir que mi dispositivo realice ninguna acción correctamente.Definitivamente veo que el hardware responde a la pulsación de un botón de forma extraña pero nunca realiza la acción deseada.Creo que puedo haber configurado la UART incorrectamente. Creo que he configurado la UART de forma incorrecta.

Cualquier ayuda será 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; 

}

1voto

Andrew Walker Puntos 9038

No pasa nada porque nada más allá de la

devolver U0RBR;

en el ISR se ejecuta. Todas sus condiciones que podrían hacer algo están en el código muerto que sigue al retorno incondicional.

Es probable que tengas que repensar la arquitectura de tu programa, en particular la relación entre el ISR y el bucle principal del programa - hay ventajas y desventajas de hacer el procesamiento de comandos en cualquier lugar.

0voto

aryeh Puntos 1594

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

  • Aunque ese código no es complejo, los mejores resultados de depuración se suelen conseguir eliminando TODO lo que no se considera esencial

  • y, por entonces cambiar lo menos posible durante el transcurso de la ejecución.

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

  • Envíe un solo carácter con las pausas adecuadas entre ellos.

  • Si se puede hacer con una sola prueba o bucle o condicional-lo que sea, entonces sólo tenga una.

  • Una vez que lo más trivial funciona, puedes añadir algo más.

  • Si lo totalmente trivial falla, es mucho más fácil detectar las malas suposiciones o acciones o el hardware.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X