In short: in which cases can be a FIQ interrupt raised and __CyU3PFiqHandler called?
Today I observe strange firmware freeze. I connect JTAG to the my board and stop CPU. At the stack trace I see that code execution point is located in the __CyU3PFiqHandler handler. I looked to the it implementation in the cyu3entry_gcc.S and found that it is a simple infinity loop. Also next comment confuse me:
"The following exceptions are not expected to occur on this setup.
The handlers are left in place for completion."
And __CyU3PFiqHandler implementation:
.global __CyU3PFiqHandler __CyU3PFiqHandler: b __CyU3PFiqHandler
If I correctly understand, if Fast interrupt is happens, then all IRQ and FIQ interrupts is masked. In SDK code the FIQ interrupt handler never finishes, therefore system totally freezed.
And I don't understand what is cause of the FIQ interrupt.
Thanks for any help.
We do not register any FIQ in the firmware at all, and this is why the handler is an infinite loop. The FIQ is not expected to happen at all.
We use the Segger J-Link debugger often and have not seen this problem.
Are you using the original SDK libraries or somethingyou have compiled from the sources we provide?