Путаница вложенных прерываний ARM 7

Я читал про классический микроконтроллер ARM 7. Есть два типа прерываний: IRQ и FIQ. FIQ позволяет быстрее обрабатывать прерывания и имеет более высокий приоритет, чем IRQ.

В нем говорится, что современные версии ARM имеют вложенные прерывания.

Означает ли это на самом деле, что ARM 7 может обрабатывать только 2 прерывания, назначенных MCU, например 2 прерывания по фронту от внешнего источника, и не более?

заранее спасибо


person Engineer999    schedule 22.02.2018    source источник
comment
так же, как и с любым другим процессором, включая текущие ветви, вы можете мультиплексировать одно прерывание на любое количество прерываний и иметь место для создания логики. Для этого используется какая-то форма контроллера прерывания.   -  person old_timer    schedule 22.02.2018
comment
ARM7 изначально не использовался / не обязательно использовался / ограничивался микроконтроллерами.   -  person old_timer    schedule 22.02.2018
comment
Взгляните на Raspberry Pi (на базе ARM11) и посмотрите, сколько прерываний у него есть на линии IRQ и FIQ ... явно больше 2.   -  person old_timer    schedule 22.02.2018
comment
x86 долгое время имел только одно прерывание, как и многие другие процессоры, управление прерываниями осуществлялось извне. (не считая NMI в одном прерывании)   -  person old_timer    schedule 22.02.2018
comment
фактически на Pi2 и 3 они продолжали использовать контроллер прерываний Broadcom.   -  person old_timer    schedule 22.02.2018


Ответы (1)


ARM7, скорее всего, использовался бы с контроллером векторных прерываний - компонентом, тесно связанным с ядром, но не столь тесно связанным, как современные контроллеры прерываний, которые используются или интегрированы с Cortex-M (ARMv6-M, ARMv7-M и ARMv8- M) - которые интегрированы в модель исключений или контроллеры прерываний класса A.

Этот старый тип контроллера векторных прерываний должен был обеспечивать несколько входов с маскированием и приоритетом. Это вызовет вход IRQ в ядро ​​и предоставит адрес, который ядро ​​может прочитать как часть общего обработчика прерывания, а затем ответвится на обработчик конкретного исключения. Обратите внимание, что на уровне архитектуры будет только одно прерывание IRQ, содержащее таблицу переходов с аппаратной поддержкой.

ARM7 также допускает более простую архитектуру прерывания - точную реализацию настраивается для приложения. Самым тривиальным (и, возможно, необычным) было бы объединить все прерывания по ИЛИ и потребовать, чтобы обработчик прерывания считывал состояние прерывания каждого периферийного устройства, чтобы определить, что ожидает обработки. Сегодня это может показаться очень грубым, но до некоторой степени это все еще делается - вы можете выделить прерывания Rx и Tx для каждого периферийного устройства ввода-вывода, но при этом объединить все прерывания из-за ошибок / переполнения для всего (поскольку любое из них означает окончание игры) .

Компромисс между программным обеспечением и специализированной аппаратной обработкой функций - один из примеров того, как изменение затрат на реализацию может влиять на проектные решения с течением времени.

person Sean Houlihane    schedule 22.02.2018
comment
Чего я не понимаю, так это без контроллера векторных прерываний, чего, насколько я понимаю, в ARM7 нет / не было, как мы обрабатываем несколько прерываний, более двух - person Engineer999; 23.02.2018
comment
@ Engineer999 Обновлено. - person Sean Houlihane; 23.02.2018
comment
Итак, насколько я понимаю с ARM7, для всех прерываний IRQ используется один и тот же вектор. После получения прерывания наша ISR должна проверить аппаратные регистры, чтобы узнать, что на самом деле вызвало прерывание, а затем продолжить? В контроллере векторных прерываний для каждого прерывания используется специальный вектор? - person Engineer999; 23.02.2018
comment
Означает ли это также, что на ARM7 обработчик прерывания должен быть реентерабельным? Спасибо - person Engineer999; 23.02.2018
comment
Да, но я думаю, что даже векторная реализация в ARM7 имеет общий обработчик (ввод специального векторного адреса появился позже). Да, вы, вероятно, найдете причину, по которой вам понадобится повторный обработчик. Я помню, что это было неочевидно для реализации даже для кода проверки. - person Sean Houlihane; 23.02.2018
comment
@ Engineer999 Плюс общего IRQ в том, что вы можете выбрать, иметь или не иметь повторно входящие обработчики, в зависимости от того, нужна ли вам сложность для более низкой задержки IRQ для прерываний с высоким приоритетом. Но FIQ - еще один способ добиться этого. В некоторых случаях у вас есть векторы на векторах. Т.е. для USB IRQ может быть несколько устройств IRQ, считанных с USB-контроллера, чтобы перейти к действительной процедуре IRQ. - person artless noise; 31.07.2019