Soy un poco nuevo en pic32 y he estado tratando de conseguir que uart ingrese el ISR cuando recibe un byte en el pin Rx. La configuración de mi uart funciona bien tanto para enviar como para recibir (si uso el bloqueo para leer el byte recibido). Pero quiero usar interrupciones para lograr una sensación más "en tiempo real" (ya que la foto está haciendo un montón de otras cosas).
Este es mi código para configurar la interrupción uart y Rx:
INTCONbits.MVEC = 1;
// Peripheral Pin Select
U1RXRbits.U1RXR = 2; // Set PA4 to RX
RPB15Rbits.RPB15R = 1; // Set RB15 to TX
// UART1 Configuration
U1MODE = 0;
U1MODEbits.PDSEL = 0;
U1MODEbits.STSEL = 0;
U1BRG = Baud2BRG(9600);
// Configure UART1 RX Interrupt
IEC1bits.U1RXIE = 0; // Disable interrupt
IFS1bits.U1RXIF = 0; // Clear the interrupt flag
IPC8CLR = 0x001f; // Clear priority vector
IPC8bits.U1IP = 7; // Set priority
IPC8bits.U1IS = 3; // Set sub priority
IEC1bits.U1RXIE = 1; // Enable the interrupt
// Enable UART1
U1STAbits.UTXEN = 1;
U1STAbits.URXEN = 1;
U1MODEbits.ON = 1;
Y para manejar la interrupción:
extern "C" {
void __ISR( _UART1_VECTOR, ipl7SOFT) uartRxHandler(void)
{
IEC1bits.U1RXIE = 0; // Disable the interrupt
Serial1Tx( "works");
IFS1bits.U1RXIF = 0; // Clear the interrupt flag
IEC1bits.U1RXIE = 1; // Enable the interrupt
}
}
Acabo de enviar un simple mensaje para ver si alguna vez llega al ISR. No puedo entender por qué la interrupción nunca se activa. Gracias por cualquier ayuda.
Editar: estoy usando MPLAB X con el compilador XC32 y un PICKit3 para programar