Почему в архитектуре AVR предусмотрены несколько этапов включения прерываний смены контактов - PullRequest
0 голосов
/ 20 января 2019

В архитектуре AVR есть некоторые прерывания, для которых нам нужно всего несколько строк кода.Например, смена контактов выводит прерывания.Но некоторые прерывания имеют один шаг, исключая глобальное разрешение прерываний.Например, прерывание переполнения таймера 0 только для установки 0-го бита регистра TIMSK0.Итак, каковы преимущества проектирования такой архитектуры?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В общем, jfowkes объясняет, как настройки для каждого прерывания (АЦП, таймер, смена контактов, передача данных, ЭСППЗУ, ...) могут отличаться, но есть одна фактическая строка кода, разрешающая каждый индивидуальное прерывание.

Если у вас есть контрпример, это было бы легче уточнить.


Множество информации о прерываниях смены контактов сконцентрировано на этой странице:
http://medesign.seas.upenn.edu/index.php/Guides/MaEvArM-pcint

Он относится к одному чипсету AVR, но должен дать вам немного больше информации.

Обычно проектирование архитектуры максимально простое, потому что это также то, что проще всего проектировать и травить на уровне транзисторов. Если вы посмотрите лекции MIT 6.004, , в частности # 20 , они подробно расскажут, как и почему создаются наборы инструкций. Или вы можете проверить http://www.avr -tutorials.com / interrupts / about-avr-8-bit-microcontrollers-interrupts . В основном, одна выделенная схема для прерываний (с одним битом, управляющим, передан ли каждый сигнал прерывания или нет), позволяет легко сохранять текущий программный счетчик и обслуживать прерывание.

0 голосов
/ 21 января 2019

Как правило, прерывания будут иметь именно те биты / регистры конфигурации, которые им нужны, и не более. В общем случае для каждого вектора прерывания имеется только один enable bit.

Чтобы взять ваши примеры:

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

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

В обоих случаях есть шаг setup step и enable step.

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

  • Нет циклов процессора или ОЗУ тратится на прерывания, выполняемые, когда они не нужны
  • Не тратится мощность на прерывания, когда они не нужны
  • Переконфигурирование прерываний возможно при запуске, путем отключения прерывания, изменения конфигурации и повторного включения его

Все это полезно для встроенных программных приложений.

...