Sto implementando uno schema di comunicazione uart daisy-chain con un Cortex M4. Quando un nodo riceve un byte su un UART, viene generato un interrupt ( RXNE
) e il byte viene sovrascritto un altro UART - poiché utilizzo un buffer di invio e ricezione, questo inserisce il byte nel buffer di invio e abilita l'interrupt TXE
che dovrebbe essere attivato successivamente.
Questo significa per ogni byte ricevuto, vengono attivati due interrupt.
Ora entrambi gli UART possono ricevere e trasmettere, ed è assolutamente possibile che entrambi gli UART ricevano un byte contemporaneamente - ora entrambi avranno un RXNE
interrompe e attiva un interrupt TXE
sull'altro UART.
Ma solo un ISR può essere elaborato allo stesso tempo: cosa succede con gli altri?
Esiste uno stack di interrupt che può essere pieno o gli interrupt vengono semplicemente chiamati finché tutti i bit di interrupt corrispondenti non vengono cancellati?
Il fatto è che la mia applicazione tende a bloccarsi nella situazione descritta sopra e (con più byte ricevuti). Tuttavia, non quando gli UART sono impostati su una velocità inferiore (questo sembra controintuitivo) o quando è collegato un solo lato.