Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 3. Периферийные устройства и прерывания 65 граммы. Подробнее обработку прерываний мы рассмотрим в главе 6 - в сравнении с выполнением обычных подпрограмм. Р азновидности прерывани й Всего в различных моделях AVR существует от 6-8 (младшие Tiny) до нескольких десятков прерываний (например, в ATmega2560 их 57) . Как и в ПК, прерывания в микроконтроллерах бывают двух видов . Но если в ПК прерывания делятся на аппаратные (например, от таймера или клавиатуры) и программные (фактически не прерывания, а подпрограммы, записанные в BIOS, - с распространением Windows это понятие почти исчезло из программистской практики), то в МК, естественно, все прерывания аппаратные, а делятся они на внутренние и внешние . Внутренние прерывания могут возникать от любого устройства, которое является дополнительным по отношению к ядру системы: таймеров, аналогового компаратора, последовательного порта и т. п . Внутреннее прерывание - это событие, которое возникает в системе и прерывает выполнение основной программы. Внутренних прерываний в АVR довольно много, и в совокупности они служат для взаимодейст­ вия устройств с ядром системы, - мы еще к этому вопросу будем неоднократно возвращаться при рассмотрении конкретных устройств. Отдельной главы для рассмотрения внешних прерываний в этой книге не преду­ смотрено, потому что они почти всегда играют вспомогательную роль для выпол­ нения каких-либо других функций. Вы встретитесь с внешним прерыванием уже в главе 6 при рассмотрении простейших программ взаимодействия с контроллером, и в дальнейшем мы еще не раз будем о них говорить . А сейчас рассмотрим основ­ ные особенности внешних прерываний. Основных внешних прерываний у большинства МК АVR два или три. В старших Mega их может быть и больше - например, у АTmega2560 (основа для Arduino Mega) их целых восемь. Основные внешние прерывания могут возникать незави­ симо друг от друга. Кроме основных, в ряде контроллеров, в том числе в основном «ардуновском» ATmega328, имеются дополнительные внешние прерывания типа PCINT (Pin Change Interrupt, прерывания по изменению уровня на выводе), поэтому суммарное число их оказывается. равно 24. Итак, внешнее прерывание - это событие, которое наступает при наличии сигнала на одном из входов, специально предназначенных для этого (например, што и INTl ) . Выделяют четыре вида событий, вызывающих такое прерывание : это может быть низкий уровень напряжения, любой перепад (фронт) напряжения, а также от­ дельно положительный или отрицательный фронт на соответствующем выводе. Любопытно, что прерывания по всем этим событиям выполняются, даже если соот­ ветствующий вывод порта сконфигурирован на выход (это, в частности, позволяет вызывать такие прерывания программно) . Кратко рассмотрим особенности этих режимов. Прерывание по низкому уровню (режим установлен по умолчанию, для его инициализации достаточно разрешить соответствующее прерывание) возникает всякий раз, когда на соответствующем входе присутствует низкий уровень. «Всякий раз» - это значит, что действительно

RkJQdWJsaXNoZXIy MTExODQxMg==