Estoy implementando un esquema de comunicación en cadena de uart con un Cortex M4.
Cuando un nodo recibe un byte sobre un UART, se genera una interrupción ( RXNE
) y el byte se escribe sobre otro UART, ya que uso un búfer de envío y recepción, esto coloca el byte en el búfer de envío y habilita el TXE
de interrupción que debe activarse posteriormente.
Esto significa que por cada byte recibido, se activan dos interrupciones.
Ahora ambas UART pueden recibir y transmitir, y es muy posible que ambas UART reciban un byte al mismo tiempo; ahora ambas recibirán una interrupción RXNE
y activarán una interrupción TXE
en la otra UART.
Pero solo se puede procesar un ISR al mismo tiempo, ¿qué sucede con los otros?
¿Hay una pila de interrupciones que se llene o que se interrumpa simplemente con la llamada hasta que se borren todos los bits de interrupción correspondientes?
El problema es que mi aplicación tiende a bloquearse en la situación descrita anteriormente (con múltiples bytes recibidos). Sin embargo, no cuando los UART se configuran a una velocidad más baja (esto parece contrario a la intuición) o cuando solo hay un lado conectado.