Ревич, Ю.В. Программирование микроконтроллеров 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-разрядные счетчики - более «продвинутая» штука и могут вызывать прерывания по совпадению с двумя неза висимо заданными числами: А и В . При этом счетчики могут обнуляться или про должать счет, а на специальных выводах при этом - генерироваться импульсы (аппаратно, без участия программы), что позволяет создать, например, очень про стой, гибко настраиваемый и работающий независимо от программы генератор импульсов.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==