Me gustaría saber qué pasaría si una Terminal Serial enviara una gran cantidad de datos a un PIC / AVR, por ejemplo, a través de una interrupción de USART, que luego fue interrumpida por una interrupción de mayor prioridad como un temporizador, lo que posponer la transferencia de datos. ¿Se perderían los datos? ¿O es que la Terminal Serial tiene un búfer antes de enviarlo, y se aferra a los datos hasta que volvamos a la interrupción de recepción?
Por ejemplo, estoy usando un atxmega128a1, y estoy usando esta interrupción para recibir bytes:
//interrupt to receive a byte
ISR(USARTC0_RXC_vect){ //ISR for when receive flag is set
if(FIFO_Put(&RxFIFO, USARTC0_DATA)){ //put data into receive FIFO
USARTC0_STATUS |= USART_RXCIF_bm; //write 1 to clear bit
}
}
Si envío una gran cantidad de bytes a través de un terminal serie a la vez, esta interrupción se activará muchas veces para recibir cada byte.
También tengo una interrupción de temporizador de una prioridad más alta que puede tardar mucho tiempo en completarse:
ISR(TCC0_OVF_vect){
AXISid n = X;
static BOOL cycle;
TimerAxisInterrupt(n, &cycle);
}
Para repetir, mi pregunta es si la interrupción de prioridad más alta ocurre durante una transferencia de recepción de datos grande, ¿se perderán datos?
Si es relevante: estoy enviando los datos de USART a través de rs232 usando un convertidor lógico max3232. Tengo las líneas de reconocimiento y las líneas RTS CTS en bucle, de modo que solo estoy usando las líneas Rx y Tx.