¿Por qué ARM Cortex M0 imprime incorrectamente Hello World en UART?

1

Soy nuevo en ARM CORTEX M0. Estoy tratando de usar el pin Tx de UART como puerto de depuración.

Si uso el depurador XDS200 para desplazarme por el código, puedo ver los caracteres y puedo ver "Hello World" impreso en el Tera-Term a través del puerto COM.

Pero si dejo que el microcontrolador funcione solo, no veo ninguna salida y la sonda conectada en el pin Tx muestra una constante alta.

Creo que solo después de usar el depurador y pasar por el código, las señales aparecen pero no representan exactamente "Hello World". La siguiente es la parte de la salida que registré desde Tera-Term y esto es repetitivo:

/***********************************************************/

    W

    oldo

    W

    oldo

     Hrl  

    Well WHWelo

    WHWelo

    WHrld HoHrl WHoell Weold 

    olrl WHrllo

    Welllo

    oell  Hrldo

    Welo o

    oelo o

    oelo  Hrl  

    Welo

/***********************************************************/

A continuación se muestra el código de la función main ().

/***********************************************************/

    void main(void)

    {

       Configure_peripheral(); /*This function call initializes all the required interrupts and global variables etc... */

       char message[] = "Hello World \n";

       char *ptr;

       for(;;)

       {

           ptr = message;

           while(*ptr)

           {

               UART_TX_BUF = (volatile unsigned char)(*ptr);

               ptr++;

           }

       }

    }

/***********************************************************/

A continuación se muestra el código de rutina de servicio de interrupción de UART

/***********************************************************/

    interrupt void uart_isr(void)

    {

       if(UART_INTERRUPT_STATUS & UART_TXCOMPLETE_I)

       {

              /* Clear UART_TXCOMPLETE_I bit */

              UART_INTERRUPT_STATUS |= 0x02;

              /*datasheet : http://www.ti.com/lit/ds/symlink/pga900.pdf*/

              /*As per PGA900 datasheet : TX_COMPLETE is cleared when the UART_TX_BUF is written*/

              /* Read UART_LINE_STATUS for errors */

              UART_Line_Status = UART_LINE_STATUS;

              /* Transmit flag set here */

              UART_Flag_Tx = 1;

       }

     }

¿Podría alguien ayudarme, por favor, a entender lo que me falta para imprimir la cadena esperada "Hello World" en lugar de texto mezclado? Estoy usando un transceptor serie USB con voltaje de operación de 0-3.3v. Gracias

    
pregunta linuxstack

1 respuesta

9

Usted está poniendo los caracteres en el búfer de transmisión lo más rápido posible, sin verificar si el UART está listo para aceptar un próximo carácter. Por lo tanto, se pierden muchos caracteres y lo que la PC recibe es un subconjunto más o menos aleatorio de los caracteres que intentas transmitir.

Verifique los bits 'tx buffer empty' o 'tx fifo not full'. Antes de asignar un siguiente carácter al búfer Tx, primero espere uno de esos bits.

    
respondido por el Wouter van Ooijen

Lea otras preguntas en las etiquetas