Eroli
27.06.2011, 14:26
Hallo zusammen,
ich versuche nun mittlerweile verzweifelt den UART ans laufen zu
kriegen.
Der Microcontroller befindet sich auf dem MSP430 Experimenters Board und
es ist keine zusätzliche Hardware angeschlossen.
Es wird der größere der beiden Controller benutzt, also der
MSP430FG4618.
So, ich will nun den UART ans Laufen kriegen und dann mit dem Computer
kommunizieren.
Fangen wir erstmal beim Controller an, dort initialsiere ich den UART
wie folgt:
void initUART()
{
P2SEL |= (BIT4 | BIT5); // Set TXD and RXD Pins
U1ME |= UTXE1 + URXE1;
U1CTL |= CHAR; // 8-Bit Data, (1 Stop-Bit, No Parity)
U1TCTL |= SSEL1; // Set ACLK as UCLK
U1BR0 = 0x03; // Set Baudrate 9600 (at 32.768 KHz)
U1BR1 = 0x00;
U1MCTL = 0x4A;
U1CTL &= ~SWRST; // Activate UART
IE1 |= URXIE1 + UTXIE1; // Activate UART-Interrupts
IFG2 &= ~UTXIFG1; // Clear Interrupt Flags
}
Dann habe ich mir Breakpoints in die beiden Interrupts gesetzt:
#pragma vector=USART1TX_VECTOR
__interrupt void USART1_TX(void)
{
TXBUF1 = 0xFF;
}
#pragma vector=USART1RX_VECTOR
__interrupt void USART1_RX(void)
{
unsigned short test = RXBUF1;
}
Aber es wird nie ein Breakpoint erreicht.
Nun frage ich mich die ganze Zeit, ob die UART denn wirklich läuft oder
ob es da Probleme zum Beispiel mit dem Oszillator geben könnte, aber mir
fällt keine Möglichkeit zum testen ein...
Das Experimenters Board hat ja bereits eine DSUB9-Buchse drauf. Deswegen
gehe ich mal davon aus, dass ich keine Pegelwandler benötige.
Als Kabel benutze ich das beim STK500 mitgelieferte Kabel.
Wenn ich da mal die Durchgänge prüfe, dann komme ich auf folgendes
Ergebnis (eigene Nummerierung):
(Buchsen-Seite) (Stecker-Seite)
/----------\ /-----------\
/ 0 1 2 3 \ / 3 2 1 0 \
/ 4 5 6 7 8 \ / 8 7 6 5 4 \
----------------- -------------------
In dieser PDF (slau213a.pdf) findet ihr am Ende einen
Schaltplan des Boards: http://focus.ti.com/lit/ug/slau213a/slau213a.pdf
Vielleicht machen wir erstmal hier Pause, da ich zum Senden vom PC das
.NET Framework benutze und hoffe, dass es da eigentlich keine Fehler
geben sollte...
Ich hoffe, dass ich einige Leute finden, die mir auf die Sprünge helfen
können :-)
Ciao,
Eroli
EDIT: Vielleicht noch ein kleiner Hinweis:
Der RealTimer wird zum Beispiel so initialisiert und läuft dabei
sekündlich:
void initBasicTimer(void) // Initialize basic timer
{
// Basic timer setup
// Set ticker to 32768/(256*128) = 1 (One Interrupt per second)
// Enable BT interrupt
BTCTL = BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256;
IE2 |= BTIE;
}
Da dort die ACLK benutzt wird, habe ich versucht die ACLK auch für den
UART zu benutzen und deswegen die Codevorlage abgeändert und SSEL1
benutzt (in der Codevorlage wurde SSEL0 benutzt, ABER im Kommentar stand
auch ACLK. Dies passt laut ApplicationNotes aber nicht zusammen - oder
etwa doch???)
EDIT: Für die Aufmerksamen: Verzeiht mir, wenn ich die Frage in einem anderem Forum ebenfalls gestellt habe, aber es ist zeitlich leider etwas knapp bei mir...
ich versuche nun mittlerweile verzweifelt den UART ans laufen zu
kriegen.
Der Microcontroller befindet sich auf dem MSP430 Experimenters Board und
es ist keine zusätzliche Hardware angeschlossen.
Es wird der größere der beiden Controller benutzt, also der
MSP430FG4618.
So, ich will nun den UART ans Laufen kriegen und dann mit dem Computer
kommunizieren.
Fangen wir erstmal beim Controller an, dort initialsiere ich den UART
wie folgt:
void initUART()
{
P2SEL |= (BIT4 | BIT5); // Set TXD and RXD Pins
U1ME |= UTXE1 + URXE1;
U1CTL |= CHAR; // 8-Bit Data, (1 Stop-Bit, No Parity)
U1TCTL |= SSEL1; // Set ACLK as UCLK
U1BR0 = 0x03; // Set Baudrate 9600 (at 32.768 KHz)
U1BR1 = 0x00;
U1MCTL = 0x4A;
U1CTL &= ~SWRST; // Activate UART
IE1 |= URXIE1 + UTXIE1; // Activate UART-Interrupts
IFG2 &= ~UTXIFG1; // Clear Interrupt Flags
}
Dann habe ich mir Breakpoints in die beiden Interrupts gesetzt:
#pragma vector=USART1TX_VECTOR
__interrupt void USART1_TX(void)
{
TXBUF1 = 0xFF;
}
#pragma vector=USART1RX_VECTOR
__interrupt void USART1_RX(void)
{
unsigned short test = RXBUF1;
}
Aber es wird nie ein Breakpoint erreicht.
Nun frage ich mich die ganze Zeit, ob die UART denn wirklich läuft oder
ob es da Probleme zum Beispiel mit dem Oszillator geben könnte, aber mir
fällt keine Möglichkeit zum testen ein...
Das Experimenters Board hat ja bereits eine DSUB9-Buchse drauf. Deswegen
gehe ich mal davon aus, dass ich keine Pegelwandler benötige.
Als Kabel benutze ich das beim STK500 mitgelieferte Kabel.
Wenn ich da mal die Durchgänge prüfe, dann komme ich auf folgendes
Ergebnis (eigene Nummerierung):
(Buchsen-Seite) (Stecker-Seite)
/----------\ /-----------\
/ 0 1 2 3 \ / 3 2 1 0 \
/ 4 5 6 7 8 \ / 8 7 6 5 4 \
----------------- -------------------
In dieser PDF (slau213a.pdf) findet ihr am Ende einen
Schaltplan des Boards: http://focus.ti.com/lit/ug/slau213a/slau213a.pdf
Vielleicht machen wir erstmal hier Pause, da ich zum Senden vom PC das
.NET Framework benutze und hoffe, dass es da eigentlich keine Fehler
geben sollte...
Ich hoffe, dass ich einige Leute finden, die mir auf die Sprünge helfen
können :-)
Ciao,
Eroli
EDIT: Vielleicht noch ein kleiner Hinweis:
Der RealTimer wird zum Beispiel so initialisiert und läuft dabei
sekündlich:
void initBasicTimer(void) // Initialize basic timer
{
// Basic timer setup
// Set ticker to 32768/(256*128) = 1 (One Interrupt per second)
// Enable BT interrupt
BTCTL = BT_fCLK2_DIV128 | BT_fCLK2_ACLK_DIV256;
IE2 |= BTIE;
}
Da dort die ACLK benutzt wird, habe ich versucht die ACLK auch für den
UART zu benutzen und deswegen die Codevorlage abgeändert und SSEL1
benutzt (in der Codevorlage wurde SSEL0 benutzt, ABER im Kommentar stand
auch ACLK. Dies passt laut ApplicationNotes aber nicht zusammen - oder
etwa doch???)
EDIT: Für die Aufmerksamen: Verzeiht mir, wenn ich die Frage in einem anderem Forum ebenfalls gestellt habe, aber es ist zeitlich leider etwas knapp bei mir...