МПС

Системная синхронизация и тактовые источники (Лекция)

 

Источники синхронизации и их распределение к встроенным блокам ATmega128

Совсем необязательно вся синхронизация должна работать в одно и тоже время. В целях снижения энергопотребления тактирование неиспользуемых модулей может быть прекращено путем перевода в различные режимы сна командой sleep.

 

Рис. 1

Синхронизация ЦПУ – clkCPU

Синхронизация ЦПУ подключается к модулям микроконтроллера, которые связаны с работой ядра AVR. Примерами таких модулей являются файл регистров общего назначения, регистр статуса и память данных, выполняющая функцию стека. Остановка синхронизации ЦПУ приводит к прекращению выполнения ядром любых действий и вычислений.

Синхронизация ввода-вывода – clkI/O

Синхронизация ввода-вывода используется основными модулями ввода-вывода, в т.ч. таймеры-счетчики, SPI и УСАПП. Она также используется модулем внешних прерываний, но в некоторых случаях внешние прерывания детектируются в асинхронном режиме для поддержки работоспособности внешних прерываний даже при отключенной синхронизации. Также обратите внимание, что после отключения данной синхронизации (во всех режимах сна) двухпроводной интерфейс TWI продолжает наблюдать за передаваемым по шине адресом асинхронно.

Синхронизация флэш-памяти – clkFLASH

Синхронизация флэш-памяти тактирует работу интерфейса флэш-памяти. Обычно эта синхронизация работает одновременно с синхронизацией ЦПУ.

Синхронизация асинхронного таймера – clkASY

Синхронизация асинхронного таймера используется для тактирования асинхронного таймера-счетчика внешним кварцевым резонатором частотой 32 кГц. Данный тактовый генератор позволяет использовать таймер-счетчик как счетчик реального времени, даже при переводе микроконтроллера в режим сна.

Синхронизация АЦП – clkADC

АЦП тактируется обособленным блоком синхронизации. Это позволяет остановить работу синхронизации ЦПУ и ввода-вывода на время преобразования АЦП в целях снижения влияния цифрового шума на результат преобразования. С помощью этого достигается более точный результат преобразования.

 

Источники синхронизации

С помощью конфигурационных бит имеется возможность выбора нескольких источников синхронизации. Сигнал синхронизации выбранного источника является входным для тактового генератора AVR и затем подключается к соответствующим модулям.

Источники синхронизации

CKSEL3..0(1)

Внешний кварцевый/керамический резонатор

1111 – 1010

Внешний низкочастотный кварцевый резонатор

1001

Внешний RC-генератор

1000 – 0101

Встроенный калиброванный RC-генератор

0100 – 0001

Внешняя синхронизация

0000

Прим. 1: Для всех конфигурационных бит “1” означает незапрограммированное состояние, а “0” – запрограммированное.

При выходе ЦПУ из режима выключения (Power-down) или экономичного режима (Power-save) выбранный источник синхронизации используется по истечении времени на запуск, гарантируя стабильность работы генератора перед первым выполнением инструкции. Запуск микроконтроллера, инициированный сбросом (reset), сопровождается дополнительной задержкой для достижения питанием стабильного уровня перед переводом микроконтроллера в нормальный режим работы. Генератор сторожевого таймера используется для синхронизации данного модуля, который формирует задержку при запуске.

время переполнения (VCC = 5.0В)

время переполнения (VCC = 3.0В)

Количество тактов

4.1 мс

4.3 мс

4K (4096)

65 мс

69 мс

64K (65536)

 

Первоначальный источник синхронизации

Микроконтроллер поставляется с установками CKSEL = “0001” и SUT = “10”. Эти значения соответствуют выбору в качестве источника синхронизации внутреннего RC-генератора с максимальным временем старта. Данная настройка гарантирует возможность установить требуемый источник синхронизации с помощью внутрисистемного или параллельного программатора.

 

Кварцевый генератор

XTAL1 и XTAL2 – вход и выход, соответственно, инвертирующего усилителя, который может быть настроен для использования в качестве встроенного генератора. Для задания частоты может использоваться либо кварцевый, либо керамический резонатор. Конфигурационный бит CKOPT выбирает один из двух режимов усилителя генератора. Если CKOPT запрограммирован, то амплитуда колебаний выходного сигнала генератора будет ограничена уровнями питания. Данный режим рекомендуется использовать при высоком уровне окружающих шумов или при использовании выхода XTAL2 в качестве источника синхронизации внешней схемы. Данный режим характеризуется широким частотным диапазоном. Если CKOPT незапрограммирован, то амплитуда выходных колебаний генератора снижается. Использование данного режима позволяет существенно снизить потребляемую мощность, но при этом ограничен частотный диапазон и нельзя XTAL2 использовать для внешней синхронизации.

1.                  При использовании резонаторов максимальная частота равна 8 МГц, если CKOPT незапрограммирован, и 16 МГц, если CKOPT запрограммирован.

 

 

Внешний RC-генератор

Для приложений некритичных к стабильности временных характеристик в качестве источника синхронизации может использоваться внешняя RC-цепь. Путем программирования конфигурационного бита CKOPT пользователь может разрешить подключение внутреннего конденсатора между XTAL1 и GND, исключая необходимость внешнего конденсатора.

Генератор может работать в четырех различных режимах, каждый из которых ориентирован на специфический частотный диапазон. Рабочий режим выбирается конфигурационными битами CKSEL3..0

 

Встроенный калиброванный RC-генератор

Встроенный калиброванный RC-генератор формирует фиксированные тактовые частоты 1.0, 2.0, 4.0 или 8.0 МГц. Данные значения частот являются номинальными и определены для напряжения питания 5В при 25C. Одна из этих частот может быть выбрана в качестве тактовой, если запрограммировать конфигурационные биты CKSEL. После выбора микроконтроллер будет работать без внешних компонентов. Конфигурационный бит CKOPT должен быть всегда незапрограммированным, если используется внутренний RC-генератор. В процессе сброса калибровочный байт аппаратно записывается регистр OSCCAL, тем самым автоматически выполняя калибровку RC-генератора. При питании 5В, температуре 25C и выбранной частоте генератора 1.0 МГц данный метод калибровки обеспечивает погрешность генерации частоты не хуже ± 3% от номинального значения. Использование методов калибровки во время работы микроконтроллера позволяет достичь точности ± 1% при любой заданной температуре и напряжении VCC. При использовании данного генератора в качестве тактового генератор сторожевого таймера также останется использоваться для тактирования сторожевого таймера и для задания длительности задержки при сбросе.

После выбора данного генератора длительность задержки при запуске микроконтроллера определяется установками конфигурационных бит SUT. Выводы XTAL1 и XTAL2 должны быть оставлены неподключенными (NC).

Регистр калибровки генератора – OSCCAL

Разряды 7..0 – CAL7..0: Калибровочное значение для генератора

Запись значения калибровочного байта в данный регистр приведет к подстройке генератора на номинальную частоту. В процессе сброса калибровочное значение для частоты 1МГц (расположен в старшем байте строки сигнатуры) автоматически записывается в регистр OSCCAL. Если встроенный RC-генератор используется на других частотах, то калибровочный байт необходимо записывать программно. Для этого необходимо с помощью программатора считать значение калибровочного байта, затем сохранить его значение во флэш-память или ЭСППЗУ. После этого, калибровочное значение может быть считано программно, а затем записано в регистр OSCCAL. Если в регистр OSCCAL записать ноль, то выбирается минимальная частота. Запись ненулевого значения приводит к повышению частоты генератора. Запись $FF – к выбору максимальной частоты. Калиброванный генератор используется для синхронизации доступа к ЭСППЗУ и флэш-памяти. Во время выполнения записи в ЭССПЗУ или во флэш-память не следует выполнять калибровку на частоту выше на 10% от номинальной. В противном случае, запись в ЭССПЗУ или во флэш-память может быть некорректной. Генератор откалиброван отдельно на частоты 1.0, 2.0, 4.0 или 8.0 МГц.

 

Диапазон частот встроенного RC-генератора

Значение OSCCAL

Минимальная частота в
процентах от номинальной, %

Максимальная частота в
процентах от номинальной, %

$00

50

100

$7F

75

150

$FF

100

200

 

Внешняя синхронизация

Если необходимо тактировать микроконтроллер от внешнего источника, то его необходимо подключить к выводу XTAL1. В этом случае внешняя синхронизация должна быть разрешена записью в конфигурационные биты CKSEL значения “0000”. Если запрограммировать бит CKOPT, то между XTAL1 и GND будет подключен внутренний конденсатор.

После выбора данного источника синхронизации длительность задержки при запуске определяется конфигурационными битами SUT. После подключения внешнего тактового источника необходимо избегать внезапных изменений его частоты для гарантирования стабильности работы микроконтроллера. Если на следующем такте частота изменится более чем на 2% по сравнению с предыдущим, то поведение микроконтроллера может стать непредсказуемым. Данный механизм реализован для гарантирования нахождения микроконтроллера в состоянии сброса в процессе таких изменений тактовой частоты.

 

Генератор таймер-счетчика

Выводы генератора таймера-счетчика TOSC1 и TOSC2 предназначены для непосредственного подключения кварцевого резонатора. В этом случае не требуются внешние конденсаторы. Генератор оптимизирован для совместной работы с часовым кварцевым резонатором 32.768 кГц. Подключение внешнего тактового источника к выводу TOSC1 не рекомендуется.

Регистр управления делением XTAL – XDIV

Регистр управления делением XTAL используется для деления частоты тактового источника на число от 2 – 129. Это может использоваться при оптимизации энергопотребления.

Разряд 7 – XDIVEN: Разрешение деления XTAL

Если в XDIVEN записать 1, то тактовые частоты ЦПУ и периферийных модулей (clkI/O, clkADC, clkCPU, clkFLASH) будут поделены на коэффициент, заданный XDIV6–XDIV0. Бит можно программировать в работающем приложении для варьирования тактовой частотой.

Разряды 6..0 – XDIV6..XDIV0: Разряды 6…0 коэффициента деления XTAL

Данные разряды определяют значение коэффициента деления, который вступает в силу после записи лог. 1 в XDIVEN. Если значение данных бит обозначит как d, то результирующая тактовая частота (fCLK) ЦПУ и периферийных модулей может быть найдена по выражению:

Изменять значение данных разрядов допускается, если XDIVEN=0. Когда в XDIVEN записывается 1, то записываемые одновременно с ней значения XDIV6..XDIV0 будут использоваться как коэффициент деления. Во время записи в XDIVEN 0 одновременно записываемые значения в разряды XDIV6..XDIV0 отклоняются. Поскольку, делитель выполняет снижение входной тактовой частоты микроконтроллера, то после разрешения деления также снижается быстродействие всех периферийных модулей.

Примечание: После разрешения деления тактовой частоты таймер-счетчик 0 может быть использован только в асинхронном режиме. Частота асинхронного источника должна быть не менее чем в 4 раза меньше результирующей (поделенной) частоты синхронизации. В противном случае не гарантируется определение запроса на прерывание и корректность доступа к регистрам таймера-счетчика 0.

 

Управление энергопотреблением и режимы сна

Использование режимов сна позволяет отключать неиспользуемые модули микроконтроллера, тем самым уменьшая потребляемую мощность. Микроконтроллер поддерживает несколько режимов сна, позволяющих программисту оптимизировать энергопотребление под требования приложения. Для перевода микроконтроллера в один из шести режимов сна необходимо предварительно установить бит SE в регистре MCUCR, а затем выполнить инструкцию SLEEP. Биты SM2, SM1 и SM0 регистра MCUCR задают в какой именно режим будет переведен микроконтроллер (холостой ход "Idle", уменьшение шумов АЦП "ADC Noise Reduction", выключение "Power-down", экономичный "Power-save", дежурный "Standby" или расширенный дежурный "Extended Standby") после выполнения команды SLEEP. Выход из режима сна происходит при возникновении разрешенного прерывания. В этом случае, помимо времени старта микроконтроллер приостанавливается на 4 машинных цикла, выполняет процедуру обработки прерывания и продолжает выполнять команды следующие за SLEEP. Содержимое файла регистров и статического ОЗУ остается неизменным после выхода из режима сна. Если во время действия режима сна возникает условие сброса, то микроконтроллер пробуждается и исполняет код программы по вектору сброса.

Регистр управления микроконтроллером – MCUCR

Регистр управления микроконтроллером содержит биты управления энергопотреблением.

Разряд 5 – SE: Разрешение перевода в режим сна

В бит SE должна быть записана лог. 1, когда необходимо микроконтроллер перевести в режим сна командой SLEEP. Во избежание незапланированного программистом перевода микроконтроллера в режим сна рекомендуется устанавливать этот бит непосредственно перед выполнением инструкции SLEEP и сбрасывать сразу после пробуждения.

Разряды 4..2 – SM2..0: Биты 2, 1 и 0 выбора режима сна

С помощью данных бит можно выбрать один из шести режимов сна.

SM2

SM1

SM0

Наименование режима сна

0

0

0

Холостой ход

0

0

1

Уменьшение шумов АЦП

0

1

0

Выключение

0

1

1

Экономичный

1

0

0

Зарезервирован

1

0

1

Зарезервирован

1

1

0

Дежурный (1)

1

1

1

Расширенный дежурный (1)

Прим. 1: Дежурный режим и расширенный дежурный режим доступны только при использовании внешних кварцевых или керамических резонаторов.

 

Режим холостого хода (Idle)

Если значение бит SM2..0 равно 000, то после выполнения инструкции SLEEP микроконтроллер переходит в режим холостого хода, в котором останавливается ЦПУ, но продолжают работу SPI, УСАПП, аналоговый компаратор, АЦП, двухпроводной интерфейс, таймеры-счетчики, сторожевой таймер и система прерываний. По сути, в данном режиме останавливается синхронизация ядра ЦПУ и флэш-памяти (clkCPU и clkFLASH), а остальная продолжает работу. В режиме холостого хода допускается пробуждение от любого внешнего или внутреннего прерывания, например, при переполнении таймера или завершении передачи УСАППом. Если пробуждение по прерыванию аналогового компаратора не требуется, то аналоговый компаратор может быть отключен путем установки бита ACD в регистре управления и состояния аналогового компаратора ACSR. Это позволит уменьшить потребляемый ток в режиме холостого хода. Если разрешена работа АЦП, то преобразование автоматически запускается после перевода в данный режим.

 

Режим уменьшения шумов АЦП (ADC Noise Reduction)

Если значениям бит SM2..0 присвоить 001, то выполнение инструкции SLEEP приведет к переводу микроконтроллера в режим уменьшения шумов АЦП, в котором останавливается ЦПУ, но продолжают работу АЦП, внешние прерывания, наблюдение за адресом двухпроводной последовательного шины, таймер-счетчик 0 и сторожевой таймер (конечно, если были предварительно активизированы). Фактически в данном режиме прекращается синхронизация ввода-вывода (clkI/O), ядра ЦПУ (clkCPU) и флэш-памяти (clkFLASH), а остальная синхронизация продолжает работу. В этом режиме создается более благоприятные условия для аналогово-цифрового преобразования с повышенной разрешающей способностью за счет снижения влияния шумов на результат измерения. Если разрешена работа АЦП, то преобразование автоматически запускается при переводе в данный режим. Выход из данного режима допускается не только при генерации запроса на прерывание по завершению преобразования АЦП, но и при внешнем сбросе, сбросе по сторожевому таймеру, сбросе при недопустимом снижении питания, прерывании при обнаружении установленного адреса на двухпроводной последовательной шине, прерывании по таймеру-счетчику 0, прерывании по готовности SPM/EEPROM, прерывании по внешнему уровню на выводах INT7:4 или внешнем прерывании по входам INT3:0.

 

Режим выключения (Power-down)

Если SM2..0 = 010, то выполнение команды SLEEP означает перевод микроконтроллера в режим выключения. В данном режиме прекращает работу внешний генератор, но в действии остаются внешние прерывания, наблюдение за адресом на двухпроводной последовательной шине и сторожевой таймер (при условии, что они активизированы). Выход из данного режима возможен только по внешнему сбросу, сбросу сторожевым таймером или супервизором питания, прерывании по обнаружении установленного адреса на двухпроводной последовательной шине, прерывании по внешнему уровню на выводах INT7:4 или внешним прерывании INT3:0. В данном режиме фактически отключена генерация всех тактовых частот, поэтому дальнейшая работа модулей продолжается только в асинхронном режиме. Если для выхода из прерывания используется прерывание по установке заданного уровня на внешнем входе, то выход из режима сна возможен если этот уровень присутствует в течение определенного времени. Выход из режима выключения сопровождается задержкой с момента выполнения условия прерывания до эффективного пробуждения. Данная задержка позволяет перезапустить синхронизацию и дождаться стабильности ее работы. Период пробуждения определяется некоторыми конфигурационными битами CKSEL, которые определяют период задержки при сбросе.

 

Экономичный режим (Power-save)

Если установить значения бит SM2..0 равным 011, то действие команды SLEEP приведет к переводу микроконтроллера в экономичный режим. Данный режим идентичен режиму выключения за некоторыми исключениями:

Если таймер-счетчик 0 тактируется асинхронно, т.е. установлен бит AS0 в регистре ASSR, то таймер-счетчик 0 в режиме сна продолжит работу. Выход из режима сна возможен как по переполнению таймера, так и при выполнении условия сравнения, если соответствующее прерывание для таймера-счетчика разрешено в регистре TIMSK, а также установлен бит общего разрешения прерываний в регистре SREG. Если для асинхронного таймера НЕ включено асинхронное тактирование, то рекомендуется использовать режим выключения вместо экономичного, т.к. содержимое регистров асинхронного таймера должно рассматриваться как неопределенное после выхода из экономичного режима, в котором значение AS0 было равно 0. В данном режиме сна останавливаются все тактовые источники за исключением асинхронных (clkASY), работающих только совместно с асинхронными модулями, в т.ч. таймер-счетчик 0 с разрешенной опцией асинхронного тактирования.

 

Дежурный режим (Standby)

После установки значения SM2..0 = 110 и выбора опции тактирования от внешнего кварцевого или керамического резонатора выполнение инструкции SLEEP приводит к переходу микроконтроллера в дежурный режим. Данный режим идентичен режиму выключению за исключением того, что генератор продолжает свою работу. Из дежурного режима микроконтроллер выходит за 6 машинных циклов.

 

Расширенный дежурный режим (Extended Standby)

Запись в SM2..0 значения 111 с учетом выбора в качестве тактового источника внешнего кварцевого или керамического резонатора означает, что после выполнения команды SLEEP микроконтроллер будет переведен в расширенный дежурный режим. Данный режим идентичен экономичному за исключением продолжения работы тактового генератора. Выход из расширенного дежурного режима происходит за шесть машинных циклов.

Наим.

режима сна

Тактируемые модули

микроконтроллера

Активные

генераторы

Источник

пробуждения

 

Clk

CPU

Clk

FLASH

Clk

IO

Clk

ADC

clkASY

(асинх.

мод)

Основ.

такт.

Генер.

тайм

ера

INT

7:0

Набл.

Адреса

TWI

Тай

мер 0

Готов.

SPM/

EEPROM

АЦП

Др.

ввод-вывод

Холос.

Ход

 

 

*

*

*

*

*

*

*

*

*

*

*

Уменьш.

шумов

АЦП

 

 

 

*

*

*

*

*

*

*

*

*

 

Выключ.

 

 

 

 

 

 

 

*

*

 

 

 

 

Эконом.

 

 

 

 

*

 

*

*

*

*

 

 

 

Дежурн. (1)

 

 

 

 

 

*

 

*

*

 

 

 

 

Расшир.

Дежурн. (1)

 

 

 

 

*

*

*

*

*

*

 

 

 

1.                  В качестве внешнего тактового источника выбран кварцевый или керамический резонатор.

2.                  Если установлен бит AS0 в ASSR.

3.                  Только INT3:0 или прерывание по уровню на INT7:4

 

Минимизация потребляемой мощности

В процессе оптимизации энергопотребления могут возникнуть некоторые проблемы. В общем случае необходимо по возможности максимально использовать режимы сна, а собственно режим сна необходимо выбрать исходя из поддержки только необходимых функций. Все неиспользуемые функции должны быть отключены.

 

Аналогово-цифровой преобразователь

Если АЦП был активизирован, то он останется активным и во всех режимах сна. Для снижения мощности рекомендуется отключать АЦП перед переводом в режим сна. Если АЦП был отключен, а затем снова включен, то следующее преобразование будет расширенным.

 

Аналоговый компаратор

Перед входом в режим холостого хода аналоговый компаратор необходимо выключить, если он не используется. Перед входом в режим уменьшения шумов АЦП аналоговый компаратор должен быть отключен. При входе в другие режимы сна аналоговый компаратор отключается автоматически. Однако, если к неинвертирующему входу аналогового компаратора выбрано подключение встроенного источника опорного напряжения, то перед входом в любой режим сна аналоговый компаратор необходимо отключать. В противном случае встроенный источник опорного напряжения останется включенным независимо от режима сна.

 

Супервизор питания

Если нет необходимости использовать супервизор питания, то данный модуль может быть выключен. Если супервизор питания активизирован конфигурационным битом BODEN, то он также останется активным и во всех режимах сна и, следовательно, будет постоянно потреблять мощность. При организации режимов глубокого сна отключение данного модуля позволит существенно уменьшит потребляемый ток.

 

Встроенный источник опорного напряжения ИОН

Работа встроенного источника опорного напряжения разрешается, если необходимо использовать супервизор питания, аналоговый компаратор или АЦП. Если данные модули будут отключены, то встроенный ИОН также будет отключен и не будет потреблять мощность. При возобновлении его работы программист должен учесть задержку на установление выходного напряжения ИОН перед его использованием. Если ИОН остается включенным в режиме сна, то его можно использовать сразу после пробуждения.

 

Сторожевой таймер

Если нет необходимости в использовании сторожевого таймера, то данный модуль должен быть отключен. Если разрешить работу сторожевого таймера, то он останется активным во всех режимах сна и, следовательно, будет потреблять мощность. Если требуются режимы глубокого сна, то данная опция позволит существенно снизить общий ток.

 

Линии портов ввода-вывода

Перед переводом в режим сна все линии портов ввода-вывода должны быть настроены с учетом потребления минимальной мощности. Основное внимание следует уделить отсутствию резистивных нагрузок на выводах. В режимах сна, где отключена синхронизация ввода-вывода (clkI/O) и АЦП (clkADC), входные буферы микроконтроллера отключены. Этим гарантируется отсутствие энергопотребления неиспользуемой в режиме сна входной логикой. В некоторых случаях входная логика необходима для определения условия пробуждения и в этом случае должна быть активной. Если работа входного буфера разрешена, а входной сигнал оказался отключенным или имеет уровень близкий к VCC/2, то этот входной буфер будет потреблять повышенную мощность.

 

Интерфейс JTAG и встроенный блок отладки

Если работа встроенного блока отладки разрешена конфигурационным битом OCDEN, то даже при переводе микроконтроллера в экономичный режим (Power save) или режим выключения (Power down) командой sleep основной тактовый источник продолжит работу. В этом случае микроконтроллер будет потреблять существенный ток даже в этих режимах сна. Избежать этого можно с помощью одного из трех способов:

        Сбросить конфигурационный бит OCDEN.

        Сбросить конфигурационный бит JTAGEN.

        Установить бит JTD в регистре MCUCSR.

После разрешения работы интерфейса JTAG вывод TDO остается плавающим до тех пор пока JTAG TAP-контроллер не начнет сдвигать данные. Если связанная с выводом TDO аппаратная часть не выполняет подтягивание потенциала к плюсу питания, то потребляемая мощность увеличится. Обратите внимание, что вывод TDI следующего микроконтроллера в сканируемой цепи содержит подтягивающий резистор для избежания данной проблемы. Запись в бит JTD регистра MCUCSR лог. 1 приводит к отключению интерфейса JTAG, так же как и незапрограммированное состояние конфигурационного бита JTAGEN.

 

 

Системное управление и сброс

 

Сброс микроконтроллера

В процессе сброса во все регистры ввода-вывода записываются их начальные значения и выполнение программы начинается с вектора сброса. По вектору сброса должна хранится инструкция абсолютного перехода JMP на метку процедуры обработки сброса. Если в программе не используются источники прерывания, то векторы прерываний не используются, а зарезервированные под них ячейки памяти могут использоваться для равномерного расположения кода программы. Имеется также случай, когда вектор сброса расположен в секции прикладной программы, а векторы прерываний находятся в загрузочном секторе или наоборот. Порты ввода-вывода AVR-микроконтроллера немедленно возвращаются к их первоначальному состоянию, как только один из источников сброса становится активным. Для этого не требуется работа какой-либо синхронизации. После прекращения действия всех источников сброса вступает в силу счетчик задержки, продлевающий внутренний сброс. Данная последовательность требуется для гарантирования запуска микроконтроллера при достижении напряжением питания стабильного уровня. Длительность задержки при старте определяется конфигурационными битами CKSEL.

 

Источники сброса

ATmega128 имеет пять источников сброса:

·      Сброс при подаче питания. Микроконтроллер переходит в состояние сброса, если напряжение питания ниже порога сброса при подаче питания (VPOT).

·      Внешний сброс. Микроконтроллер переходит в состояние сброса, если на вывод RESET подать низкий логический уровень на время дольше, чем минимальная длительность импульса сброса.

·      Сброс по сторожевому таймеру. Если разрешена работа сторожевого таймера и истек период его срабатывания, то микроконтроллер сбрасывается.

·      Сброс при снижении питания. Микроконтроллер сбрасывается, если напряжение питания VCC становится ниже порогового значения (VBOT) и разрешена работа схемы контроля питания BOD.

·      Сброс через интерфейс JTAG. Микроконтроллер находится в состоянии сброса до тех пор, пока в регистре сброса записана лог. 1 в одной из сканируемых цепей JTAG-системы.

Рис. Логика сброса

Обозн.

Параметр

Условие

Мин.

Тип.

Макс.

Един.

измер.

VPOT

Пороговое напряжение сброса

 при повышении питания

 

 

1.4

2.3

В

Пороговое напряжение

сброса при снижении питания (1)

 

 

1.3

2.3

В

VRST

Пороговый уровень сброса

на выводе RESET

 

0.2 Vcc

 

0.85 Vcc

В

tRST

Минимальная длительность

импульса сброса на выводе RESET

 

 

50

 

нс

VBOT

Порог напряжения сброса

схемы контроля питания BOD(2)

BODLEVEL = 1

2.4

2.6

2.9

В

BODLEVEL = 0

3.7

4.0

4.5

В

tBOD

Мин длительность снижения

напряжения для срабатывания

схемы контроля питания

BODLEVEL = 1

 

2

 

мкс

BODLEVEL = 0

 

2

 

мкс

VHYST

Ширина петли гистерезиса

схемы контроля питания

 

 

50

 

мВ

1.                  Сброс при подаче питания не будет работать, если напряжение питания ниже VPOT.

2.                  У некоторых микроконтроллеров VBOT может быть ниже минимального рабочего напряжения. Данные микроконтроллеры на стадии производства испытываются при VCC = VBOT. Этим гарантируется то, что сброс микроконтроллера будет выполнен раньше, чем произойдет снижение питания микроконтроллера на недопустимый для его корректной работы уровень. Испытание ATmega128 выполнено при BODLEVEL=0. Установка BODLEVEL=1 не применима для ATmega128.

 

Сброс при подаче питания

Импульс сброса при подаче питания (POR) генерируется встроенной схемой. POR инициируется всякий раз, когда VCC ниже порогового уровня. Схема POR может использоваться для запуска микроконтроллера, а также для выявления нарушения режима питания.

Функцией схемы сброса при подаче питания (POR) является удержание микроконтроллера в состоянии сброса в течение определенного времени после того, как напряжение достигло уровня сброса при подаче питания. Если напряжение питания снизится ниже определенного уровня, то микроконтроллер снова сбросится без всяких задержек.

Рис. Запуск микроконтроллера (RESET соединен с VCC)

 


Рис. Запуск микроконтроллера (RESET управляется внешне)

 

Внешний сброс

Внешний сброс генерируется, если на вход RESET подать низкий уровень. Если подать импульс сброса длительностью более tRST, то будет генерирован сброс, даже если синхронизация не запущена. При подаче импульса сброса длительностью менее tRST сброс не гарантируется. Если сигнал на выводе RESET достигает порогового напряжения сброса VRST на его положительном фронте, то запускается счетчик задержки и микроконтроллер начнет работу только по истечении периода tTOUT.

 

Рис.

 

Контроль напряжения питания

ATmega128 содержит встроенную схему контроля питания (BOD), которая выполняет сравнение уровня VCC с фиксированным пороговым значением. Порог срабатывания схемы BOD может выбираться с помощью конфигурационного бита BODLEVEL. Порог равен 2.7В, когда BODLEVEL незапрограммирован, или 4.0В, когда BODLEVEL запрограммирован. Для исключения автоколебательного режима схема BOD характеризуется гистерезисом. С учетом гистерезиса результирующие пороги срабатывания следующие: VBOT+=VBOT+VHYST/2 и VBOT-=VBOT-VHYST/2. Схема BOD может быть включена или отключена с помощью конфигурационного бита BODEN. Если разрешена работа BOD (BODEN запрограммирован) и уровень VCC снизился ниже порога срабатывания (VBOT-), то схема BOD переводит микроконтроллер в состояние сброса. Когда VCC достигает значения выше порога срабатывания (VBOT+), то запускается счетчик задержки и микроконтроллер начнет работу по истечении времени tTOUT. Схема BOD реагирует на снижение VCC, если напряжение остается меньшим порога срабатывания дольше чем период времени tBOD.

Рис. Сброс микроконтроллера схемой контроля питания

 

Сторожевой таймер

По истечении периода переполнения сторожевого таймера генерируется короткий импульс сброса длительностью равной одному периоду системной синхронизации (1 CK). Падающим фронтом этого импульса запускается счетчик задержки tTOUT.

Рис. Сброс сторожевым таймером

 

Регистр управления и статуса микроконтроллера – MCUCSR

В регистре управления и статуса микроконтроллера хранится информация об источнике, который вызвал сброс микроконтроллера.

Разряд 4 – JTRF: Флаг индикации сброса через JTAG-интерфейс

Данный бит принимает единичное состояние, если сброс был вызван записью 1 в регистр JTAG Reset JTAG-инструкцией AVR_RESET. Данный бит сбрасывается автоматически при подаче питания или путем непосредственной записи 0 в данный флаг.

Разряд 3 – WDRF: Флаг индикации сброса сторожевым таймером

Данный бит устанавливается после сброса сторожевым таймером. Данный бит сбрасывается при подаче питания или путем записи 0 в данный флаг.

Разряд 2 – BORF: Флаг индикации сброса схемой контроля напряжения питания

Данный флаг принимает единичное состояние, если схема контроля напряжения питания перевела микроконтроллер в состояние сброса. Данный бит сбрасывается при подаче питания и путем записи 0 в данный флаг.

Разряд 1 – EXTRF: Флаг внешнего сброса

Данный бит устанавливается при возникновении внешнего сброса. Флаг сбрасывается при подаче питания или путем записи 0 в данный флаг.

Разряд 0 – PORF: Флаг сброса при подаче питания

Данный флаг устанавливается, если сброс был инициирован подачей питания. Данный бит сбрасывается только путем записи 0 в данный флаг. Если флаги сброса необходимо использовать для определения причины сброса, то программист должен предусмотреть сброс значений флагов MCUCSR желательно сразу после опроса их значений. Если регистр очищается перед возникновением другого сброса, то источник данного сброса может быть найден среди флагов сброса.

Встроенный источник опорного напряжения

ATmega128 содержит встроенный источник опорного напряжения (ИОН). ИОН используется схемой контроля питания и может быть подключен ко входу аналогового компаратора или к АЦП. Опорное напряжение АЦП 2.56В генерируется встроенным ИОН.

 

Сигналы разрешения и длительность запуска ИОН

ИОН характеризуется задержкой при включении, которая может оказать негативное влияние, если не будет учтена. Для оптимизации энергопотребления ИОН не всегда находится во включенном состоянии. ИОН остается во включенном состоянии в следующих случаях:

1.      Когда разрешена работа схемы контроля питания BOD (запрограммирован конфигурационный бит BODEN).

2.      Если ИОН подключен ко входу аналогового компаратора (установлен бит ACBG в ACSR).

3.      Если разрешена работа АЦП.

Следовательно, когда работа BOD запрещена и установлен бит ACBG или разрешена работа АЦП, программист должен предусмотреть задержку на время запуска ИОН перед использованием выходных данных аналогового компаратора или АЦП. В целях снижения потребляемой мощности в режиме выключения (Power-down) программист должен избежать приведенных выше трех условий для гарантирования, что ИОН будет отключен после перевода микроконтроллера в режим выключения.

Обозн.

Параметр

Мин.

Тип.

Макс.

Ед.изм.

VBG

Напряжение ИОН

1.15

1.23

1.40

В

tBG

Длительность запуска ИОН

 

40

70

мкс

IBG

Потребляемый ток ИОНом

 

10

 

мкА

 

Сторожевой таймер

Сторожевой таймер тактируется от отдельного встроенного генератора частотой 1 МГц. Данное значение типично для напряжения питания VCC = 5В. Период переполнения сторожевого таймера можно задавать путем управления предделителем. Инструкция WDR выполняет сброс сторожевого таймера. Сторожевой таймер также сбрасывается при выключении или во время сброса микроконтроллера. Период переполнения определяют восемь различных коэффициентов деления предделителя. Если инструкция сброса сторожевого таймера WDR не выполняется в течение времени равного периоду переполнения сторожевого таймера, то ATmega128 сбрасывается и начинает выполнение программы по вектору сброса. Для предотвращения неумышленного изменения периода переполнения или выключения сторожевого таймера могут быть использованы 3 различных уровня безопасности, которые выбираются конфигурационными битами M103C и WDTON. Для разрешения работы сторожевого таймера не требуются какие-либо специальные меры независимо от уровня безопасности.

M103C

WDTON

Уровень

безопасности

Начальное

Состояние

Сторожевого

таймера

Временная

последовательность

отключения

сторожевого

таймера

Временная

последовательность

изменения

периода

переполнения

Незапрограм.

Незапрограм.

1

Выкл.

Есть

Есть

Незапрограм.

Запрограм.

2

Вкл.

Отключение

невозможно

Есть

Запрограм.

Незапрограм.

0

Выкл.

Есть

Нет

Запрограм.

Запрограм.

2

Вкл.

Отключение

невозможно

Есть

Регистр управления сторожевого таймера – WDTCR

Разряды 7..5 – Зарезервированы

Данные разряды являются зарезервированными и всегда считываются как 0.

Разряд 4 – WDCE: Разрешение изменения сторожевого таймера

Данный бит необходимо установить непосредственно перед записью 0 в бит WDE. В противном случае запретить работу сторожевого таймере невозможно. После записи в данный бит 1 он автоматически аппаратно сбросится по истечении четырех тактов синхронизации микроконтроллера. На уровнях безопасности 1 и 2 данный бит необходимо устанавливать также перед изменением настроек предделителя.

Разряд 3 – WDE: Разрешение сторожевого таймера

Работа сторожевого таймера разрешается (запрещается) путем установки (сброса) бита WDE. Сбросить бит WDE возможно, только если предварительно установить бит WDCE. Для выключения сторожевого таймера необходимо выполнить следующую последовательность:

1.         Записать 1 в WDCE и WDE одной инструкцией. 1 должна быть записана в бит WDE, даже если до выполнения данной операции в нем уже была записана 1.

2.         В течение следующих четырех тактов записать 0 в WDE, что приводит к отключению сторожевого таймера.

На 2-ом уровне безопасности запретить работу сторожевого таймера невозможно даже с помощью указанной выше последовательности.

Разряд 2..0 – WDP2, WDP1, WDP0: Выбор коэффициента деления

Биты WDP2, WDP1 и WDP0 задают коэффициент деления частоты генератора сторожевого таймера после разрешения работы последнего.

WDP2

WDP1

WDP0

Кол-во тактов

генерат. с

торож.

таймера

Типичное

время

перепол-я

при VCC = 3.0В

Тип. время

переполнения

при VCC = 5.0В

0

0

0

16K (16,384)

17.1 мс

16.3 мс

0

0

1

32K (32,768)

34.3 мс

32.5 мс

0

1

0

64K (65,536)

68.5 мс

65 мс

0

1

1

128K (131,072)

0.14 с

0.13 с

1

0

0

256K (262,144)

0.27 с

0.26 с

1

0

1

512K (524,288)

0.55 с

0.52 с

1

1

0

1,024K (1,048,576)

1.1 с

1.0 с

1

1

1

2,048K (2,097,152)

2.2 с

2.1 с

Функции выключения сторожевого таймера на Си. Предполагается, что система прерываний настроена так, чтобы во время выполнения функции не возникло прерывание (например, с помощью общего запрета прерываний инструкцией cli ).

Пример кода на Си
void WDT_off(void)
{/* Запись лог. 1 в WDCE и WDE */
WDTCR = (1<<WDCE) | (1<<WDE);
/* Выкл. сторожевого таймера */
WDTCR = 0x00;}

Временные последовательности изменения конфигурации сторожевого таймера

Последовательность изменения настройки сторожевого таймера плавно изменяется между тремя уровнями безопасности. Ниже описаны процедуры изменения настроек для каждого из уровней.

Уровень безопасности 0

Сторожевой таймер первоначально отключен, но может быть активизирован путем записи в бит WDE лог.1 без каких-либо ограничений. Период переполнения таймера также может быть изменен без всяких ограничений. Для выключения активизированного сторожевого таймера должна быть выполнена процедура, описанная при рассмотрении бита WDE.

Уровень безопасности 1

В данном режиме сторожевой таймер первоначально отключен. Его работа может быть разрешена путем записи 1 в бит WDE без каких-либо ограничений. Временная последовательность должна быть соблюдена при изменении периода переполнения сторожевого таймера или выключении разрешенного сторожевого таймера. В данном случае должна быть выполнена следующая последовательность:

1.    С помощью одной и той же инструкции записать 1 в WDCE и WDE. 1 должна быть записана в WDE независимо от предыдущего значения бита WDE.

2.    В течение следующих 4-х тактов одной инструкцией записать желаемое значение бит WDE и WDP, но со сброшенным значением бита WDCE.

Уровень безопасности 2

В данном режиме сторожевой таймер всегда включен а значение бита WDE всегда считывается как 1. Временная последовательность должна быть соблюдена при изменении периода переполнения сторожевого таймера. При этом, должна быть выполнена следующая последовательность:

1.    Записать 1 в WDCE и WDE одной инструкцией. Несмотря на то, что WDE всегда установлен, для запуска временной последовательности в него все равно надо записывать  1.

2.    В течение следующих 4-х тактов записать желаемое значение WDP одной инструкцией при сброшенном значении бита WDCE. Записываемое значение в бит WDE не оказывает никакого влияния.