МПС

Структура МП и МПС (Лекция)

ПЛАН ЛЕКЦИИ

1. Основные функции и структура микропроцессора

2. Устройство управления микропроцессора

3. Состав микропроцессорной системы

4. Память микропроцессорных систем

5. Работа со стековой памятью

6. Методы адресации операндов в командах Ассемблера AVR-контроллера

7. Регистры ввода/вывода AVR микроконтроллера

8. Работа регистров цифрового ввода/вывода

 

1. Основные функции и структура микропроцессора

Микропроцессор (МП) выполняет 2 функции:

1. Вычисляет, т.е. выполняет над числовыми данными арифметические и логические операции.

2. Управляет потоками данных, организуя как сами вычисления, так и их требуемую последовательность.

Любой МП (Рис.3) состоит из следующих функциональных узлов:

1. Арифметико-логическое устройство (АЛУ).

2. Регистры.

3. Устройство управления.

 

Рис. Функциональная схема микропроцессора

ВМД – внутренняя магистраль данных,

МА – магистраль адреса,

МУ – магистраль управления,

МД – магистраль данных.

АЛУ – это комбинационный цифровой автомат, имеющий два входа и один выход. АЛУ выполняет арифметические и логические операции с двумя входными сигналами, каждый из которых представляет собой набор из 8-ми двоичных разрядов.

Регистром является устройство для хранения 8-ми разрядного двоичного числа. Оно состоит из восьми триггеров, каждый из которых может хранить один двоичный разряд.

Регистровый файл AVR-контроллера состоит из 32 однобайтных регистров, имеющих имена R0-R31 и сквозные адреса в пространстве ОЗУ 0-31. Шесть регистров R26-R27, R28-R29, R30-R31 выступают как парные регистры X, Y, Z. Они могут работать как в паре, так и независимо. Эти парные регистры предназначены для хранения адресов ячеек памяти.

Регистр РС - программный счетчик, хранит двухбайтный адрес ячейки памяти, где расположен первый байт команды, которая будет выполняться микропроцессором на следующем шаге. Пример: при включении микропроцессора РС=0016, после считывания первого байта первой команды, определяется длина команды, которая складывается с содержимым регистра РС. Таким образом, после выполнения команды в регистре РС находится адрес первого байта следующей команды.

Регистр SP – указатель стека предназначен для управления специализированной областью стековой памяти, адресация в которой осуществляется по содержимому регистра SP. Стековая память расположена по старшим адресам области ОЗУ (Область «Data» в пакете «AVRStudio»).

Содержимое регистров PC и SP можно наблюдать в окне Workspace\IO\Processor.

РП – регистр признаков, флаговый регистр, или регистр статуса.

Этот регистр предназначен для хранения результатов контроля выполнения команды. Он состоит как минимум из пяти информационных двоичных разрядов.

Рис. Структура РП для процессора К-580

Разряд С называется флагом переноса и становится равным единице после выполнения арифметической команды, если результат операции не умещается в восьми битном регистре приемника. Пример: 250+50=44, С=1; 250+1=251, С=0.

Рис. Структура РП для AVR контроллера

Zфлаг нуля. Принимает значение 1, если по окончании арифметической операции во всех разрядах регистра получателя или регистра приемника содержатся нули. Пример: 250+6=0, Z=1; 250+1=251, Z=0.

Nфлаг отрицательного результата, дублирует старший разряд регистра получателя после выполнения арифметической операции.

Пример: 120+7=127, N=0; 120+8=-128, N=1

Vфлаг переполнения, указывает на верность (V=0) или ошибочность (V=1) результатов арифметической операции со знаковыми числами.

Пример: 100+20=120, V=0; 100+29=-127, V=1.

Sфлаг знака, S=N xor V, где xor-логическая операция «исключающая ИЛИ»

Н – флаг дополнительного переноса, указывает на наличие переноса из младшей тетрады в старшую при выполнении арифметической команды.

Пример: 10+1=11, H=0;15+1=16, H=1.

Т – флаг трассировки.

I – флаг прерывания.

Содержимое регистра PП или регистра статуса SREG можно наблюдать в окне Workspace\IO\CPU\SREG.

 

 

2. Устройство управления микропроцессора

Устройство управления МП обеспечивает необходимую последовательность действий МП при выполнении программы, состоящей из команд записанных в ПЗУ (Memory/program).

УУ состоит из дешифратора команд и формирователя сигналов управления (ДШК и ФСУ).

Рис. Устройство управления МП

 

При выполнении любой команды программы содержимое программного счетчика загружается в магистраль адреса МА (смис.7 – схема микропроцессорной системы), одновременно формируется сигнал чтения памяти программ и в ответ на эти сигналы содержимое первого слова команды, хранящейся в ячейке памяти программ, загружается в МД (магистраль данных), откуда поступает в ДШК УУ. После этого содержимое регистра программного счетчика РС наращивается на единицу, подготавливая выполнение считывания очередной команды.

ДШК определяет тип команды и тип адресации операндов, в соответствии с которым УУ генерирует управляющие сигналы:

CLK – тактовые сигналы,

Mem R – сигнал считывания из памяти,

Mem W - сигнал записи в память,

IOR – сигнал считывания из регистров ввода-вывода,

IOW – сигнал записи в регистры ввода-вывода.

Пример №1:

LDI R16, 100 – ни один из управляющих сигналов не генерируется.

LDS R16, 100 – генерируется сигнал MemR.

STS 100, R16 – генерируется сигнал MemW.

LDS R16, 95 – генерируется сигнал IOR, после считывания первого байта команды, УУ определяет прямой тип адресации 2-го операнда и, для обращения к этому операнду, формируется сигнал IOR для его прочтения из ПЗУ.

 

3. Состав микропроцессорной системы

МП является частью микропроцессорной системы (МПС), состоящей из МП, устройства ввода-вывода (УВВ) информации и периферийных устройств. МПС, реализованная на одном кристалле (в одной микросхеме), называется микроконтроллером.

Рис. Микропроцессорная система

 

4. Память микропроцессорных систем

В современных микроконтроллерах память ПЗУ является «flash» памятью, которая позволяет производить перезапись ее содержимого с помощью внутрисхемного программирования при малых уровнях напряжения информационных сигналов.

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

 

5. Работа со стековой памятью

Программы на языке Ассемблер, также как и на других языках программирования, используют команды вызова подпрограмм и возврата из подпрограмм, это команды: Call и Ret. Команда Call, также как и любая другая команда ветвления, в качестве операнда использует адрес или метку точки перехода.

Команда Call вызывает выполнение последовательно двух действий:

1. Содержимое программного счетчика, равное адресу ячейки памяти ПЗУ с командой, которая будет выполняться на последующем шаге, запоминается в стековой памяти, чтобы использовать ее при возврате из подпрограммы.

2. В регистр «программный счетчик» загружается операнд команды Call, равный численному адресу первой команды вызываемой подпрограммы.

При возврате из подпрограммы по команде Ret происходит только одно действие: в программный счетчик загружается число из стековой памяти, которое было ранее туда загружено по команде Call. Соответственно после команды Ret будет выполняться команда, следующая в программе за командой Call.

Если в подпрограмме происходит обращение к другой подпрограмме (вложенные подпрограммы), то сохранение точек возврата происходит аналогичным образом.

Под стековой памятью мы понимаем область ОЗУ или Data со старшими адресами. Если рассматривать ОЗУ как набор ячеек, где ячейки с младшими адресами расположены наверху, а со старшими – внизу, то при включении данных в стек (стопка бумаг) эти данные как бы кладутся сверху ранее занятых ячеек стека, а при извлечении данных из стека, они берутся из верхних ячеек стековой памяти. Контролирует стековую память специальный регистр SP (Stack-Pointer), который содержит адрес ячейки памяти соответствующей верхушке стека. Этот регистр автоматически изменяет свое содержимое на два (увеличивает или уменьшает) при выполнении команд обращения к стековой памяти (Push, Pop, Call, Ret).

 

6. Методы адресации операндов в командах Ассемблера AVR-контроллера

В AVR-микроконтроллере существует три области памяти, каждая со своей системой адресации, начинающаяся с нулевого адреса до конечного:

1. ПЗУ – постоянное запоминающее устройство, предназначенное для хранения машинных кодов управляющих программ. Сюда загружаются объектные hex-файлы, создаваемые пакетом AVR Studio. Ассемблерные команды не могут обращаться к ячейкам памяти ПЗУ.

2. EEPROM – энергонезависимое ОЗУ. Ассемблерные команды позволяют обращаться к ячейкам памяти EEPROM.

3. ОЗУ. Ячейки памяти ОЗУ используются во всех ассемблерных командах. Эта область состоит из 3-х подобластей, которые имеют последовательную сквозную адресацию.

3.1. Первая подобласть состоит из 32 регистров, которые имеют двоякую адресацию: по имени регистра (R0-R31) или по ее числовому адресу ( или от  до ). Они используются для оперативного хранения результатов промежуточных вычислений.

3.2. Следующей подобластью ОЗУ являются регистры ввода/вывода, предназначенные для обмена информацией с периферийными устройствами (таймеры, компараторы, АЦП, порты дискретного ввода/вывода информации). Регистры ввода/вывода также как и регистры имеют двойную адресацию: по имени регистра ввода/вывода и по его числовому адресу. Числовой адрес регистра ввода/вывода также имеет двойное представление. Если регистр ввода/вывода используется в командах in или out, то адреса регистров ввода/вывода находятся в диапазоне с  по  или с  по . Эти команды принадлежат к группе команд передачи данных. Если к регистрам ввода/вывода обращаются другие команды языка ассемблера, то используется адресация в диапазоне от  до  или от  до .

Содержимое регистров и регистров ввода/вывода, определенное их именами, мы можем наблюдать в окне «Workspace». В этом окне приведена также двойная числовая адресация регистров ввода/вывода. Содержимое регистров и регистров ввода/вывода, определенное их числовыми адресами, мы можем наблюдать в окнах Memory, Register, I/O.

3.3. Область «Data». В этой области расположены ячейки памяти ОЗУ, которые используются для оперативного хранения результатов промежуточных операций. Эти ячейки имеют лишь числовую адресацию. Адрес младшей ячейки этой области  или , размер этой области определяется типом контроллера.

При работе в пакете AVR Studio при установке курсора на любую ячейку памяти ОЗУ появляется всплывающая «подсказка», в которой расположено 4 элемента, разделенных знаком двоеточие. Слева от двоеточия стоит адрес ячейки памяти в 16-ой системе исчисления, а справа – содержимое ячейки памяти в 16-ой, 10-ой, 2-ой системах исчисления. 

Первый тип адресации, который используется в командах AVR ассемблера называется» регистровый тип адресации» и подразумевает, что мы определяем расположение операнда в регистровом файле по имени регистра.

Пример №1:

ldi R16, 100 – операнд получатель или первый операнд адресуется именем регистра.

mov R1, R16 – оба операнда (и регистр получатель и регистр источник – второй операнд) определены именем регистра.

Второй тип адресации – непосредственный тип адресации – используется лишь для операнда источника (LDI R16, 100) и задает содержимое операнда в самой команде. Под непосредственным типом адресации операнда в любой команде Ассемблера мы понимаем ее определение не через адрес распространения эпого операнда (в ОЗУ), а через ее значение в самой команде (в ПЗУ).

Пример №2:

ldi R16, 100; здесь число сто загружается в регистр R16.

Третий тип адресации – прямой тип адресации. При этом числовая константа в команде обозначает адрес ячейки памяти, содержимое которой является операндом команды.

Пример №3:

lds R16, 100,

где 100 – адрес ячейки памяти, содержимое которой загружается в регистр R16.

Определить тип адресации в командах ldi и lds можно двумя способами:

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

Второй способ - Пользуясь Хелпом пакета AVR Studio в строке функции команды мы видим, что функции команды ldi символьно записываются в виде:

R16←K, а в команде ldsR16←(K),

где (K) обозначают содержимое ячейки памяти , адрес которой равен числовой константе К.

Четвертый тип адресации - Косвенный тип адресации, когда в команде указываются наименование парного регистра (или X или Y или Z), содержимое которых определяет адрес ячейки памяти, содержимое которой участвует в качестве операнда. Символьно эта операция записывается в виде: R16←((Х)).

Пример №4:

ld R16, X

R16←((X))

Косвенный тип адресации с пост инкрементом или с пред декрементом.

Этот тип адресации используется для адресации циклических вычислений и включает в себя выполнение одновременно двух действий: пост инкремент или пред декремент содержимого парного регистра и  передача одного байта информации из одного места в другое.

Пример №5:

ld R16, X+

Первое действие: R16←((X)). Второе действие: парный регистр Х наращивается на 1: Х=Х+1.

stX,R16

Первое действие: Х=Х-1. Второе действие: ((X))← R16.

 

 

7. Регистры ввода/вывода AVR микроконтроллера

 

Все регистры ввода/вывода (общее число 64) можно разделить на следующие основные группы:

1. Регистры портов цифрового ввода/вывода информации.

2. Регистры портов, обслуживающих периферийные устройства (АЦП,UART, компараторы, таймеры, внешние прерывания)

3. Регистры портов, обслуживающих работу МП.

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

Регистры ввода/вывода предназначенные для обмена информацией с внешней средой как на программном уровне, так и на аппаратном.

Регистры портов, обслуживающих работу процессора:

Регистры Spl, Sph  (стековая память)

Регистры SREG.

RAM (Read Access Memory) производит доступ к памяти, традиционно использовали для обозначения ОЗУ.

DDR A – задание направления выдачи информации для регистра.

PORT A – это непосредственно триггер, который запоминает выводимую информацию. Это устройство статистическое.

PINE A – регистр не предназначенный для хранения долговременной информации и отображающий напряжение на ножке А.

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

 

Табл. Регистры ввода/вывода AVR-контроллера

Адрес I/O (Адрес RAM)

Обозначение

Функция

$ 3D ($5D)

SPL

Указатель стека (младший байт)

$ 3E ($5E)

SPH

Указатель стека (старший байт)

$ 3F ($5F)

SPEG

Регистр статуса (признаков или флаговый регистр)

$ 00 ($20)

PINF

Выводы входов порта F

$ 01 ($21)

PINE

Выводы входов порта E

$ 02 ($22)

DDR E

Регистр направления данных порта E

$ 03 ($23)

PORT E

Регистр данных порта E

$ 04 ($24)

ADCL

Младший байт регистра данных АЦП

$ 05 ($25)

ADCH

Старший байт регистра данных АЦП

$ 06 ($26)

ADCSR

Регистр управления и статуса АЦП

$ 07 ($27)

ADMUX

Регистр мультиплексора АЦП

$ 08 ($28)

ACSR

Регистр управления и статуса аналогового ком.

$ 09 ($29)

UBRR

Регистр управления скоростью порта UART

$ 0A ($2A)

UCR

Регистр управления порта UART

$ 0B ($2B)

USR

Регистр статуса порта UART

$ 0C ($2C)

UDR

Регистр данных порта UART

$ 0D ($2D)

SPCR

Регистр управления порта SPI

$ 0E ($2E)

SPRC

Регистр статуса порта SPI

$ 0F ($2F)

SPDR

Регистр данных порта SPI

$ 10 ($30)

PIN D

Выводы входов порта D

$ 11 ($31)

DDR D

Регистр направления данных порта D

$ 12 ($32)

PORT D

Регистр данных порта D

$ 13 ($33)

PINC

Выводы входов порта C

$ 14 ($34)

DDR C

Регистр направления данных порта C

$ 15 ($35)

PORT C

Регистр данных порта C

$ 16 ($36)

PIN B

Выводы входов порта B

$ 17 ($37)

DDR B

Регистр направления данных порта B

$ 18 ($38)

PORT B

Регистр данных порта B

$ 19 ($39)

PIN A

Выводы входов порта A

$ 1A ($3A)

DDR A

Регистр направления данных порта A

$ 1B ($3B)

PORT A

Регистр данных порта A

$ 1C ($3C)

EE CR

Регистр управления EEPROM

$ 1D ($3D)

EE DR

Регистр данных EEPROM

$ 1E ($3E)

EE ARL

Младший байт адреса EEPROM

$ 1F ($3F)

EE ARH

Старший байт регистра адреса EEPROM

$ 20 ($40)

Резерв

Резерв

$ 21 ($41)

WDTCR

Регистр управления сторожевого таймера

$ 23 ($42)

Резерв

Резерв

$ 24 ($43)

OCR2

Регистр выхода таймера/ счетчик №2

$ 24 ($44)

TCNT2

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

$ 25 ($45)

TCCR2

Регистр управления таймера/счетчика №2

$ 26 ($46)

 

ICR1L

 

Младший байт регистра захвата

таймера/счетчика №1

$ 27 ($47)

 

ICR1H

 

Старший байт регистра захвата

таймера/счетчика №1

$ 28 ($48)

 

OCR1BL

 

Младший байт регистра в сравнения выхода таймера/счетчика №1

$ 29 ($49)

OCR1BH

Старший байт регистра в сравнения выхода таймера/счетчика №1

$ 2A ($4A)

OCR1AL

Младший байт регистра A в сравнения выхода таймера/счетчика №1

$ 2B ($4B)

OCR1AH

Старший байт регистра A в сравнения выхода таймера/счетчика №1

$ 2C ($4C)

TCNT1L

Младший байт таймера/счетчика №1

$ 2D ($4D)

TCNT1H

Старший байт таймера/счетчика №1

$ 2E ($4E)

TCCR1B

Регистр управления В таймера/счетчика №1

$ 2F ($4F)

TCCR1A

Регистр управления А таймера/счетчика №1

$ 30 ($50)

ASSR

Регистр статуса асинхронного режима.

 

 

8. Работа регистров цифрового ввода/вывода

 

Каждый порт ввода/вывода цифровой информации, которых в контроллере бывает несколько и которые различаются именем (А, В, С, D, E, F) реализуются тремя регистрами со следующими именами: DDRA, PORTA и PINA.

Назначение этих регистров:

DDRA предназначен для программирования направления передачи информации в порту А.

Единичное значение бита регистра DDRA определяет режим выдачи информации одноименного бита регистра порта А.

Нулевое значение бита определяет ввод информации в одноименный бит порта А.

С ножками порта А связан регистр PINA, т.е. аппаратно сформировав потенциал на соответствующей ножке цифровой сигнал, его можно считать программно из регистра PINA. При выдаче информации она запоминается в регистрах порта А (“защелкивается”).

С регистрами портов процессор работает при помощи команд «out» и «in», если используется адресация регистров ввода-вывода. При использовании сквозной нумерации пространства ОЗУ применяются все остальные команды группы передачи данных.