Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[26]

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

Отметим, что регистр статуса SREG не обрабатывается аппаратными средствами AVR, ни для прерываний, ни для подпрограмм.

При обработке подпрограмм прерываний, требующих сохранения в SREG, запись должна выполняться программными средствами пользователя. Для прерываний, запускаемых статическими событиями (например совпадение содержимого регистра сравнения 1A с состоянием таймера/счетчика1) флаг прерывания устанавливается в момент наступления события. Если флаг очищен, но условия возникновения прерывания продолжают существовать, флаг не будет устанавливаться до тех пор, пока это событие не наступит вновь.

Режимы энергосбережения (Sleep Modes)

Для перевода в любой из трех режимов энергосбережения бит SE в регистре MCUCR должен быть установлен в состояние1. Биты SM1 и SM0 регистра MCUCR определяют какой из режимов Idle, Power Down или Power Save будет запущен командой SLEEP.

При возникновении разрешенного прерывания во время нахождения MCU в режиме энергосбережения, MCU активируется, выполняет подпрограмму обработки прерывания и продолжает работу до следующей команды SLEEP. Если во время режима энергосбережения происходит сброс, MCU активируется и начинает работу по вектору сброса. Содержимое регистрового файла, SRAM и памяти I/O в процессе активации не изменяется. В Таблице 4 представлен выбор режима энергосбережения.

Отметим, что если для возврата из режима энергосбережения Power Down или Power Save, используется запуск прерывания по уровню, то низкий уровень должен удерживаться несколько дольше, чем время задержки сброса t TOUT, иначе микроконтроллер не активируется.

РЕЖИМ Idle

Если биты SM1/SM0 находятся в состоянии 00 команда SLEEP переводит MCU в режим Idle, останавливая CPU но оставляя активными таймеры/счетчики, сторожевой таймер и систему прерываний. Это обеспечивает активацию MCU внешними прерываниями и такими внутренними прерываниями, как переполнение таймера и завершение приема UART. Если активация по аналоговому компаратору не требуется, то аналоговый компаратор может быть отключен установкой бита ACD в регистре управления и статуса аналогового компаратора ACSR. Это позволит дополнительно снизить потребление в Idle режиме. При активации MCU из Idle режима CPU начинает выполнять программу незамедлительно.

РЕЖИМ Power Down

При установке битов SM1/SM0 в состояние 10 команда SLEEP переводит MCU в режим Power Down. В этом режиме останавливается внешний генератор. Пользователь может разрешить работу сторожевого таймера. Если сторожевой таймер разрешен, то активация MCU произойдет по завершении установленного в сторожевом таймере периода времени. Если внешний источник тактового сигнала подключен к выводу XTAL1, то активация MCU из режима Power Down может происходить без


задержки, обычно необходимой для стабилизации XTAL генератора. Режим такой активации разрешается программированием перемычек SUT0/SUT1 в Flash памяти. См. раздел Режим параллельного программирования.

РЕЖИМ Power Save

При установке битов SM1/SM0 в состояние 11 команда SLEEP переводит MCU в режим Power Save. Этот режим, за одним исключением, аналогичен режиму Power Down. Если таймер/счетчикО тактируется асинхронно, т.е. бит AS0 в регистре ASSR установлен, таймер/счетчикО будет работать в режиме Power Save.

MCU будет активироваться прерываниями по переполнению или совпадению выхода таймера/счетчика0.

Таймеры/счетчики

Микроконтроллеры ATmega603/103 оснащены тремя таймерами/счетчиками общего назначения - двумя 8-разрядными и одним 16-разрядным. Таймер/счетчик0, в дополнение к обычному режиму, может тактироваться асинхронно от внешнего генератора. Этот генератор оптимизирован под использование кварцевого кристалла на частоту 32768 кГц, что позволяет использовать таймер/счетчик0 как часы реального времени (Real Time Clock - RTC).

Таймер/счетчик0 оснащен своим собственным предварительным делителем. Таймеры/счетчики 1 и 2 используют выходы ступеней деления общего 10-разрядного предварительного делителя. Эти два таймера/счетчика можно использовать как таймеры с встроенной временной базой или как счетчики, переключаемые по состоянию на внешнем выводе.

Предварительные делители таймеров/счетчиков

CK

*у 10-разрядный предварительный делитель

EXT1 EXT2

СО

счо

-о-

CS20 CS21 CS22

Л7 CS10-Х

-А/ CS11

-» CS12-

Тактовый сигнал таймера/счетчика2 Тактовый сигнал таймера/счетчика!

Рис. 30 Предварительный делитель таймера/счетчика1 и таймера/счетчика2

Предварительный делитель таймеров/счетчиков 1и 2 содержит четыре ступени деления: CK/8, CK/64, CK/256 и CK/1024, где CK входной тактовый сигнал. Кроме того, в качестве источников тактовых сигналов могут быть использованы сигналы от внешних источников, тактовый сигнал CK и нулевой тактовый сигнал (stop).

0


CK TCK1

AS0

TCK0

(>10-разрядный предварительный делитель

СОCN

C0 4D

оw

\£оо

KCK K

TCKTC KTC

CS00 CS01 CS02

5

со сч

с0 K

CT

4D Ю СЧ

О

K

TC

Ш1

0

о" K

TC

Тактовый сигнал таймера/счетчика 0 Рис 31 Предварительный делитель таймера/счетчика0

Тактовый сигнал таймера/счетчика0 обозначен TCK0. Этот тактовый сигнал по умолчанию подключен к основному тактовому сигналу системы CK. При установке бита AS0 в регистре ASSR таймер/счетчик0 будет асинхронно тактироваться сигналом с вывода TOSC1, что позволяет использовать таймер/счетчик0 в качестве часов реального времени (RTC). Генератор оптимизирован под использование кварцевого кристалла с частотой 32768 кГц, подсоединяемого между выводами TOSC1 и TOSC2.

8-разрядные таймеры/счетчики T/C0 и T/C2

8-разрядный таймер/счетчик0 получает тактовый сигнал или непосредственно от TCK0 или после прохождения его через предварительный делитель.

8-разрядный таймер/счетчик2 получает тактовый сигнал непосредственно от CK, после прохождения его через предварительный делитель или от внешнего вывода. Оба таймера/счетчика могут быть остановлены, как это показано в описании регистров управления таймерами/счетчиками TCCR0 и TCCR2.

В регистре флагов прерывания таймеров/счетчиков TIFR хранятся различные флаги состояния регистров (переполнения, совпадения при сравнении и захвата события). Установки управляющих сигналов хранятся в регистрах управления таймерами/ счетчиками TCCR0 и TCCR2. Установка разрешения/запрещения прерываний производится в регистре масок прерываний таймеров/счетчиков TIMSK.

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

Точность и разрешение 8-разрядных таймеров/счетчиков растет с уменьшением коэффициента предварительного деления. Аналогичным образом высокий коэффициент предварительного деления удобно использовать при реализации функций с низким быстродействием или точной синхронизации редко происходящих действий.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51]