2015-11-23 2 views
3

Недавно я задал этот вопрос. Я изучаю архитектуру ARM, и я попытался ее исследовать, но я чувствую, что у меня нет правильного ответа.Почему в ARM есть 2 регистра для включения/выключения прерываний вместо 1?

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

Это правильная причина? Есть ли более глубокое объяснение этому? Есть ли какой-то документ, объясняющий это дизайнерское решение?

EDIT: К сожалению, чип я работаю является Cortex M4

+0

Какие регистры, а тем более, какая архитектура? Что касается архитектуры A/class/legacy, в одном регистре есть только два _bits_ (один для отключения каждого типа прерываний), вот и все. Архитектура M-класса немного отличается и включает в себя собственно контроллер прерываний, но по существу это просто PRIMASK. Или есть какая-то путаница в игре между контролем того, прерывается ли CPU _takes_, а не то, являются ли они _генерированными в первую очередь? – Notlikethat

ответ

1

Пока я не могу говорить на мысли, которые вошли в оригинальный дизайн, мое наблюдение состоит в том, что это делает его легче обеспечить нить безопасность.

Предполагается, что существует только один регистр доступен для включения и выключения прерываний; Установка бит в регистр позволит включить соответствующее прерывание, в то время как очистка бит приведет к его отключению.

Это будет операция чтения-записи изменения, склонны к race conditions, если программное обеспечение не тщательно охраняются против него (например, путем отключения все прерывания перед доступа к регистру, или с помощью синхронизации примитивными).

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

Отдельные регистры установки/очистки также обычно используются для, например, GPIO, чтобы позволить нескольким потокам свободно изменять состояние ввода-вывода.

Смежные вопросы