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;
}