Явного описания нигде не нашёл. Видимо считается "само-сабой разумеющимся". Тем не менее для меня это не "само-сабой".
Исходя из архитектуры, а также из того, что я вижу под J-LINKом в прерывании IRQ разрешено прерывание FIQ - я делаю вывод о том, что прерывание FIQ должны коректно вызываться/обрабатываться как из main так и из IRQ прерываний. Тем не менее у меня какие-то неувязки. Почему-то время обработки прерывания IRQ значительно завышено. Короче что-то я не так понимаю.
Работаю под IAR. В IAR прерывание FIQ объявляется: __fiq __arm void FIQ_Handler()
IRQ прерывание объявляется __arm __irq static void ShowActive(void)
Прерывание FIQ таймерное. Вызывается и завершается коректно. Никаких хомутов не вижу. Прерывание IRQ совтовое. Вызывается из FIQ корректно - это я чётко вижу по осциллографу. Вызывается типа так: if(Flag.EnShow) VICSoftInt = (1<<SHOW_INT); Сбрасывается так: VICSoftIntClear = (1<<SHOW_INT); VICVectAddr = 0;
Продолжительность его слишком велика. Я сейчас с него выкинул почти всё. Оно должно обрабатываться 1-2 прерывания FIQ, но на самом деле обрабатывается значительно больше и завершение связано каким-то образом с прерыванием FIQ.
Буду сам копаться, но может кто подскажет что?
|