Системное управление и сброс
Сброс микроконтроллера
В процессе сброса во все регистры ввода-вывода записываются их начальные значения и выполнение программы начинается с вектора сброса. По вектору сброса должна хранится инструкция абсолютного перехода JMP на метку процедуры обработки сброса. Если в программе не используются источники прерывания, то векторы прерываний не используются, а зарезервированные под них ячейки памяти могут использоваться для равномерного расположения кода программы. Имеется также случай, когда вектор сброса расположен в секции прикладной программы, а векторы прерываний находятся в загрузочном секторе или наоборот. На рисунке 22 показана схема организации логики сброса. В таблице 19 приведены электрические характеристики схемы сброса.
Порты ввода-вывода AVR-микроконтроллера немедленно возвращаются к их первоначальному состоянию, как только один из источников сброса становится активным. Для этого не требуется работа какой-либо синхронизации.
После прекращения действия всех источников сброса вступает в силу счетчик задержки, продлевающий внутренний сброс. Данная последовательность требуется для гарантирования запуска микроконтроллера при достижении напряжением питания стабильного уровня. Длительность задержки при старте определяется конфигурационными битами CKSEL. Различные варианты установок длительностей задержек представлены в разделе “Источники синхронизации”.
Источники сброса9
ATmega128 имеет пять источников сброса:
- Сброс при подаче питания. Микроконтроллер переходит в состояние сброса, если напряжение питания ниже порога сброса при подаче питания (VPOT).
- Внешний сброс. Микроконтроллер переходит в состояние сброса, если на вывод RESET подать низкий логический уровень на время дольше, чем минимальная длительность импульса сброса.
- Сброс по сторожевому таймеру. Если разрешена работа сторожевого таймера и истек период его срабатывания, то микроконтроллер сбрасывается.
- Сброс при снижении питания. Микроконтроллер сбрасывается, если напряжение питания VCC становится ниже порогового значения (VBOT) и разрешена работа схемы контроля питания BOD.
- Сброс через интерфейс JTAG. Микроконтроллер находится в состоянии сброса до тех пор, пока в регистре сброса записана лог. 1 в одной из сканируемых цепей JTAG-системы. См. раздел “Граничное сканирование IEEE 1149.1 (JTAG)”.
Рисунок 22 – Логика сброса
Таблица 19 – Характеристики сброса
Обозн. |
Параметр |
Условие |
Мин. |
Тип. |
Макс. |
Единица измерения |
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 |
|
мВ |
Примечания:
- Сброс при подаче питания не будет работать, если напряжение питания ниже VPOT.
- У некоторых микроконтроллеров VBOT может быть ниже минимального рабочего напряжения. Данные микроконтроллеры на стадии производства испытываются при VCC = VBOT. Этим гарантируется то, что сброс микроконтроллера будет выполнен раньше, чем произойдет снижение питания микроконтроллера на недопустимый для его корректной работы уровень. Испытание ATmega128L выполнено при BODLEVEL=1, а ATmega128 при BODLEVEL=0. Установка BODLEVEL=1 не применима для ATmega128.
Сброс при подаче питания
Импульс сброса при подаче питания (POR) генерируется встроенной схемой. Пороговый уровень сброса приведен в таблице 19. POR инициируется всякий раз, когда VCC ниже порогового уровня. Схема POR может использоваться для запуска микроконтроллера, а также для выявления нарушения режима питания.
Функцией схемы сброса при подаче питания (POR) является удержание микроконтроллера в состоянии сброса в течение определенного времени после того, как напряжение достигло уровня сброса при подаче питания. Если напряжение питания снизится ниже определенного уровня, то микроконтроллер снова сбросится без всяких задержек.
Рисунок 23 – Запуск микроконтроллера (RESET соединен с VCC).
Рисунок 24 – Запуск микроконтроллера (RESET управляется внешне).
Внешний сброс
Внешний сброс генерируется, если на вход RESET подать низкий уровень. Если подать импульс сброса длительностью более tRST (см. табл. 19), то будет генерирован сброс, даже если синхронизация не запущена. При подаче импульса сброса длительностью менее tRST сброс не гарантируется. Если сигнал на выводе RESET достигает порогового напряжения сброса VRST на его положительном фронте, то запускается счетчик задержки и микроконтроллер начнет работу только по истечении периода tTOUT.
Рисунок 25 – Внешний сброс микроконтроллера
Контроль напряжения питания
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- на рисунке 26), то схема BOD переводит микроконтроллер в состояние сброса. Когда VCC достигает значения выше порога срабатывания (VBOT+ на рисунке 26), то запускается счетчик задержки и микроконтроллер начнет работу по истечении времени tTOUT.
Схема BOD реагирует на снижение VCC, если напряжение остается меньшим порога срабатывания дольше чем период времени tBOD (см. табл. 19).
Рисунок 26 – Сброс микроконтроллера схемой контроля питания
Сторожевой таймер
По истечении периода переполнения сторожевого таймера генерируется короткий импульс сброса длительностью равной одному периоду системной синхронизации (1 CK). Падающим фронтом этого импульса запускается счетчик задержки tTOUT.
Рисунок 27 – Сброс сторожевым таймером
Регистр управления и статуса микроконтроллера – MCUCSR
В регистре управления и статуса микроконтроллера хранится информация об источнике, который вызвал сброс микроконтроллера.
Обратите внимание, что в режиме совместимости с ATmega103 доступны только биты EXTRF и PORF.
Разряд 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В генерируется встроенным ИОН.
Сигналы разрешения и длительность запуска ИОН
ИОН характеризуется задержкой при включении, которая может оказать негативное влияние, если не будет учтена. Длительность задержки приведена в таблице 20. Для оптимизации энергопотребления ИОН не всегда находится во включенном состоянии. ИОН остается во включенном состоянии в следующих случаях:
- Когда разрешена работа схемы контроля питания BOD (запрограммирован конфигурационный бит BODEN).
- Если ИОН подключен ко входу аналогового компаратора (установлен бит ACBG в ACSR).
- Если разрешена работа АЦП.
Следовательно, когда работа BOD запрещена и установлен бит ACBG или разрешена работа АЦП, программист должен предусмотреть задержку на время запуска ИОН перед использованием выходных данных аналогового компаратора или АЦП. В целях снижения потребляемой мощности в режиме выключения (Power-down) программист должен избежать приведенных выше трех условий для гарантирования, что ИОН будет отключен после перевода микроконтроллера в режим выключения.
Таблица 20 – Характеристики встроенного ИОН
Обозн. |
Параметр |
Мин. |
Тип. |
Макс. |
Ед.изм. |
VBG |
Напряжение ИОН |
1.15 |
1.23 |
1.40 |
В |
tBG |
Длительность запуска ИОН |
|
40 |
70 |
мкс |
IBG |
Потребляемый ток ИОНом |
|
10 |
|
мкА |
Сторожевой таймер
Сторожевой таймер тактируется от отдельного встроенного генератора частотой 1 МГц. Данное значение типично для напряжения питания VCC = 5В. Значение частоты при другом напряжении питания см. на рис. 194. Период переполнения сторожевого таймера можно задавать путем управления предделителем (см. табл. 22). Инструкция WDR выполняет сброс сторожевого таймера. Сторожевой таймер также сбрасывается при выключении или во время сброса микроконтроллера. Период переполнения определяют восемь различных коэффициентов деления предделителя. Если инструкция сброса сторожевого таймера WDR не выполняется в течение времени равного периоду переполнения сторожевого таймера, то ATmega128 сбрасывается и начинает выполнение программы по вектору сброса.
Для предотвращения неумышленного изменения периода переполнения или выключения сторожевого таймера могут быть использованы 3 различных уровня безопасности, которые выбираются конфигурационными битами M103C и WDTON в соотв. с табл. 21. Уровень безопасности 0 соответствует установкам в ATmega103. Для разрешения работы сторожевого таймера не требуются какие-либо специальные меры независимо от уровня безопасности (см. “Временные последовательности изменения конфигурации сторожевого таймера ”).
Таблица 21 – Конфигурация сторожевого таймера при различных настройках бит M103C и WDTON
M103C |
WDTON |
Уровень безопасности |
Начальное состояние сторожевого таймера |
Временная последовательность отключения сторожевого таймера |
Временная последовательность изменения периода переполнения |
Незапрограммирован |
Незапрограммирован |
1 |
Выкл. |
Есть |
Есть |
Незапрограммирован |
Запрограммирован |
2 |
Вкл. |
Отключение невозможно |
Есть |
Запрограммирован |
Незапрограммирован |
0 |
Выкл. |
Есть |
Нет |
Запрограммирован |
Запрограммирован |
2 |
Вкл. |
Отключение невозможно |
Есть |
Рисунок 28- Сторожевой таймер
Регистр управления сторожевого таймера – WDTCR
Разряды 7..5 – Зарезервированы
Данные разряды являются зарезервированными и всегда считываются как 0.
Разряд 4 – WDCE: Разрешение изменения сторожевого таймера
Данный бит необходимо установить непосредственно перед записью лог. 0 в бит WDE. В противном случае запретить работу сторожевого таймере невозможно. После записи в данный бит лог. 1 он автоматически аппаратно сбросится по истечении четырех тактов синхронизации микроконтроллера. На уровнях безопасности 1 и 2 данный бит необходимо устанавливать также перед изменением настроек предделителя. См. “Временные последовательности изменения конфигурации сторожевого таймера”.
Разряд 3 – WDE: Разрешение сторожевого таймера
Работа сторожевого таймера разрешается (запрещается) путем установки (сброса) бита WDE. Сбросить бит WDE возможно, только если предварительно установить бит WDCE. Для выключения сторожевого таймера необходимо выполнить следующую последовательность:
- Записать лог. 1 в WDCE и WDE одной инструкцией. Лог. 1 должна быть записана в бит WDE, даже если до выполнения данной операции в нем уже была записана лог. 1.
- В течение следующих четырех тактов записать лог. 0 в WDE, что приводит к отключению сторожевого таймера.
На 2-ом уровне безопасности запретить работу сторожевого таймера невозможно даже с помощью указанной выше последовательности. См. “Временные последовательности изменения конфигурации сторожевого таймера”.
Разряд 2..0 – WDP2, WDP1, WDP0: Выбор коэффициента деления
Биты WDP2, WDP1 и WDP0 задают коэффициент деления частоты генератора сторожевого таймера после разрешения работы последнего. Значения коэффициентов деления и соответствующих периодов переполнения приведены в табл. 22.
Таблица 22 – Настройка предделения генератора сторожевого таймера
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 ).
Пример кода на Ассемблере
WDT_off:
; Запись лог. 1 в WDCE и WDE
ldi r16, (1<<WDCE)|(1<<WDE)
out WDTCR, r16
; Выкл. сторожевого таймера
ldi r16, (0<<WDE)
out WDTCR, r16
ret
Пример кода на Си
void WDT_off(void)
{
/* Запись лог. 1 в WDCE и WDE */
WDTCR = (1<<WDCE) | (1<<WDE);
/* Выкл. сторожевого таймера */
WDTCR = 0x00;
}
Временные последовательности изменения конфигурации сторожевого таймера
Последовательность изменения настройки сторожевого таймера плавно изменяется между тремя уровнями безопасности. Ниже описаны процедуры изменения настроек для каждого из уровней.
Уровень безопасности 0
Данный режим совместим с работой сторожевого таймера ATmega103. Сторожевой таймер первоначально отключен, но может быть активизирован путем записи в бит WDE лог. 1 без каких-либо ограничений. Период переполнения таймера также может быть изменен без всяких ограничений. Для выключения активизированного сторожевого таймера должна быть выполнена процедура, описанная при рассмотрении бита WDE.
Уровень безопасности 1
В данном режиме сторожевой таймер первоначально отключен. Его работа может быть разрешена путем записи лог. 1 в бит WDE без каких-либо ограничений. Временная последовательность должна быть соблюдена при изменении периода переполнения сторожевого таймера или выключении разрешенного сторожевого таймера. В данном случае должна быть выполнена следующая последовательность:
- С помощью одной и той же инструкции записать лог. 1 в WDCE и WDE. Лог. 1 должна быть записана в WDE независимо от предыдущего значения бита WDE.
- В течение следующих 4-х тактов одной инструкцией записать желаемое значение бит WDE и WDP, но со сброшенным значением бита WDCE.
Уровень безопасности 2
В данном режиме сторожевой таймер всегда включен а значение бита WDE всегда считывается как лог. 1. Временная последовательность должна быть соблюдена при изменении периода переполнения сторожевого таймера. При этом, должна быть выполнена следующая последовательность:
- Записать лог. 1 в WDCE и WDE одной инструкцией. Не смотря на то, что WDE всегда установлен, для запуска временной последовательности в него все равно необходимо записывать лог. 1.
- В течение следующих 4-х тактов записать желаемое значение WDP одной инструкцией при сброшенном значении бита WDCE. Записываемое значение в бит WDE не оказывает никакого влияния.
|