Hi,
ich habe einen XMega128A3 (eigentlich egal) und möchte an beide USART
Schnittstellen nutzen um Daten an zei Geräte zu schicken (LCD und PC).
Ich habe beide Schnittstellen initialisiert und sie funktionieren auch.
Jetzt ist nur die Frage wie ich die printf Routine in die beiden USARTs
umleiten kann.
Ich habe folgende Funktionen:
1 | int uart_putchar_PC (char c, FILE *stream)
|
2 | {
|
3 | if (c == '\n')
|
4 | uart_putchar_PC('\r',stream);
|
5 | loop_until_bit_is_set(USARTE1.STATUS, USART_DREIF_bp);
|
6 | USARTE1.DATA = c;
|
7 | return 0;
|
8 | }
|
9 |
|
10 |
|
11 | // ****************************************************************************
|
12 |
|
13 | int uart_putchar_LCD (char c, FILE *stream)
|
14 | {
|
15 | //Ausgabe des Zeichens
|
16 | USARTE0.DATA = c;
|
17 | loop_until_bit_is_set(USARTE0.STATUS, USART_DREIF_bp);
|
18 | return 0;
|
19 | }
|
Dann habe ich mir gedacht die Ausgabe über:
1 | void select_UART (uint8_t channel)
|
2 | {
|
3 | if (channel == PC) {fdevopen (uart_putchar_PC, NULL);}
|
4 | if (channel == LCD) {fdevopen (uart_putchar_LCD, NULL);}
|
5 | }
|
zu selektieren. Das klappt aber leider nicht, offensichtlich
kann ich eine einmal gewählte Ausgabe nicht überschreiben.
Kann mir jemand helfen?
Gruß
Knut