Que tal como les va, estoy haciendo unas pruebas con el pic24hj128gp502, ya logro transmitir datos por ambas uart, el tema es que no puedo recibir de ninguna si utilizo la interrupcion
void UART2Init()
{
U2MODEbits.UARTEN=1;
U2MODEbits.USIDL=1; // Al pasar al modo Sleep, apagar modulo.
U2MODEbits.IREN=0; // Codificacion/decodificacion IrDA deshabilitado.
U2MODEbits.RTSMD=1; // RTS en modo simple.
U2MODEbits.UEN=0b00; // Tx/Rx habilitado, CTS/RTS deshabilitados.
U2MODEbits.WAKE=0; // Wake-up deshabilitado.
U2MODEbits.LPBACK=0; // Modo LoopBack deshabilitado.
U2MODEbits.ABAUD=0; // Auto-Baud rate deshabilitado.
U2MODEbits.URXINV=1; // Modo normal de pin RX, en reposo = 0.
U2MODEbits.BRGH=0; // Mode seleccionado en define.-
U2MODEbits.PDSEL=0b00; // 8 bits- sin paridad.
U2MODEbits.STSEL=0; // 1 bit de Stop.
U2STAbits.UTXISEL1=1; // Interrupcion por transimision no usada.
U2STAbits.UTXISEL0=1; // Interrupcion por transimision no usada.
U2STAbits.UTXINV=0; // Pin Tx en reposo igual a 1.
U2STAbits.UTXBRK=0; // Break deshabilitado.
U2STAbits.UTXEN=1;
U2STAbits.URXISEL=0b01; // Interrumpir cuando se recibe un caracter.
U2STAbits.ADDEN=0; // Auto-Address deshabilitado.
U2STAbits.OERR=0; // Borramos bits de error por overflow.
U2BRG = BAUDRATEREG2; // Baud Rate determinado en define.
IFS1bits.U2RXIF = 0;
}
void init_all_interrupts(void)
{
INTCON1=0x0000;
INTCON2=0x0000;
//SPI 1
IEC0bits.SPI1IE = 0;
IFS0bits.SPI1IF = 0;
//UART1 RX
IEC0bits.U1RXIE = 1;
IPC2bits.U1RXIP=0b111; ////PRIORIDAD
IFS0bits.U1RXIF = 0;
//UART2 RX // HABILITA INTERRUPT
IEC1bits.U2RXIE=1; //interrupcion
IPC7bits.U2RXIP=0b111; //PRIORIDAD
IFS1bits.U2RXIF=0;
return;
}
void __attribute__((__interrupt__, __shadow__,no_auto_psv)) _U2RXInterrupt(void)
{
unsigned int timeout=0;
unsigned char i=0;
//UART1 RX // INHABILITA LA UART1
IEC0bits.U1RXIE = 0;
IFS0bits.U1RXIF = 0;
/* Read the receive buffer till atleast one or more character can be read */
while (1)
{
timeout=1000;
while(!U2STAbits.URXDA)
{
timeout--;
if (timeout == 0) break;
}
Receiveddata[i] = U2RXREG;
i++;
if (timeout == 0) break;
}
IFS1bits.U2RXIF = 0;
flagrx_2 = 1;
//UART1 RX // REHABILITA LA UART1
IEC0bits.U1RXIE = 1;
//IFS0bits.U1RXIF = 0;
}
Estoy trabajando con un cristal de 8MHZ y a 9600 baudios.
Alguien me podria decir donde estoy errando.
saludos y muchas gracias