Ich bin neu bei ARM CORTEX M0. Ich versuche, den Tx-Pin von UART als Debug-Port zu verwenden.
Wenn ich den XDS200-Debugger verwende, um den Code schrittweise durchzugehen, kann ich die Zeichen sehen, und ich kann sehen, dass „Hello World“ sauber auf dem Tera-Term über den COM-Port gedruckt ist.
Aber wenn ich den Mikrocontroller alleine laufen lasse, sehe ich keinen Ausgang und die am Tx-Pin angeschlossene Sonde zeigt konstant hoch.
Ich denke, erst nach der Verwendung des Debuggers und dem schrittweisen Durchlaufen des Codes werden die Signale angezeigt, die jedoch nicht genau "Hello World" darstellen. Das Folgende ist der Teil der Ausgabe, die ich von Tera-Term protokolliert habe, und dies wiederholt sich:
/***********************************************************/
W
oldo
W
oldo
Hrl
Well WHWelo
WHWelo
WHrld HoHrl WHoell Weold
olrl WHrllo
Welllo
oell Hrldo
Welo o
oelo o
oelo Hrl
Welo
/***********************************************************/
Es folgt der main() Funktionscode.
/***********************************************************/
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++;
}
}
}
/***********************************************************/
Es folgt der Code der UART-Interrupt-Service-Routine
/***********************************************************/
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;
}
}
Könnte mir bitte jemand helfen zu verstehen, was mir fehlt, um die erwartete Zeichenfolge "Hello World" anstelle von durcheinandergebrachtem Text zu drucken. Ich verwende einen USB-Seriell-Transceiver mit einer Betriebsspannung von 0-3,3 V. Danke
Sie fügen so schnell wie möglich Zeichen in den Sendepuffer ein, ohne zu prüfen, ob der UART bereit ist, ein nächstes Zeichen zu akzeptieren. Daher gehen viele Zeichen verloren, und was der PC empfängt, ist eine mehr oder weniger zufällige Teilmenge der Zeichen, die Sie zu übertragen versuchen.
Suchen Sie nach den Bits „tx-Puffer leer“ oder „tx-FIFO nicht voll“. Bevor Sie dem Tx-Puffer ein nächstes Zeichen zuweisen, warten Sie zunächst auf eines dieser Bits.
Linuxstack
code
for(;;) { ptr = Nachricht; While (* ptr) { if (UART_LINE_STATUS & TX_COMPLETE) { UART_TX_BUF = (volatile unsigned char) (* ptr); ptr++; } } }code
Bitte werfen Sie einen Blick auf das Datenblatt ti.com/lit/ds/symlink/pga900.pdf . Dieser Prozessor hat keine "Tx-Puffer leer"- oder "Tx-Fifo nicht voll"-Bits. Ich habe den Code im Wesentlichen wie oben geändert. Also überprüfe ich, ob das TX_COMPLETE-Bit im UART_LINE_STATUS-Register gesetzt ist oder nicht. Aber immer noch keine Ausgabe zum Tera-Term. Lass es mich wissen, bitte. Vielen Dank für Ihre HilfeWouter van Ooijen
krass
Linuxstack
Linuxstack
Linuxstack
code
if(UART_LINE_STATUS & TX_COMPLETE) { UART_TX_BUF = *ptr; ptr++; }code
Ich habe das Datenblatt gelesen und der von Ihnen gegebene Hinweis war hilfreich. Aber ich kann die implizite Logik in Bezug auf das COM_TXRDY-Bit nicht ableiten. COM_TX_STATUS ist eine Art Schalter, der die Übertragung steuern kann, aber keine Ahnung hat, wie man von ISR aus steuert. Auch bezüglich des Chips habe ich nur das Datenblatt und das Evaluation Board. Bitte lassen Sie mich wissen, was ich in der ISR vermisse, um den Zeichenfluss ohne Abfrage zu steuern. Danke schön.Wouter van Ooijen