このコードを何日も使用していますが、割り込みがトリガーされない理由がわかりません。ロジック アナライザーでプローブを使用したため、データが正常に送信されていることがわかります。また、UART で正常に送信できるため、ボー レートも正しいです。
この時点で私は迷子になり、データシートを何度も読みましたが、問題がわかりません。相対的なコードのみを含めようとしますが、私のプロジェクトでどのように動作するかを確認できるようにします。
このコードに問題がある場合はお知らせください。
ありがとうございました!
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);
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 割り込みハンドラーのスニペット:
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++;
}
}