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?