Перейти к содержанию
    

Ловить фронт и спад импульса на INT0

Вопрос по AVR, в частности, по AT90S2313.

 

В регистре управления прерыванием MCUCR биты ISC01 и ISC00 отвечают за то, каким событием на входе INT0 вызывается прерывание, а именно: 00 - низким уровнем, 10 - переходом из 1 в 0, 11 - переходом из 0 в 1.

 

Предположим, что в регистре биты установлены в 11. Если на INT0 вход поступает последовательность импульсов, то каждое новое прерывание происходит по фронту. А если нужно, чтобы первое прерывание произошло по фронту, а второе - по спаду, третье - снова по фронту, и т.д.? Могу ли я при обработке прерывания инвертировать бит ISC0 для получения необходимого результата? Правильно ли меня поймет контроллер? Чем может быть чреват такой трюк? Обязательно ли в этом случае перед сменой данных в MCUCR запрещать прерывание, а после модификации - возобновлять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Могу ли я при обработке прерывания инвертировать бит ISC0 для получения необходимого результата? Правильно ли меня поймет контроллер? Чем может быть чреват такой трюк? Обязательно ли в этом случае перед сменой данных в MCUCR запрещать прерывание, а после модификации - возобновлять?

Можешь.

Правильно.

Ничем, надо только успеть до след. события.

Нет, после прерывания, оно и так запрещено.

 

Флаг сбрасывает, команда RETI.(так что в ручную не обязательно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть и минус - помехи. их надо учитывать при обработки. Можно расмотреть старт по фронту, а потом выборки делать и анализировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вариант - использовать INT0 и INT1 (сконфигурировать один по фронту, другой по спаду)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нефиг извращаться. Возьми Tiny2313, там можно прерывание по any change включить. Кроме того, 90S2313 все равно EOL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нефиг извращаться. Возьми Tiny2313, там можно прерывание по any change включить. Кроме того, 90S2313 все равно EOL.

Не использовать"any change", в некоторой степени - защита от помех.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...