Forum: Mikrocontroller und Digitale Elektronik [MSP430] UART-Interrupt wird nicht angesprungen


von Kenner der Mikrocontroller (Gast)


Lesenswert?

Hallo!

Der UART-Interrupt wird nicht angesprungen.

Das UART wird so initialisiert:
1
void uart0::init()
2
{
3
  P3DIR &= ~BIT5;       // set P3.5/URXD0 to input
4
  P3DIR |=  BIT4;       // set P3.4/UTXD0 to output
5
  P3SEL |=  BIT5|BIT4;  // set P3.5/URXD0 and P3.4/UTXD0 to peripheral
6
  U0CTL |= SWRST;       // enable software reset
7
  ME1 |= UTXE0 + URXE0; // switch UART on
8
  UCTL0 |= CHAR;        // 8N1
9
  UTCTL0 |= SSEL1;      // use SMCLK
10
  set_baudrate(9600);   // 9600 is a good default;
11
  UCTL0 &= ~SWRST;      // disable software reset
12
  IE1 |= URXIE0;        // enable rx-interrupt
13
}
14
15
void uart0::set_baudrate(int baudrate)
16
{
17
  U0CTL |= SWRST; // enable software reset
18
  int ubr = F_CPU/baudrate;
19
  U0BR0 = ubr & 0x00FF;
20
  U0BR1 = (ubr & 0xFF00) >> 8;
21
  U0MCTL = (int)(((float)F_CPU/(float)baudrate-(float)ubr)*8.0+0.5);
22
  UCTL0 &= ~SWRST; // disable software reset
23
}

So kann ich Zeichen vom UART lesen und Ausgeben:
1
while(1)
2
{
3
  while(!(IFG1 & URXIFG0)); // ready?
4
  lcd_puc(RXBUF0);
5
}

So bleibt das LCD leider leer:
1
interrupt (UART0RX_VECTOR) usart0_rx(void)
2
{
3
  lcd_putc(RXBUF0);
4
}

Woran liegt das?

von Jörg S. (Gast)


Lesenswert?

Globale Interrupts sind eingeschaltet?

von Kenner der Mikrocontroller (Gast)


Lesenswert?

Ups, das _BIS_SR(GIE) hatte ich vergessen. Vielen Dank! Jetzt 
funktioniert es.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.