kv_addr
Aug 28 2005, 04:19
Вопрос по AVR, в частности, по AT90S2313.
В регистре управления прерыванием MCUCR биты ISC01 и ISC00 отвечают за то, каким событием на входе INT0 вызывается прерывание, а именно: 00 - низким уровнем, 10 - переходом из 1 в 0, 11 - переходом из 0 в 1.
Предположим, что в регистре биты установлены в 11. Если на INT0 вход поступает последовательность импульсов, то каждое новое прерывание происходит по фронту. А если нужно, чтобы первое прерывание произошло по фронту, а второе - по спаду, третье - снова по фронту, и т.д.? Могу ли я при обработке прерывания инвертировать бит ISC0 для получения необходимого результата? Правильно ли меня поймет контроллер? Чем может быть чреват такой трюк? Обязательно ли в этом случае перед сменой данных в MCUCR запрещать прерывание, а после модификации - возобновлять?
amator
Aug 28 2005, 05:21
Безусловно можешь. Если следовать правилам хорошего тона, то кроме запрещения прерываний перед последующим разрешением необходимо ещё очистиь флаг INTF записав в него 1.
muravei
Aug 28 2005, 06:37
Цитата(kv_addr @ Aug 28 2005, 07:19)
Могу ли я при обработке прерывания инвертировать бит ISC0 для получения необходимого результата? Правильно ли меня поймет контроллер? Чем может быть чреват такой трюк? Обязательно ли в этом случае перед сменой данных в MCUCR запрещать прерывание, а после модификации - возобновлять?
Можешь.
Правильно.
Ничем, надо только успеть до след. события.
Нет, после прерывания, оно и так запрещено.
Флаг сбрасывает, команда RETI.(так что в ручную не обязательно)
arttab
Aug 29 2005, 01:45
Есть и минус - помехи. их надо учитывать при обработки. Можно расмотреть старт по фронту, а потом выборки делать и анализировать.
kalinka16
Aug 29 2005, 04:11
Как вариант - использовать INT0 и INT1 (сконфигурировать один по фронту, другой по спаду)
Нефиг извращаться. Возьми Tiny2313, там можно прерывание по any change включить. Кроме того, 90S2313 все равно EOL.
На 8-й Меге я так делал и для очистки совести флаг сбрасывал.
muravei
Aug 31 2005, 04:25
Цитата(Rst7 @ Aug 29 2005, 08:38)
Нефиг извращаться. Возьми Tiny2313, там можно прерывание по any change включить. Кроме того, 90S2313 все равно EOL.
Не использовать"any change", в некоторой степени - защита от помех.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.