Open
Description
I stumbled over the following situation in the context of the refactoring of the timer module to use our new daisy chain module. Consider this situation:
- The timer fires and therefore requests an interrupt
- The CPU cannot handle it, yet, because it is currently in an ISR of that very timer. That ISR has the following task: deleting the ISR address of the timer (with the intention to stop the timer).
- The Daisy chain module is latching the request
- In the meantime, the ISR sucessfully sets the timer's ISR address register to zero (with the intention to stop the timer). That means: The timer now does not have any ISR address to provide any more. (Because the register was deleted.)
- The CPU now has time again to handle interrupts
- The Daisy chain module remembers, that there is a latched interrupt request from the timer module
- The handshake between the Daisy chain module and the CPU takes place
- The Daisy chain module pulls
this_grant_n_o
to zero - 💥 💥 💥 The timer module puts the ISR address
0x0000
on the data bus 💣 💣 💣