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 слушает один-единственный вывод и может настраиваться на тип происходящего на нем изменения уровня. Стало быть, более оперативно реагирует на дергание соответствующей ножки.
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 по количеству ножек ?
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 - относятся к компаратору. Примерно то же самое, что и АЦП, но на один-единственный уровень напряжения. Зато моментального действия...
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 слушает один-единственный вывод и может настраиваться на тип происходящего на нем изменения уровня. Стало быть, более оперативно реагирует на дергание соответствующей ножки.
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 ?
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 - относятся к компаратору. Примерно то же самое, что и АЦП, но на один-единственный уровень напряжения. Зато моментального действия...