Content originally posted in LPCWare by Wouter on Thu Jan 10 07:50:45 MST 2013
Hmm, I would have expected that the DSB would have helped...
I'm not sure why adding a call in the ISR solves the issue, but adding this call does change the way the ISR exits:
If a call is made from the ISR, then on entering the ISR, LR is pushed onto the stack, and on exiting, LR is popped backed to the PC (POP {pc}).
If no call is made from the ISR, the LR does not have to be pushed onto the stack, and the ISR exits by branching to the value of LR (BX lr).
Perhaps updating the PC by stack takes some more time compared to a normal branch...