Ich habe seit Tagen mit diesem Code gearbeitet und kann nicht herausfinden, warum meine Interrupts nicht ausgelöst werden. Ich weiß, dass Daten erfolgreich durchkommen, weil ich eine Sonde auf einem Logikanalysator verwendet habe, auch meine Baudrate ist korrekt, da ich mit UART erfolgreich übertragen kann.Keine Interrupts werden in UART empfangen empfangen auf PIC18F2680
An diesem Punkt bin ich verloren, ich habe das Datenblatt immer und immer wieder gelesen und kann mein Problem nicht herausfinden. Ich werde versuchen, nur den relativen Code einzubeziehen, aber genug, dass Sie sehen können, wie die Dinge in meinem Projekt funktionieren.
Bitte lassen Sie mich wissen, wenn Sie Probleme mit diesem Code sehen.
Vielen Dank!
-Code-Schnipsel von main.c:
// USART RX interrupt priority
IPR1bits.RCIP = 0;
IPR1bits.TXIP = 0;
// configure the hardware USART device
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_LOW, 14);
-Code-Schnipsel aus interrupts.c
//----------------------------------------------------------------------------
// Low priority interrupt routine
// this parcels out interrupts to individual handlers
#pragma code
#pragma interruptlow InterruptHandlerLow
// This works the same way as the "High" interrupt handler
void InterruptHandlerLow() {
// check to see if we have an interrupt on USART RX
if (PIR1bits.RCIF) {
PIR1bits.RCIF = 0; //clear interrupt flag
uart_recv_int_handler();
}
// check to see if we have an interrupt on USART TX
if (PIR1bits.TXIF && PIE1bits.TXIE) {
// cannot clear TXIF, this is unique to USART TX
// so just call the handler
uart_tx_int_handler();
}
}
UART RX-Interrupt-Handler-Schnipsel:
void uart_recv_int_handler() {
int msgLen;
//if (DataRdyUSART()) {
uc_ptr->buffer[uc_ptr->buflen] = RCREG;
//uc_ptr->buffer[uc_ptr->buflen] = ReadUSART();
uc_ptr->buflen++;
}
}
haben Sie den UART nur 'Polling' versucht? Was passiert, erhalten Zeichen in Ordnung? – gbulmer
Ich habe das noch nicht probiert, ich werde es morgen Nachmittag testen können und euch wissen lassen, wie das ging. – J2N
Sie zeigen die globalen Interrupt-Aktivierungsflags nicht an und erwähnen sie nicht. Abschnitt 9 des Datenblattes gibt an, dass für die Standard-Interrupt-Strategie "INTCON <6>" das 'PEIE'-Bit ist, das/ alle peripheren Interruptquellen deaktiviert.' INTCON <7> ' ist das' GIE'-Bit, das aktiviert/deaktiviert Alle unterbrechen Quellen. " Wenn Sie die Prioritätsstufen für Ihre Interrupts ('IPEN') aktiviert haben, müssen Sie' GIEH' und 'GIEL' einstellen. –