miercuri, 12 martie 2014

Архитектура микроконтроллера. Распределение памяти


        Прежде , чем перейти к анализу архитектуры микроконтроллера дадим некоторые определения:
       Микроконтроллер-схема, которая может выполнять любую функцию в зависимости от программы,которая должна быть выполнена.
       Программа-это набор инструкций(команд),которые выполняются друг за другом.
       Команда(инструкция)-это действие,которое выполняет ядро микроконтроллера.
   Ядро-основная часть микроконтроллера,которая выполняет команды(инструкции) программы.
 Микроконтроллер-мини-компьютер,который содержит в себе ядро микропроцессора,память программ и периферийные модули.В общем случае МК принимает информацию от входного интерфейса,перерабатывает её и выдаёт результат на выходной интерфейс.


Архитектура ядра Микроконтроллера

Микроконтроллер серии AVR обладает 8-битной RISC-архитектурой,составленной по принципу архитектуры HARVARD (Гарвардской архитектуры). Данная архитектура позволяет большинству инструкций(команд) выполняться за один такт тактового сигнала.Так,на частоте в 1 МГц тактового сигнала,микроконтроллер может выполнять до 1 000 000 операций в секунду.
Схематически,архитектура AVR может быть представлена на рисунке ниже:
PM-Память программ(Program Memory).Здесь хранятся команды(инструкции),которые будет выполнять МК.
  
PC-Счётчик команд(Program Counter).Регистр процессора,который содержит адрес текущей выполняемой команды в памяти программы(PM).Обычно счётчик автоматически увеличивается (постинкремент).Также,он может загрузить значение из CDC,что приведёт к условным и безусловным переходам.

CDC-Декодер команд.CDC настраивает ядро для выполнения выбранных команд,с учётом значений флагов в регистре состояния SREG.
  
ALU-Арифметико-логическое устройство - выполняет арифметические и логические команды и вычисления.Данные в АЛУ поступают через РОН(Регистр Общего Назначения)(из 32),объеденённым в один регистровый файл.Благодаря этому АЛУ может выполнять одну операцию(чтение содержимого регистров,выполнение операции и запись результата в регистровый файл) за такт.
  
GPR-Регистры общего назначения(РОН).Регистры для работы МК. Обработка данных для архитектуры AVR  ограничена использованием хотя бы одного регистра общего назначения,т.е.  в любой команде обработки данных или передачи данных участвует один регистр общего назначения(может быть и больше).

RAM-Оперативное запоминающее устройство(Random Access Memory)(ОЗУ).Память для  работы с большим объёмом данных.

SREG-Регистр состояния ядра МК(Status Register). Любая операция обработки данных , связанная с их обработкой посредством АЛУ, "отдаёт отчёт" в регистр SREG,изменяя флаги данного регистра,предоставляя дополнительные данные о результате операции.Содержимое этого регистра является доступным как для записи,там и для чтения.
       I — флаг разрешения прерываний. Когда установлен в 1 — прерывания разрешены.
      T — пользовательский флаг.
          Кроме того, есть две команды которые позволяют в этот бит записать любой бит любого из 32 регистров общего назначения R0-R31 . Это команды BLD Rn,bit и BST Rn,bit
    H — флаг полупереноса. Это если произошел заем бита из старшей половины байта в младшую. То есть когда из числа 0001 0111 пытаются вычести 0000 1000, то происходит заем бита из более старшего разряда, так как младшая тетрада уменьшаемого меньше чем младшей тетрады вычитаемого. Используется этот флаг в некоторых математических операциях.
      S — флаг знака. 1 — значит минус. При вычислении чисел со знаком он возникает если после арифметической операции возник отрицательный результат. Флаг S = V XOR N.
   V — Флаг переполнения дополнительного кода. Это если мы считаем число в дополнительном коде со знаком и оно вылезло за пределы регистра.  
    Например, число -61 как его получить? Вычтем его из нуля 00 — 61 = 39 Заняли из старшего разряда. Проверим столбиком:
                  61
                  +
                  39
                  00
Вот двоичный дополнительный код работает точно по такому же принципу. А в процессоре есть команды для перевода числа из в дополнительный код за одну команду.
     N — флаг отрицательного значения. Если в результате арифметической операции 7 бит результата стал 1, то этот флаг тоже станет 1.
       Z — флаг нуля. Если в результате какой-либо операции получился ноль, то этот флаг = 1. 
     С — флаг переноса. Если в результате операции произошел выход за границы байта, то выставляется этот флаг. 

I\O-Reg-регистры для доступа к модулям периферии (input output registers) таким как: GPIO, Ext INT, TIMER и др.

Выполнение команд в ядре МК.

Команда выделяется программным счётчиком(PC) в памяти программ(PM) и передаётся в декодер(CDC).CDC декодирует команду и генерирует сигнал конфигурации ядра.

В случае,если команда является единственной для обработки,арифметической или логической,генерируется сигнал для выбора функции в АЛУ и адреса для левого(LA) и правого(RA) операндов. Адрес для сохранения данных совпадает с адресом левого операнда(LA). Вместе с выводом результата генерируются биты состояния процессора,которые сохраняются в регистре состояния SREG.

В случае,когда команда является командой условного перехода и,если,условие удовлетворяется (True) ,проверяя биты регистра состояния SREG,создаётся адрес перехода в программном счётчике.Таким же образом создаётся адрес перехода для команд безусловного перехода,но не берутся в счёт значение битов состояния SREG.

Для операций переноса создаются адреса к модулям памяти между которыми будет происходить перенос.Здесь мы выявили тот факт,что в МК AVR возможны операции переноса,в которых обязательно должен присутствовать хотя бы один регистр общего назначения(РОН)(GPR).

Организация памяти в архитектуре AVR

Перечислим несколько типов памяти МК AVR:
PM-Память программ.
GPR-Регистры общего назначения(РОН).
I/O-Регистры периферии(ввода/вывода).
RAM-ОЗУ.
EEPROM-электрически стираемое перепрограммируемое ПЗУ(Electrically Erasable Programmable Read-Only Memory).
Блоки памяти сгруппированы в 3 адресных пространства: память программ,память данных и память EEPROM,представляющих 3 сегмента: сегмент кода,сегмент данных и сегмент EEPROM.

В отличии от сегмента программ и сегмента EEPROM,сегмент данных разделён на 3 части,как и показано на фигуре выше: регистры общего назначения(32 регистра),регистры ввода/вывода(64 регистра) и RAM(внутренняя-внутри самого МК,внешняя-можно добавить самому).