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

Глава 3. Периферийные устройства и прерывания 47 ров, потому для синхронизации запуска таймеров предделитель можно останавли­ вать и запускать по команде, - еще одна функция, недоступная в Arduino. ПОДРОБНОСТИ В Aгdu i no все временнь1е функции завязаны на работу TimerO, nотому этот таймер в общем случае нельзя исnользовать для каких-либо еще надобностей - это нарушит ход внутренних часов контроллера и приведет к неработоспособности трех основных функций отсчета времени: millis ( ) , micros ( ) и delay ( ) (только функция delayMicroseconds ( ) работает независимо от таймеров) . Нельзя также запрещать (по крайней мере надолго) прерывания функцией cli ( ) (то же самое, что nointerrupts ( ) ) - таймер при этом просто остановится (подробно об этом рассказано в этой главе далее) . Наоборот, сама по себе ctelay ( ) на время задержки заблокирует все прерывания , а внутри обработчиков прерывание выполняться просто не будет. С наперед заданной скоростью работы TimeгO (с коэффициентом деления тактовой частоты 1 :64) связано ограниченное разрешение функции micros ( ) , равное 4-м микро­ секундам - это при периоде тактовой частоты в 1 / 1 s микросекунды! Вероятно, отме­ ченные ограничения - первое, с чем сталкивается пытливый любитель, пытаясь усо­ вершенствовать свою программу. При программировании на ассемблере, конечно, ни­ каких таких ограничений нет, а точное знание времени выполнения команд позволяет рассчитать все вплоть до длительности одного такта . Расскажем о некоторых возможностях счетчиков-таймеров, которые в Arduino либо недоступны вовсе, либо реализуются с большими сложностями (подробнее о про­ граммировании счетчиков-таймеров мы поговорим в главе 9) . Для начала упомянем о возможности их работы в качестве обычных счетчиков внешних импульсов (при­ чем возможна реакция как по спаду, так и по фронту импульса) . При этом частота подсчитываемых импульсов не должна превышать половины частоты тактового генератора МК (кстати, при несимметр!fЧНОМ внешнем меандре инструкция реко­ мендует и еще меньшее значение предельной частоты- 0,4 от тактовой) . Это обу­ словлено тем, что при счете внешних импульсов их фронты обнаруживаются син­ хронно (в моменты положительного перепада тактового сигнала) . Кроме того, сле­ дует учитывать, что задержка обновления содержимого счетчика после прихода внешнего импульса может составлять до 2,5 периода тактовой частоты. Это весьма существенное ограничение, так что создавать, например, универсальный частото­ мер с помощью МК не очень удобно - быстродействующие схемы лучше проек­ тировать на соответствующей комбинационной логике или на ПЛИС (программи­ руемых логических интегральных схемах) . При переполнении счетчика (вне зависимости от источника сигнала) возникает со­ бытие, которое может вызывать соответствующее прерывание. 8-разрядный счет­ чик TimerO в ряде случаев этой функцией и ограничивается. Счетчик Timer2, если он имеется, может также вызывать прерывание по совпадению подсчитанного зна­ чения с некоторой заранее заданной величиной. 1 6-разрядные счетчики - более «продвинутая» штука и могут вызывать прерывания по совпадению с двумя неза­ висимо заданными числами: А и В . При этом счетчики могут обнуляться или про­ должать счет, а на специальных выводах при этом - генерироваться импульсы (аппаратно, без участия программы), что позволяет создать, например, очень про­ стой, гибко настраиваемый и работающий независимо от программы генератор импульсов.

RkJQdWJsaXNoZXIy MTExODQxMg==