Отличие INT и PCINT

smW
Offline
Зарегистрирован: 24.11.2013

В чем по сути отличие INT и PCINT (Pin Change INT)  ?

 

 

step962
Offline
Зарегистрирован: 23.05.2011

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

Вот, например, у ATMega328 есть три соответствующих вектора обработки прерываний PCINT: 4-й (PCINT0_vect), 5-й (PCINT0_vec1) и 6-й (PCINT2_vect). 4-й вектор обслуживает ноги PCINT7...0 (порт B), 5-й - PCINT8...14 (порт C - в нем только 7 выводов)6-й - PCINT16...23 (порт D). 

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

smW
Offline
Зарегистрирован: 24.11.2013

step962 пишет:

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

Вот, например, у ATMega328 есть три соответствующих вектора обработки прерываний PCINT: 4-й (PCINT0_vect), 5-й (PCINT0_vec1) и 6-й (PCINT2_vect). 4-й вектор обслуживает ноги PCINT7...0 (порт B), 5-й - PCINT8...14 (порт C - в нем только 7 выводов)6-й - PCINT16...23 (порт D). 

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

1) тогда непонятно почему у Atiny13 так много прерываний PCINT по количеству ножек ?

http://arduino.ru/forum/programmirovanie/attiny13a-101-primenenie?page=4#comment-48591

2) и попутно в чем суть прерываний  AIN1 AIN0  ?

step962
Offline
Зарегистрирован: 23.05.2011

smW пишет:

1) тогда непонятно почему у Atiny13 так много прерываний PCINT по количеству ножек ?

Это не много прерываний - это много источников прерываний (выводы PB0, PB1 и так далее), сходящихся в одну-единственную процедуру обработки прерывания (ISR) PCINT0_vect. Здесь - если не вчитываться в даташит - возможно недоразумение в том плане, что выводы PCINT0,PCINT1,PCINT2,PCINT3,PCINT4,PCINT5 генерируют одно и то же прерывание - PCINT0. Вот такое отсутствие фантазии при именовании у разработчиков из Atmel.

Цитата:

2) и попутно в чем суть прерываний  AIN1 AIN0  ?

AIN0 - прерывание от изменения состояния одно-единственного вывода (у Tiny13 это PB0). То есть в ISR не надо опрашивать выводы порта, чтобы определить, какой из них вызвал прерывание. Далее, не надо выяснять, было ли прерывание вызвано переходом с LOW на HIGH или, наоборот, с HIGH на LOW: при активизации этого типа прерываний можно выбирать, какое событие будет вызывать прерывание, а какое нет. (в случае с PCINTx прерывание будет сгенерировано при любом изменении любого вывода заданного порта)

Упс... попутал INT0 и AIN0.

Вышесказанное относится к внешним прерываниям INT0/1.

Прерывания AIN0/1 - относятся к компаратору. Примерно то же самое, что и АЦП, но на один-единственный уровень напряжения. Зато моментального действия...