Tengo un problema con mi atxmega128a1. Escribí un código usando 3 interfaces usart. El código de inicio es el mismo, pero solo dos de los puertos funcionan bien. El problema es con USARTD0 (y probé con USARTD1, pero también falla) El síntoma es el siguiente: el primer USARTD0 ingresó a 9600bps, y después de algunas transmisiones, debe iniciarse nuevamente a 115200bps. Después de configurar nuevamente el nuevo baud, deja de recibir. Puedo enviar por TX, pero USART_RXCIF_bm nunca se configuró. Es tan extraño, porque el mismo código funciona bien con otros puertos. He revisado mi código y cableado muchas veces. ¿Alguien tiene alguna idea? Cavo en erratas, funciones alternativas, etc. pero no he encontrado ninguna útil todavía. Gracias de antemano, y perdón por mi áspero inglés.
void uart_init_d0(long baudrate){
usart_rs232_options_t options = {
.baudrate = baudrate,
.charlength = USART_CHSIZE_8BIT_gc,
.paritytype = USART_PMODE_DISABLED_gc,
.stopbits = 0 // 0=>1 stop bit
};
PORTD.DIRCLR = PIN2_bm; // (RXD1) input
PORTD.DIRSET = PIN3_bm; // (TXD1) output
sysclk_enable_module(SYSCLK_PORT_D, PR_USART0_bm);
usart_init_rs232(USART_BAY2, &options);
}