Режимы адресации программ и данных

Усовершенствованные RISC микроконтроллеры AVR поддерживают эффек­тивную и мощную систему адресации.

– Прямая регистровая. Адресуется отдельный регистр Rd, адрес регистра ука­зывается в битах 0..4 кода команды, операнд содержится в регистре Rd.

– Косвенная регистровая. Регистр адресуется через указатель Z-регистр (R30).

– Прямая регистровая, два регистра Rd и Rr – адреса регистров указываются в битах 0..4 (Rd) и 5..9 (Rr) кода команды. Операнды соде­ржатся в регистрах Rd и Rr. Результат помещается в регистр Rd.

– Прямая ввода/вывода. Адрес операнда содержится в битах 0..5 кода команды, адрес регистра – в битах 6..10.

– Относительная программная адресация командами RJMP и RCALL. Смещение относительно программного счетчика указывается в битах 0..11 кода опе­рации. Выполнение программы передается по адресу PC+k. Относительный адрес k лежит в диапазоне от +2кБайт до – (2кБайт – 1).

Стек подпрограмм и прерываний. Для обработки прерываний и вызовов подпрограмм исполь­зуется аппаратный стек. Аппаратный стек сохраняет значение программного счетчика – адрес возврата из подпро­грамм и программ обслуживания прерываний.

Команда RCALL и прерывания записывают значение программного счет­чика на 0 уровень стека. Данные, хранящиеся в стеке на уровнях 1 и 2, сдвигаются на один уровень вглубь. При выполнении команды RET или RETI значение программного счетчика выбирается с 0-го уровня стека, данные с уровней 1 и 2 сдвигаются на один уровень вверх.

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

Время выполнения команд. ЦПУ процессора AVR управляется системной частотой, генерируемой внешним резонатором. Внутреннее деление частоты генератора не исполь­зуется.

В процессоре организован буфер (pipeline) команд, при выборе команды из памяти программ происходит выполнение предыдущей команды. Подобная концепция позволяет достичь быстродействия 1MIPS на МГц, уни­кальных показателей стоимости, быстродействия и потребления процессо­ра.

Память ввода/вывода. Все устройства ввода/вывода и периферийные устройства МК располагаются в пространстве ввода/вывода. Различные ячейки этого про­странства доступны через команды IN и OUT, пересылающие данные между одним из регистров общего назначения (РОН) и пространством ввода/выво­да. К регистрам $00..$19 можно осуществлять побитовый доступ командами SBI и CBI. Значение отдельного бита этих регистров можно проверить командами SBIC и SBIS. Дополнительную информацию по этому вопросу мож­но найти в описании системы команд.

Регистр статуса ЦПУ (SREG) содержит следующие биты, доступные для записи и чтения.

Бит 7 - I: Общее разрешение прерываний. Для разрешения прерываний этот бит должен быть установлен в единицу. Управление отдельными пре­рываниями производится регистром маски прерываний - GIMSK/TIMSK. Если флаг сброшен (0), независимо от состояния GIMSK/TIMSK прерывания не разрешены. Бит I очищается аппаратно после входа в прерывание и вос­станавливается командой RETI для разрешения обработки следующих пре­рываний.

Бит 6 - T: Хранение копируемого бита. Команды копирования битов BLD (Bit LoaD) и BST (Bit STore) используют этот бит как источник и прием­ник обрабатываемого бита. Бит из регистра регистрового файла может быть скопирован в T командой BST, бит T может быть скопирован в бит регистрового файла командой BLD.

Бит 5 - H: Флаг половинного переноса. Этот флаг индицирует перенос из младшей половины байта при некоторых арифметических операциях. Более подробно об этом можно прочитать в описании системы команд.

Бит 4 - S: бит знака, S = N XOR V. Бит S всегда равен исключающему ИЛИ между флагами N (отрицательный результат) и V (переполнение допол­нения до двух). Более подробно об этом можно прочитать в описании сис­темы команд.

Бит 3 - V: Флаг переполнения дополнения до двух. Этот флаг поддержи­вает арифметику с дополнением до двух. Более подробно об этом можно прочитать в описании системы команд.

Бит 2 - N: Флаг отрицательного результата. Этот флаг указывает на отри­цательный результат выполнения различных арифметических и логических операций. Более подробно об этом можно прочитать в описании системы команд.

Бит 1 - Z: Флаг нулевого результата. Этот флаг индицирует нулевой ре­зультат различных арифметических и логических операций. Более подробно об этом можно прочитать в описании системы команд.

Бит 0 - C: Флаг переноса. Этот флаг индицирует перенос в арифметичес­ких и логических операциях. Более подробно об этом можно прочитать в описании системы команд.

Регистр управления ЦПУ (MCUCR) содержит биты общего управления МК. Ниже приводится назначение битов данного регистра.

Бит 5 – Sleep Enable – Разрешение режима Sleep. Этот бит должен быть установлен в 1, чтобы при выполнении команды SLEEP процессор переходил в режим пониженного энергопотребления (Sleep). Для использования режи­ма пониженного энергопотребления этот бит рекомендуется устанавливать в 1 до исполнения команды SLEEP.

Бит 4 – Sleep Mode – Режим Sleep. Этот бит выбирает один из доступ­ных режимов пониженного энергопотребления. Если бит сброшен (0), то в ка­честве режима Sleep выбирается холостой режим (Idle mode). Если бит установлен, выбирается экономичный режим (Power down). Особенности каждого из режимов будут рассмотрены ниже.

Биты 3,2 – зарезервированы и читаются как 0.

Биты 1,0 – ISC01, ISC00 – биты управления срабатыванием прерывания 0. Внешнее прерывание активируется выводом INT0, если установлен флаг I регистра состояния SREG и установлена соответствующая маска в регистре GIMSK. Срабатывание по уровню и фронтам задается следующим образом.

ISC01 ISC00 Описание
    Запрос прерывания генерируется по низкому уровню на входе
    Зарезервировано
    Запрос на прерывание по спадающему фронту на входе
    Запрос на прерывание по нарастающему фронту на входе

Примечание. При изменении битов ISC01 и ISC00 прерывания по входу INT0 должны быть запрещены сбросом бита разрешения прерывания в регис­тре GIMSK. Иначе прерывание может произойти при изменении значения би­тов.

Аппаратный сброс. В МК AVR предусмотрены три источника сброса:

– сброс по включению питания (процессор сбрасывается при подаче питания на выводы VCC и GND);

– внешний сброс (процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты);

– сброс от сторожевого таймера (процессор сбрасывается по оконча­нии времени сторожевого таймера, если разрешена его работа).

Во время сброса все регистры ввода/вывода устанавливаются в на­чальные значения, программа начинает выполняться с адреса $000, по этому адресу должна быть записана команда RJMP – относительный переход на программу обработки сброса. Если в программе не разрешаются преры­вания и векторы прерываний не используются, в первых адресах памяти может быть записана программа.

Контроллер прерываний предназначен для аппаратного обеспечения запуска логики обслуживания прерываний.

Младшие адреса памяти программ отведены под векторы прерываний, список векторов прерываний приведен в табл. 10.3. Этот список также оп­ределяет и приоритет различных прерываний. Чем младше адрес, тем выше приоритет прерывания. Наивысший приоритет имеет сброс, за ним INT0 и т.д.

Таблица 10.3

Номер вектора Адрес Источник Описание прерывания
  $000 RESET Вывод сброса и сброс от сторо­жевого таймера
  $001 INT0 Внешнее прерывание 0
  $002 TIMER0,OVF0 Переполнение таймера/счетчика 0
  $003 ANA_COMP Аналоговый компаратор

Чаще всего используется следующая установка векторов прерываний в программе:


 

Адрес Метка Код Комментарий
$000 rjmp RESET ; обработка сброса
$001 rjmp EXT_INT0 ; обработка IRQ0
$002 rjmp TIM0_OVF ; обработка переполнения таймера 0
$003 rjmp ANA_COMP ; обслуживание аналогового компаратора
;    
$004MAIN: <instr> xxx ; начало основной программы

 

Таймеры/счетчики. В MK AVR предусмотрены 8-разрядные и
16-разрядные таймеры/счетчики общего назна­чения. Любой из них можно использовать как таймер с внутрен­ним источником импульсов или как счетчик, управляемый внешними счетны­ми импульсами.

Таймер/счетчик может получать импульсы тактовой час­тоты CK, импульсы с предварительного делителя (CK/8, CK/64, CK/256 или CK/1024), импульсы с внешнего вывода или быть остановлен соответ­ствующими установками регистра TCCRх. Флаг переполнения таймера нахо­дится в регистре TIFR. Биты управления таймером расположены в регистре TCCRх. Разрешение и запрещение прерываний от таймера управляются реги­стром TIMSK.

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

Сторожевой таймер (WDT) работает от отдельного встроенного генератора, работающего на частоте 1 МГц. Управляя предварительным делителем сто­рожевого таймера, можно задавать интервал сброса таймера от 16 до 2048 периодов. Частота встроенного RC генератора зависит от напряжения пи­тания процессора.

Команда WDR сбрасывает сторожевой таймер. Для работы сторожевого таймера можно выбрать одно из 8-ми значений частоты, что позволяет в широких пределах изменять время между исполнением команды WDR и сбро­сом процессора. При отработке периода работы сторожевого таймера, если не поступила команда WDR, МК сбрасывается, выполнение программы продолжается с вектора сброса.

Энергонезависимое ОЗУ (EEPROM) предназначено для хранения данных при отключенном питании МК. Для доступа к EEPROM служат три регистра:

– регистр адреса EEPROM EEAR – в этот регистр перед обращением к EEPROM записывается адрес ячейки памяти, к которой производится обращение;

– регистр данных EEPROM EEDR – в этом регистре перед записью должны быть размещены записываемые данные, а после операции чтения в нем будут расположены считанные из EEPROM данные;

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

Порты ввода/вывода – это 8-разрядные двунаправленные порты. Для обслуживания каждого порта отведено три регистра: регистр данных PORTх, регистр направления данных DDRx и регистр адреса выводов порта PINx. Регистры адреса выводов портов предназначены только для чтения, в то время как регистры данных и регистры направления данных – для чтения/записи. То есть PINх не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов соответствующего порта. При чтении PORTх читаются данные из регистра-защелки, при чтении PINх читаются логичес­кие значения, присутствующие на выводах порта.

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

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

Ниже приводится система команд MK AVR.

Более подробную информацию по MK AVR можно узнать в [13, 14] или на сайтах www.atmel.com и www.argussoft.ru.

 

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: