Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
376 Часть 111. Практическое программирование микроконтроллеров А VR в том числе и «наш» ATtiny23 l 3 (теперь вы начинаете понимать, почему я называл этот контроллер любимым?). Давайте разберемся сначала с процедурами запуска WDT. Эта, в общем, несложная задача крайне бестолково изложена как в документации на контроллеры, так и в переводных пособиях [6,7] , потому постараемся изложить ее человеческим язы ком . И нициализация , запуск и с б рос WDT Сначала договоримся, что никаких fusе-битов woтoN мы не устанавливаем - только ручной запуск и тогда, когда нам это потребуется . Так мы снимаем часть путанных вариантов, изложенных в упомянутых источниках. Тогда у нас остаются три состояния WDT, с которыми будем разбираться : запуск (с нужным временным интервалом), периодический сброс по ходу выполнения программы и остановка насовсем. Проще всего со сбросом - для этого есть, как мы помним (см. главу 7), отдельная команда, которая называется wdr. Ее просто расставляют в нужных местах по коду, чтобы временной промежуток между вызо вами этой команды не превысил установленного времени, и контроллер перезагру зится только, если что-то задержало выполнение программы. Инициализация и запуск WDT с нужным временнЬ1м интервалом сложнее, и вы полняется немного по-разному для классического (обычного) и расширенного сто рожевых таймеров. Для обычного (ATmega8, АTmega8535 ) это выполняется так (листинг 1 4 . 3) . cli wdr ldi temp , ( l<<WDCE ) 1 ( l<<WDE ) ; разрешение изменений + запуск out WDTCR, temp ldi temp , ( l«WDE ) 1 ( l«WDP2 ) 1 ( l«WDPl ) 1 ( l«WDPO ) ; внесение изменений ( WDP2 : 0 = 1 1 1 = 2 , 2 секунды) + запуск out WDTCR, temp sei Классический WDT, как видите, имеет три бита задания времени: WDP2 : о, с по мощью которых максимальное время срабатывания может быть установлено рав ным около 2, 1 с. В ATmega l б, как ни странно, WDT еще «более классический» (напоминает WDT из давно забытого семейства Classic), и процедура может быть еще упрощена - там можно обойтись одной второй строкой, разрешать изменения при этом не требуется . Прерывания (команда cli) нужно на время установок WDT запрещать обязатель но - перерыв между двумя out (см. листинг 1 4. 3) абсолютно недопустим . Это еле-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==