Hola chicos, estoy intentando hacer funcionar el uart en el dspic, pero no logro hacer funcionar las interrupciones, pero no lo consigo y no sé qué es lo que estoy haciendo mal, así que agradecería cualquier ayuda.
Este es mi user.c
void InitApp(void)
{
/* Setup analog functionality and port direction */
PORTA = 0x0000;
LATA = 0x0000;
TRISA = 0x0000;
PORTB = 0x0000;
LATB = 0x0000;
TRISB = 0x0000;
PORTC = 0x0000;
LATC = 0x0000;
TRISC = 0x0000;
PORTD = 0x0000;
LATD = 0x0000;
TRISD = 0x0000;
ADPCFG = 0xFFFF; // Todos digitales
// UART1
// 115200bd
// TRANSMISIÓN
U1MODEbits.USIDL = 1; // Descontinua en modo idle
U1MODEbits.ALTIO = 0; // UXTX
U1MODEbits.WAKE = 0; // Wakeup disabled
U1MODEbits.LPBACK = 0; // ---------------
U1MODEbits.ABAUD = 0; // Detección baudios por el RX
U1MODEbits.PDSEL = 0; // 8bits sin paridad
U1MODEbits.STSEL = 0; // 1bit de parada
// RECEPCIÓN
U1STAbits.UTXISEL = 0; // Deshabilita interrupciones en el envio datos
U1STAbits.URXISEL = 0b00; // Interrupción cuando se recibe un caracter completo
U1BRG = 10; // 115200
IPC2bits.U1RXIP = 7; // Máxima prioridad
U1MODEbits.UARTEN = 1; // Habilita UART
U1STAbits.UTXEN = 1; // Habilita la transmisión
//IFS0bits.u1
// INTERRUPCIONES
INTCON1bits.NSTDIS = 1; // Habilitamos el anidamiento de interrupciones
}
Y este mi interrupts.c
void __attribute__((interrupt, auto_psv)) _U1RXInterrupt(void) {
asm("NOP");
}
Para simular la recepción del mensaje, estoy enviando un estímulo a
U1RXREG pero no se activa la interrupción, también hice un pool (no sé si ese es el termino adecuado) en el main de la bandera que se debería levantar, pero no lo hace.
Saludos y gracias de antemano.