Problem mit Uart Receive Interrupt

Gast #2188924
Lesenswert?
• ▲
▼
Hallo,

Ich hab gerade angefangen mit dem Thema µC und bin dabei mein erstes 
Projekt zu realiseren. Es soll eine RGB Led über den PC gesteuert 
werden.
Dazu benutze ich die UART Library von Peter Fleury. Als µC benutze ich 
einen Atmega8.

Mein Problem ist, wenn ich folgende Zeilen einfüge:

ISR(USART_RXC_vect)
{
  //tue etwas
}

Schreibt kommt beim compilieren der Fehler

PFAD/uart.c:248: multiple definition of `__vector_11'
PFAD/befehl_auswerten_test.c:460: first defined here



in "uart.c" Zeile 248 steht:

SIGNAL(UART0_RECEIVE_INTERRUPT)
/*********************************************************************** 
**
Function: UART Receive Complete interrupt
Purpose:  called when the UART has received a character
************************************************************************ 
**/
{
    unsigned char tmphead;
    unsigned char data;
    unsigned char usr;
    unsigned char lastRxError;


    /* read UART status register and UART data register */
    usr  = UART0_STATUS;
    data = UART0_DATA;

usw
usw

}

und in "befehl_auswerten_test.c" Zeile 460 steht:

ISR(USART_RXC_vect)
{
  //tue etwas
}


Ich hoffe mir kann jemand erklären wie ich es hinbekomme auf das 
Interrupt zu reagieren.

Danke im Voraus
Gast #2189276
Lesenswert?
• ▲
▼
Okay dann habe ich etwas grundlegendes nicht verstanden.
Aber wie kann ich jetzt auf das Interrupt reagieren?
Anscheinend wurde es in der Library von Peter Fleury ja schon behandelt, 
aber ich blick nicht ganz durch wie das Interrupt weiterverarbeitet 
wird. Also der ganze Code sieht so aus:

SIGNAL(UART0_RECEIVE_INTERRUPT)
/*********************************************************************** 
**
Function: UART Receive Complete interrupt
Purpose:  called when the UART has received a character
************************************************************************ 
**/
{
    unsigned char tmphead;
    unsigned char data;
    unsigned char usr;
    unsigned char lastRxError;


    /* read UART status register and UART data register */
    usr  = UART0_STATUS;
    data = UART0_DATA;

    /* */
#if defined( AT90_UART )
    lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
#elif defined( ATMEGA_USART )
    lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
#elif defined( ATMEGA_USART0 )
    lastRxError = (usr & (_BV(FE0)|_BV(DOR0)) );
#elif defined ( ATMEGA_UART )
    lastRxError = (usr & (_BV(FE)|_BV(DOR)) );
#endif

    /* calculate buffer index */
    tmphead = ( UART_RxHead + 1) & UART_RX_BUFFER_MASK;

    if ( tmphead == UART_RxTail ) {
        /* error: receive buffer overflow */
        lastRxError = UART_BUFFER_OVERFLOW >> 8;
    }else{
        /* store new index */
        UART_RxHead = tmphead;
        /* store received data in buffer */
        UART_RxBuf[tmphead] = data;
    }
    UART_LastRxError = lastRxError;
}
#2189374
Lesenswert?
• ▲
▼
Thomas schrieb:
> Aber wie kann ich jetzt auf das Interrupt reagieren?

Direkt eigentlich gar nicht. Du rufst die entsprechende GetChar-Funktion 
(keine Ahnung, wie die bei Fleury konkret heißt) auf, und bekommst ein 
entsprechendes Ergebnis geliefert. Entweder das nächste empfangene 
Zeichen, oder die Info, dass kein Zeichen im Empfangspuffer ist, oder 
auch die Info, dass es beim Empfang einen Fehler gab.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.