Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка (1) / ЦИМПУ(atmega 128).doc
Скачиваний:
102
Добавлен:
16.04.2015
Размер:
4.2 Mб
Скачать

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

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

Для перевода микроконтроллера в один из шести режимов сна необходимо предварительно установить бит 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 выбора режима сна

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

Таблица 5.2 Выбор режима сна

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)

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

Режим холостого хода (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 (АЦП)

Clk

ASY (Асинхр.

модули)

Основ-

ной тактовый

Гене-ратор тайме-ра

INT7:0

Набл. адреса TWI

Тай-мер 0

Готов-

ность SPM/

EEPROM

АЦП

Др. ввод-вывод

Холостой

ход

*

*

*

*

*

*

*

*

*

*

*

Уменьше-

ние шумов АЦП

*

*

*

*

*

*

*

*

*

Выключе-

ние

*

*

Экономич-ный

*

*

*

*

*

Дежурный (1)

*

*

*

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

*

*

*

*

*

*

Таблица 5.3 Активные тактируемые модули и источники пробуждения в различных режимах сна

Прим. :

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

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

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

AND Rd,Rr (операция "Логического И" над содержимым двух РОН) Rd=Rd • Rr. Над содержимым регистра Rd и содержимым регистра Rr выполняется операция "Логическое И". Результат помещается в регистр Rd.

ANDI Rd,K (операция "Логического И" над содержимым РОН и константой) Rd = Rd • K. Над содержимым регистра Rd и 8-разрядным числом выполняется операция "Логическое И". Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16…R31).

EOR Rd,Rr (операция “Исключающее ИЛИ” над содержимым двух РОН) Rd=RdRr. Над содержимым регистров Rd и Rr выполня­ется операция “Исключающее ИЛИ”. Результат помещается в регистр Rd.

OR Rd,Rr (операция "ИЛИ" над содержимым двух РОН) Rd=Rd ٧ Rr. Над содержимым регистров Rd и Rr выполняется операция логическое "ИЛИ". Результат помещается в регистр Rd.

ORI Rd,K (операция "ИЛИ" над содержимым РОН и константой) Rd=Rd ٧ K. Над содержимым регистра Rd и 8-разрядным числом выполняется операция логическое "ИЛИ". Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16…R31).

СOМ Rd (перевод в обратный код) Rd = $FF-Rd. Вычисление обратного кода числа, находящегося в регистре Rd. Результат помещается в регистр Rd.

NEG Rd (вычисление дополнительного кода числа) Rd = $00-Rd. Вычисление дополнительного кода числа, находящегося в регистре Rd. Результат помещается в регистр Rd.

CLR Rd (очистка РОН) Rd=RdRd. Сбрасывает все разряды регистра общего назначения путем выполнения операции “Исключающее ИЛИ” регистра с самим собой.

SER Rd (установка РОН) Rd = $FF. Устанавливает все разряды регистра общего назначения в «1». Команда применима только к 16 старшим РОН (R16…R31).

TST Rd (проверка РОН на нулевое или отрицательное значение) Rd• Rd. Q Проверяет содержимое регистра на нулевое или отрицательное значение путем выполнения операции "Логическое И" регистра с самим собой. Содержимое регистра Rd не изменяется.

SWAP Rd (перестановка тетрад РОН) Rd(3-0)<Rd(7-4), Rd(7-4)<Rd(3-0). Команда производит перестановку старшего и младшего полубайта содержимого регистра Rd.

ASR Rd (арифметический сдвиг вправо) Rd(n)<Rd(n+1), n=0..6. Сдвигает содержимое регистра Rd на 1 разряд вправо. Состояние 7-го разряда не изменяется. Значение 0-го разряда помещается в флаг С регистра SREG. Часто используется для деления чисел со знаком на два.

LSL Rd (логический сдвиг влево) Rd(n+1)<Rd(n), Rd(0)<0. Сдвигает все разряды регистра Rd влево. Нулевой разряд сбрасывается в «0», а седьмой разряд загружается в флаг С регистра SREG. Эквивалентна команде ADD Rd,Rd.

LSR Rd (логический сдвиг вправо) Rd(n)<Rd(n+1), Rd(7)<0. Сдвигает все разряды регистра Rd вправо. Седьмой разряд сбрасывается в «0», а нулевой разряд загружается в флаг С регистра SREG.

ROL Rd (сдвиг влево через перенос) Rd(0)<C, Rd(n+1)<Rd(n), C<Rd(7). Сдвигает содержимое регистра Rd влево на один разряд. В нулевой разряд заносится содержимое флага С регистра SREG, а седьмой разряд загружается в флаг С. В комбинации с командой LSL данная команда может использоваться для умножения многобайтных чисел (как знаковых, так и беззнаковых) на два. Эквивалентна команде ADD Rd,Rd. Значение флага V равно "ИСКЛЮЧАЮЩЕМУ ИЛИ" флагов N и С после сдвига.

ROR Rd (сдвиг вправо через перенос) Rd(7)<C, Rd(n)<Rd(n+1), C<Rd(0). Сдвигает содержимое регистра Rd вправо на один разряд. В седьмой разряд заносится содержимое флага С регистра SREG, а нулевой разряд загружается в флаг С. В комбинации с командой ASR данная команда может использоваться для деления многобайтных знаковых чисел на два. А в комбинации с командой LSL – для деления многобайтных беззнаковых чисел на два. Значение флага V равно "ИСКЛЮЧАЮЩЕМУ ИЛИ" флагов N и С после сдвига.

BSET s (установка разряда регистра SREG) SREG.s=1. Устанавливает заданный разряд регистра SREG. Остальные разряды регистра SREG остаются без изменения.

BCLR s (сброс разряда регистра SREG) SREG.s=0. Сбрасывает заданный разряд регистра SREG. Остальные разряды регистра SREG остаются без изменения.

SEC (установка флага переноса) С = 1. Устанавливает в «1» флаг переноса С регистра SREG. Эквивалентна команде BSET 0.

CLC (сброс флага переноса) С = 0. Сбрасывает в «0» флаг переноса С регистра SREG. Эквивалентна команде BCLS 0.

Здесь были приведены некоторые команды установки флагов. Установка остальных флагов регистра SREG происходит аналогично при помощи соответствующих команд, приведенных в списке команд. Также аналогично происходит установка и сброс разрядов регистра ввода/вывода, РОН, загрузка и запись разряда РОН из и флаг Т регистра SREG.

Пример программы

Далее предложена программа, реализующая переключательную функцию в виде:

Описание алгоритма программы (рис. 5.1)

Значения Х будут храниться в регистре temp в виде числа, младшие три бита которого будут содержать значения X1, X2, Х3, т.е. число 03(0011) соответствует Х3=0, Х2=1, Х1=1. Первоначально необходимо маскировать те значения Xi, которые не входят в данное выражение Yj. Это осу­ществляется при помощи операции “Логическое И” между числом, содержащим значения Х, и маской Aj. В маске в разрядах соответствующих разрядам присутствующих в дан­ном выражении ставится 1, во всех оставшихся разрядах ставится 0: A1=07(0111), А2=03(0011), Аз=04(0100). Теперь инвертируем те Xi, которые входят в выражение Yj со знаком инверсии. Эта операция осуществляется путем суммирования по мо­дулю два (Исключающее ИЛИ) полученного ранее на этапе маскирования входного набора аргументов с константами Bj, которые содержат 1 на позициях, соответствующим инвертируемым разрядам. В нашем случае B1=03(0011), B2=0, В3=04(0100). Если теперь значения всех аргументов входящих в Yj равны 1, то функция Y(X)=1. Это условие проверяется следующим образом: проводится опе­рация “Исключающее ИЛИ” между полученным набором аргументов и кон­стантами Aj. Если результат равен 0, значит, все Х были равны 1 и Y(X)=1.

Алгоритм и программа рассмотренной функции приведены ниже.

Листинг программы №5

.include "C:\VMLAB\include\m128def.inc"; определение библиотеки МК ;ATmega128, при условии расположения программы VMLAB на ;локальном диске С

;Описание переменных

.DEF temp=r16

.DEF Y=r17

.DEF work=r18

.DEF A1=r19

.DEF A2=r20

.DEF A3=r21

.DEF B1=r22

.DEF B2=r23

.DEF B3=r24

.ORG $0 ;Начало таблицы переходов

reset: ; начальная метка

rjmp start ; Переход на начало основной программы

reti ; Addr $01

reti ; Addr $02

reti ; Addr $03 Вектора прерываний МК ATmega128.

reti ; Addr $04 Приведены вектора с адреса $01 по адрес $10.

reti ; Addr $05 Полностью вектора прерываний представлены

reti ; Addr $06 в приложении с назначением прерываний

reti ; Addr $07 (внешних и внутренних).

reti ; Addr $08

reti ; Addr $09

reti ; Addr $0A

reti ; Addr $0B

reti ; Addr $0C

reti ; Addr $0D

reti ; Addr $0E

reti ; Addr $0F

reti ; Addr $10

Start: ldi temp,$4 ;Загрузить значения Х в temp

ldi Y,$0 ;Присвоить Y(X) значение 0

ldi A1,$7 ;Загрузить значения констант A1

ldi A2,$3 ;A2

ldi A3,$4 ;A3

ldi B1,$3 ;Загрузить значения констант B1

ldi B2,$0 ;B2

ldi B3,$4 ;B3

mov work,temp ;Занести значения Х в рабочий регистр

and work,A1 ;Маскировать отсутствующие в Y1(X) аргументы

eor work,B1 ;Выполнить операцию "Исключающее ИЛИ"

cp work,A1 ;Проверить условие Y1(X)=1

breq M1 ;Переход по метке M1 при выполнении условия

mov work,temp ;Занести значения Х в рабочий регистр

and work,A2 ;Маскировать отсутствующие в Y2(X) аргументы

eor work,B2 ;Выполнить операцию "Исключающее ИЛИ"

cp work,A2 ;Проверить условие Y2(X)=1

breq M1 ;Переход по метке М1 при выполнении условия

mov work,temp ;Занесение значения Х в рабочий регистр

and work,A3 ;Маскировать отсутствующие в Y3(X) аргументы

eor work,B3 ;Выполнить операцию "Исключающее ИЛИ"

cp work,A3 ;Проверка условия Y3(X)=1

breq M1 ;Переход по метке М1 при выполнении условия

rjmp End ;Перейти на конец программы

M1: ldi Y,$1 ;Присвоить Y значение 1

End:

.Exit ;Выход из программы

На рис. 5.1 Алгоритм реализации переключательной функции

Листинг проектного файла №5

.MICRO " ATmega128" ;Указание типа микроконтроллера (ATmega128)

.PROGRAM " Project5.asm" ; Ассемблируемый файл

.TARGET " Project5.hex" ; Файл машинного кода

.TRACE ; Включение трассировки

.POWER VDD=5 VSS=0 ; Задание напряжения питания 5 В

.CLOCK 4meg ; Задание тактовой частоты работы микроконтроллера

.STORE 250m ; Время регенерации сигнала осциллографа

Соседние файлы в папке Новая папка (1)