Hola a todos, tengo un problema con la uart1 de un pic24f, resulta que el pic transmite bien (a traves de un max487) y para recibir utilizo la interrupcion y hasta aqui todo bien. Pero lo que recibo es basura.
A ver si alguien me puede dar una pista de por donde puedo buscar el error, llevo un buen rato buscando y no encuentro nada.
Pro cierto, al pin enable:¿deberia ponerle una pull-down? Esto ya funciona perfectamente en dos pic con CCS, pero en c30 se me atraganta
Esta es la interrupcion:
/* Interrupción por recepcion de uart1 */
void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void)
{
IFS0bits.U1RXIF = 0; //Ponemos a 0 el flag de la interrupcion de recepcion
rcvchar=0x00; // Inicializo carácter recibido
if(DataRdyUART1()){ // Si hay algo pendiente de recibir ...
rcvchar=ReadUART1(); // lo descargo y ...
putsUSBUSART(rcvchar); //para ver que recibimos
CDCTxService();
addcbuff(rcvchar); // lo añado al buffer
}
if(U1STAbits.OERR) U1STAbits.OERR=0;//si hay error de overflow es borrado
}
La configuracion de la interrupcion y del periferico:
AD1PCFGL = 0xffff; // todos los puertos digitales
TRISFbits.TRISF3 = 0; // RF3 configurado como salida
TRISCbits.TRISC14 = 0; // RC14 configurado como salida
TRISDbits.TRISD1 = 0; // PIN TX como salida
TRISDbits.TRISD2 = 1; // PIN RX como entrada
// Asignacion de pines remapeables para el uso de la uart
iPPSInput(IN_FN_PPS_U1RX,IN_PIN_PPS_RP23); // Asignamos el pin remapeable RP23 a UART1RX
iPPSOutput(OUT_PIN_PPS_RP24,OUT_FN_PPS_U1TX); // Asignamos el pin remapeable RP24 a UART1TX
/*Activamos la interrupcion por recepcion prioridad 7 UART1. */
ConfigIntUART1(UART_RX_INT_EN & UART_RX_INT_PR7 & UART_TX_INT_DIS);
OpenUART1(UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT &
UART_IrDA_DISABLE & UART_MODE_SIMPLEX & UART_UEN_00 &
UART_UXRX_IDLE_ZERO & UART_BRGH_FOUR , UART_IrDA_POL_INV_ZERO &
UART_SYNC_BREAK_DISABLED & UART_TX_ENABLE & UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS , BRGVAL);