Когда вы вводите обработчик FIQ, ядро ARM автоматически отключает дальнейшие прерывания, как FIQ, так и IRQ, устанавливая биты «I» и «F» в CPSR. Это дает вам ощущение, что ничто не может опередить FIQ. Но SW может изменить это поведение! Поэтому я думаю, что какая-то часть вашего кода касается CPSR и сбрасывает бит «I». И, следовательно, прерывания IRQ могут срабатывать даже во время работы вашего FIQ.
Чтобы добавить к вышеприведенному объяснению, причина, по которой FIQ кажутся особенными, заключается в том, что когда вводится обработчик IRQ, устанавливается только бит «I», отключая только дополнительные IRQ. Бит «F» не установлен, и, следовательно, последующие FIQ могут прерывать работающий обработчик IRQ без необходимости вмешательства SW.