UART am MSP430 bekommt kein tx-ready flag

Gast #1894294
Lesenswert?

Hallo,

ich verwende den Beispielcode von ti (msp430x24x_uscia0_uart_01_115k.c) 
um meine UART am MSP zu testen. Beim debugen sehe ich jedoch, dass er 
die ganze Zeit in der while-Schleife hängen bleibt und somit wartet bis 
der tx-buffer ready ist. Ich habe mir das Datenblatt durchgeschaut, 
jedoch wüsste ich nicht was ich nun noch ändern sollte, damit er endlich 
sein ready-flag erhält. Ich hoffe mir kann hier jemand weiterhelfen.

1
{
2
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
3
  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)                                     
4
  {  
5
    while(1);                               // If calibration constants erased
6
                                            // do not load, trap CPU!!
7
  }   
8
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
9
  DCOCTL = CALDCO_1MHZ;
10
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
11
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
12
  UCA0BR0 = 8;                              // 1MHz 115200
13
  UCA0BR1 = 0;                              // 1MHz 115200
14
  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
15
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
16
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
17

18
  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
19

20
  
21
while(1)
22
{
23
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
24
    UCA0TXBUF = zeichen++;                         // TX -> RXed character
25
}
Gast #1894828
Lesenswert?

@ noips:
Ich nutze den "Code Composer Essentieals"

@ Stefan:
Sorry, stimmt. Hatte den Code einfach vom Beispiel hier rein kopiert. 
Den Teil mit "LPM0_bits +" habe ich in meinem Code raus gelöscht.

Zur korrekten Angabe hier noch mal der richtige Code (bei dem ich im 
debug-Modus in der "while (!(IFG2&UCA0TXIFG));"-Schleife hängen bleibe):
1
{
2
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
3
  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)                                     
4
  {  
5
    while(1);                               // If calibration constants erased
6
                                            // do not load, trap CPU!!
7
  }   
8
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
9
  DCOCTL = CALDCO_1MHZ;
10
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
11
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
12
  UCA0BR0 = 8;                              // 1MHz 115200
13
  UCA0BR1 = 0;                              // 1MHz 115200
14
  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
15
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
16
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
17

18
  __bis_SR_register(GIE);       // Enter LPM0, interrupts enabled
19

20
  
21
while(1)
22
{
23
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
24
    UCA0TXBUF = zeichen++;                         // TX -> RXed character
25
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren