arm7tdmi IRQ и приоритет FIQ - PullRequest
       48

arm7tdmi IRQ и приоритет FIQ

3 голосов
/ 18 февраля 2012

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

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

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

Спасибо тебе

1 Ответ

3 голосов
/ 18 февраля 2012

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

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

...