Вопрос

Здравствуйте, я сейчас работаю с AT91SAM7X256, работающим на «Bare Metal». Я тщательно прочитал таблицу данных, а также руководство по архитектуре, с учетом того, что я пошел с выводом, что FIQ является более высоким приоритетом, чем IRQ, поэтому FIQ не должны быть преданы IRQS

Однако на практике я замечаю, что IRQS приостанавливает выполнение моего обработчика FIQ, хотя я не касаюсь F -бита в CPSR. Неправильно ли предположить, что FIQ не следует приостановить на обслуживание IRQ?

Что мне нужно сделать, чтобы убедиться, что моя процедура обслуживания FIQ не прерывается?

Спасибо

Это было полезно?

Решение

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

Чтобы добавить к приведенному выше объяснению, причина, по которой FIQ кажутся особенной, заключается в том, что когда обработчик IRQ вводится только в бит «я», устанавливается там, отключив только дальнейшие IRQ. Бит F 'не установлен, и, следовательно, дальнейшие FIQ могут прервать работающий обработчик IRQ без необходимости вмешательства SW.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top