duminică, 17 noiembrie 2013

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

      
   Микроконтроллер AVR является МК типа RISC с Гарвардской архитектурой, которая позволяет выполнение большинства операций за один такт. Это представление связано с тем, что они включают в себя расходы времени по передаче данных из памяти программ. Исключением для правила - "все команды выполняются за один такт", является выполнение команд с данными в 16 бит, переходы и т.д.
    Команда ASM представляет собой действие, которое может выполнить МК. Команда состоит из имени и рабочих операндов, левого и правого. Существуют команды с одним операндом или вовсе без операндов.
Левый операнд хранит в себе результат данной выполненной команды.В качестве операндов могут быть: РОН(R), константа(k), адрес памяти или периферийный регистр(P).
Команда ASM имеет следующий формат:

<мнемоника> <левый операнд>, <правый операнд>

мнемоника - имя команды, является аббревиатурой  задания, которое он выполняет.
операнд - адрес доступа к ресурсу МК или константа для операций с константами.


    Язык ASM подразумевает, что каждая команда переводится непосредственно в машинный код. Мнемоника команды на самом деле является представлением машинного кода в форме понятной программисту. Для операций передачи , правый операнд служит источником , а левый приёмником. Для арифметической обработки или логической операции, как правило, проходящими между операндами результат сохраняется в левом операнде, называемый операндом назначения.
    Доступ посредством адресов операндов часто неудобно, поэтому они  заменяются именем констант. Например, для РОН - R1, R2 ... R31. Периферийные регистры - PORTA, PINB, DDRC. Обычно эти адреса описаны в специальных файлах, которые могут быть включены в директиву предварительной обработки следующим образом:

  .include "<tip_mcu>def.inc"

 Пример: .include "m16def.inc" - включает константы для работы МК ATmega16


    Мы выделяем несколько путей адресации через ресурсы микроконтроллера: 
  • Прямая адресация - включает в себя изменения данных непосредственно в регистре (COM), если операции с одним операндом (LDI,TST);
  • Прямая адресация с двумя регистрами - адресация данных , находящихся в двух регистрах одновременно;
  • Прямой доступ к памяти - ситуация, когда один операнд - РОН, а другой адрес памяти(LDS, STS);
  • Прямой доступ к периферии- (IN, OUT);
  • Косвенная адресация-ситуация,когда адрес находится в одном из регистров x,y,z;
  • Доступ к памяти с прединкриментом;
  • Косвенная адресация со смещением;
  • Прямая адресация к константам программы;
  • Косвенный доступ к памяти программ.
    Любая передача данных или обработка данных предполагает участие регистра общего назначения(РОН). При использование регистров общего назначения выделяется конкретные архитектурные ограничения.
  • R0 .. R15 - не доступны для задач с константами
  • R1: R0 - всегда служит в качестве места назначения результата операции MUL независимо от операндов. 
  • R26 .. R30 - формирует три пары регистров для команд, которые требуют косвенного доступа к ресурсам МК.
               R27:R26 - X - XH:XL
               R29:R28 - Y - YH:YL
               R31:R30 - Z - ZH:ZL



AVR микроконтроллеры имеют 90 - 120 набор команд, которые могут быть сгруппированы в следующие категории: 



  • Команды логических операций; 
  • Команды арифметических операций; 
  • Команды для работы с битами; 
  • Команды пересылки данных; 
  • Команды передачи управления;
  • Команды контроля системы;


    Команды логических операций позволяют выполнять стандартные логические операции над байтами,такие как логическое умножение (И), логическое сложение (ИЛИ), операцию "Исключающее ИЛИ" и т.д. К этой группе можно отнести также команды очистки/установки регистров и команду перестановки полубайтов. Операции производятся между РОН, либо между регистром и константой, результат сохраняется в РОН. Все команды из этой группы выполняются за один такт.
    Команды арифметических операций и команды сдвига выполняют, как сложение, вычитание, сдвиг(вправо, влево), инкрементирование, декрементирование, а также умножение. Все операции производятся над РОН. При этом МК оперирует как знаковыми так и беззнаковыми числами. Почти все команды выполняются за один такт, оперирующие 2 - байтными значениями, за двa.
    Команды битовых операций выполняют установку или сброс заданного бита РОН или РВВ. Причём для изменения битов регистра состояния SREG имеются отдельные команды. Следует помнить, что в командах CBR и SBR операндом является битовая маска, а не номер бита. Для получения битовой маски из номера бита следует воспользоваться оператором "сдвиг влево"("<<").
    Команды пересылки данных пересылают содержимое ячеек, находящихся в адресном пространстве памяти данных. Разделение адресного пространства на три части (РОН, РВВ, ОЗУ) предопределило разнообразие команд данной группы. Пересылка данных может производиться в следующих направлениях:
РОН <-> РОН;
РОН <-> РВВ;
РОН <-> память данных.
Кроме того, этот набор команд включает в себя две команды для работы со стэком -  PUSH, POP.

    Команды передачи управления это  команды перехода, вызова подпрограмм и возврата из них и команды типа "проверка/пропуск", пропускающие следующую за ними команду при выполнении некоторого условия. Также к этой группе относятся команды сравнения, формирующие флаги регистра SREG и предназначенные, как правило, для работы совместно с командами условного перехода.

    Операции контроля системы:
  • NOP - нет операции, 1 такт.
  • SLEEP - переход в спящий режим, 3 такта.
  • WDR - сброс сторожевого таймера, 1 такт.