Hallo,
ich gehe gerade die "UART über Interrupts" aus dem Tutorial durch,
bekomme aber leider noch zwei Warnmeldungen...
warning: 'USART_RXC_vect' appears to be a misspelled signal handler
1 | // UART RX complete interrupt
|
2 |
|
3 | // hier werden Daten vom PC empfangen und in einem String zwischengespeichert
|
4 | // Wird ein Stringterminator empfangen, wird ein Flag gesetzt, welches dem
|
5 | // Hauptprogramm den kompletten Empfang signalisiert
|
6 |
|
7 | ISR(USART1_RXC_vect) {
|
8 |
|
9 | static uint8_t uart_rx_cnt; // Zähler für empfangene Zeichen
|
10 | uint8_t data;
|
11 |
|
12 | // Daten auslesen, dadurch wird das Interruptflag gelöscht
|
13 | data = UDR1;
|
14 |
|
15 | // Ist Puffer frei für neue Daten?
|
16 | if (!uart_rx_flag) {
|
17 | // ja, ist Ende des Strings (RETURN) erreicht?
|
18 | if (data=='\r') {
|
19 | // ja, dann String terminieren
|
20 | uart_rx_buffer[uart_rx_cnt]=0;
|
21 | // Flag für 'Empfangspuffer voll' setzen
|
22 | uart_rx_flag=1;
|
23 | // Zähler zurücksetzen
|
24 | uart_rx_cnt=0;
|
25 | }
|
26 | else if (uart_rx_cnt<(uart_buffer_size-1)) {
|
27 | // Daten in Puffer speichern
|
28 | // aber durch if() Pufferüberlauf vermeiden
|
29 | uart_rx_buffer[uart_rx_cnt]=data;
|
30 | uart_rx_cnt++; // Zähler erhöhen
|
31 | }
|
32 | }
|
33 | }
|
34 | /*******************************************************************************************************/
|
35 | // UART TX data register empty interrupt
|
36 | // hier werden neue Daten in das UART-Senderegister geladen
|
37 |
|
38 | ISR(USART1_UDRE_vect) {
|
39 | // Zeiger auf Sendepuffer
|
40 | static char* uart_tx_p = uart_tx_buffer;
|
41 | uint8_t data;
|
42 |
|
43 | // zu sendendes Zeichen lesen,
|
44 | // Zeiger auf Sendepuffer erhöhen
|
45 | data = *uart_tx_p++;
|
46 |
|
47 | // Ende des nullterminierten Strings erreicht?
|
48 | if (data==0 ) {
|
49 | UCSR1B &= ~(1<<UDRIE1); // ja, dann UDRE Interrupt ausschalten
|
50 | uart_tx_p = uart_tx_buffer; // Pointer zurücksetzen
|
51 | uart_tx_flag = 1; // Flag setzen, Übertragung beeendet
|
52 | }
|
53 | else UDR1 = data; // nein, Daten senden
|
54 | }
|
Hat vielleicht jemand eine Idee, was da falsch sein könnte? Die zweite
ISR habe ich ja auf die selbe Art und Weise angeglichen...
Gruss, Basti