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

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