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);
}
}
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.
Fragen über Fragen: - Welcher Prozessor ist das? - Was passiert in den verschiedenen benutzten Funktionen? (z.B. Read1USART(); puts1USART(Msg); Write1USART(rx);) - Wo sind die Variablen deklariert? - ... und formatier den Code mal richtig:
1 | [c]C-Code[/c] |
Gruß Dietrich
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,
Danke für die Tipps. Und verzeiht bitte diese ungenauen Angaben bezüglich meines Problems. Bin neu hier und werde mich bessern :) Mein Problem war, dass ich den Timerinterrupt aktiviert hatte. :) Das Program funktioniert jetzt :)
Stefan U. schrieb: > Der Delay in der ISR wirkt > deplatziert. Ein Delay wirkt in einer ISR nicht nur deplaziert, es ist deplaziert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.