USART per ISR

Gast #2152095
Lesenswert?

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
Gast #2152102
Lesenswert?

Etwas mehr vom Code wäre gut, da ich glaube, der Fehler sitzt etwas vor 
diesem Ausschnitt, oder ganz woanders.

Übrigens, über welchen Controller reden wir hier ? ATmega8 ?
Je nach Modell sind die Registernamen anders.
Gast #2152105
Lesenswert?

>warning: 'USART_RXC_vect' appears to be a misspelled signal handler

Mmmh. Und nu? Sollen wir einen Gegen-Warnungstanz aufführen, oder was?
Korrigiere doch einfach den Fehler. Oder schreib', was das Problem ist.

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