UART Interrupt

OP #4566682
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe einige Problemme bei den Interrupts mit UART. Ich benötige ein 
Empfangsinterrupt. Mein Problem ist jedoch, dass das Interrupt die ganze 
Zeit ausgelöst wird, auch wenn nichts empfangen wird. Kann mir jemand 
weiterhelfen?

Hier ists mein Code:

int main(void)
{
    init();

    UART1Config = USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE 
&   USART_EIGHT_BIT & USART_BRGH_HIGH ;
    baud = 12;
    Open1USART(UART1Config,baud);

    RC1IF = 0; //reset RX pin flag
    RC1IP = 0; //Not high priority
    RC1IE = 1; //Enable RX interrupt
    PEIE = 1; //Enable pheripheral interrupt (serial port is a 
pheripheral)
    GIE=1;    //enable interrupts

    while(1)
    {

    }
}

void service (void)
{
    PORTE=255;

    if(PIR1bits.RCIF == 1)
    {
        rx = Read1USART();
        puts1USART(Msg);
        Write1USART(rx);
        RC1IF = 0; // clear rx flag
        PORTE=0;
        Delay100TCYx(150);
    }
}
Gast #4566691
Lesenswert?
• ▲
▼
Ich kenne deinen µC nicht, allerdings bin ich es gewohnt, dass amn in 
der ISR das Interrupt-Flag bzw. Received-Flag nicht zurücksetzten soll. 
Das machen die Controller von selbst. Der Delay in der ISR wirkt 
deplatziert.
#4566702
Lesenswert?
• ▲
▼
Stefan U. schrieb:
> Ich kenne deinen µC nicht, allerdings bin ich es gewohnt, dass amn in
> der ISR das Interrupt-Flag bzw. Received-Flag nicht zurücksetzten soll.
> Das machen die Controller von selbst.

denke ich auch

in der ISR wird doch normalerweise der zugehörige IRQ automatisch 
gelöscht wenn sie behandelt wurde, ich tippe mal durch dein "löschen" 
setzt du einen neuen IRQ manuell.

Konstanty K. schrieb:
> Mein Problem ist jedoch, dass das Interrupt die ganze
> Zeit ausgelöst wird,

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