Rx UART activación de interrupción en PIC24F

1

Estoy tratando de recibir datos a un PIC24FJ256DA210 desde otro dispositivo utilizando la comunicación UART.

Configuré el UART como se describe a continuación:

void InitUART(void)
{
    uint32_t baudRate = 312500;
    int brg = FCY/(16*baudRate)-1;

     /* Assign UART 1 signal onto pin 4 of PortF (RP10) using PPS */
    TRISFbits.TRISF4 = 1;
    __builtin_write_OSCCONL(OSCCON&0xbf); // clear bit to allow re-map
    RPINR18bits.U1RXR = 10; //Assign U1RX to RP10
    __builtin_write_OSCCONL(OSCCON | 0x40); // lock pin re-map

    CloseUART1(); //disable UART if enabled previously

    /*Enable UART interrupts*/
    IEC0bits.U1RXIE = 1; // interrupt on reception allowed
    IEC0bits.U1TXIE = 0; // no interrupt on transmition
    IEC4bits.U1ERIE = 1; // interrupts on errors allowed
    IPC2bits.U1RXIP = 5; // interrupt level of reception
    IPC16bits.U1ERIP = 6; // interrupt level on errors
    U1STAbits.URXISEL = 0; // interrupt when any character is received

    /* Initialize UART1 */
    U1BRG = brg;
    U1MODEbits.STSEL = 0; // 1 stop bit
    U1MODEbits.PDSEL = 0; //8 bit data, no parity
    U1MODEbits.BRGH = 0; //Standard speed mode
    U1MODEbits.RXINV = 0; //UxRX idle state is '1'
    U1MODEbits.ABAUD = 0; //Auto-Baud disabled
    U1MODEbits.LPBACK = 0; //Loopback disabled
    U1MODEbits.WAKE = 1; //Wake up on start bit detect
    U1MODEbits.UEN = 0; //UTx and URx enabled
    U1MODEbits.IREN = 0; //IrDA disabled
    U1STAbits.ADDEN = 0; //Adress detec mode disabled
    U1RX_Clear_Intr_Status_Bit; //clear RX interrupt falg
    U1MODEbits.UARTEN = 1; //UART enable
} 

Mi problema es que cada vez que ejecuto la depuración (estoy trabajando con MPLAB X IDE), la Interrupción de RX U1 sigue activándose aunque no se haya enviado nada al PIC.

¿Hice algo mal al inicializar UART? Puede ser un error tonto pero realmente no puedo resolverlo.

Gracias.

    
pregunta Elode

1 respuesta

1

Eso es un comportamiento normal. Tan pronto como habilite la interrupción de recepción, se activará porque se establecerá el indicador de error de saturación en el registro de estado.

Deberá borrar este indicador de error en el software antes de que reciba más interrupciones de RX.

Vea la hoja de datos para más detalles: enlace

    
respondido por el Mike of SST

Lea otras preguntas en las etiquetas