Микропроцессорные средства и системы. Методические указания к лабораторным работам №1-3 на стенде НТЦ-02.31.2
.pdfвозможна только к этому сегменту. Остальная часть ОЗУ может быть адресова-
на косвенно.
1.4.Арифметико-логическое устройство (АЛУ), умножитель
16-битное АЛУ позволяет выполнять за один командный такт следующие операции: сложение, вычитание, битовый сдвиг и поразрядные логические опе-
рации, включая инверсию. Результаты операций влияют на статусные флаги.
АЛУ выполняет операции с 16-битными словами или байтами в зависимости от синтаксиса инструкции.
В состав ядра входит умножитель 17 x 17 бит, который позволяет выпол-
нять операции умножения 16 x 16, 16 x 8 и 8 x 8 бит, знаковые, беззнаковые и смешанные за один командный такт.
1.5 Система тактирования микроконтроллера Микроконтроллер состоит из множества различных модулей, работу ко-
торых необходимо синхронизировать и тактировать. Для этих целей служит тактовый генератор. Тактовый генератор непрерывно формирует импульсы за-
данной частоты. Главной характеристикой генератора является частота.
Семейства dsPIC33 имеют переработанную схему конвейера – команда выполняется за 2 такта генератора. Таким образом, частота выполнения команд соответствует частоте FCY и по умолчанию FCY = FOSC / 2. Максимальная произ-
водительность dsPIC33 составляет 40 MIPS (при тактовой частоте 80 MHz).
Микроконтроллер семейства dsPIC33 имеет возможность тактирования от одного из двух внутренних и двух внешних источников, позволяя также произ-
водить их настройку и переключение. Внутренние генераторы позволяют уменьшить количество деталей и размеры платы и применяются в тех случаях,
когда не требуется высокая точность их работы. Внешние генераторы приме-
няются при необходимости точной синхронизации нескольких устройств в схеме.
11
1.6. Биты конфигурации
Микроконтроллеры семейства dsPIC33 имеют так называемые биты кон-
фигурации, задающие такие параметры работы микроконтроллера, как источ-
ник тактирования, параметры защиты от нестабильности источника питания,
параметры защиты кода программы и др. Такие биты программируются и уста-
навливаются единожды перед записью прошивки микроконтроллера и не могут быть изменены программно.
Биты конфигурации микроконтроллера семейства dsPIC33 объединены в
4регистра:
-FOSC – регистр конфигурации тактового генератора;
-FWDT – регистр конфигурации сторожевого таймера;
-FBORPOR – регистр конфигурации контроля напряжения питания;
-FGS – регистр конфигурации сегмента кода.
1.7. Программная модель микроконтроллера В качестве рабочих используются 16 регистров процессора (обозначае-
мых W0…W15), которые могут функционировать как регистры данных или ад-
ресов. Все регистры ортогональны с точки зрения системы команд, то есть мо-
гут быть использованы в качестве операнда инструкции. Некоторые инструк-
ции могут использовать в качестве операндов или регистров сохранения ре-
зультата только определенный регистр или регистровую пару.
В регистре W15 содержится указатель стека (StackPointer – SP), который автоматически модифицируется при обработке исключений, вызовов подпро-
грамм и прерываний. Тем не менее, регистр W15 можно использовать в ин-
струкциях в качестве обычного рабочего регистра. Во многих случаях такое ис-
пользование упрощает манипуляции с указателем стека.При инициализации микроконтроллера в регистр W15 записывается значение 0x0800, и это обеспе-
чивает установку указателя стека на начало области памяти, которая доступна
12
пользователю. Указатель стека всегда декрементируется перед извлечением значения из стека и инкрементируется после помещения значения в стек.
Таблица 1
Биты регистра SR
Обозначение |
OA |
OB |
SA |
SB |
OAB |
SAB |
DA |
DC |
|
|
|
|
|
|
|
|
|
Номер бита |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
|
|
|
|
|
|
|
|
|
Обозначение |
|
IPL<2:0> |
|
RA |
N |
OV |
Z |
C |
|
|
|
|
|
|
|
|
|
Номер бита |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Таблица 2
Значение некоторых битов регистра SR
Номер |
Обозначение |
Описание |
|
бита |
|||
|
|
||
7-5 |
IPL<2:0> |
Приоритет прерываний процессора |
|
3 |
N |
Бит отрицательности АЛУ |
|
|
|
N = 1: результат вычисления был отрицательный |
|
|
|
N = 0: результат вычисления был неотрицательный |
|
2 |
OV |
Бит переполнения АЛУ |
|
|
|
Бит используется для вычислений со знаковыми числа- |
|
|
|
ми. Индицирует, было ли переполнение, которое приве- |
|
|
|
ло к тому, что бит знака изменил состояние. OV = 1: пе- |
|
|
|
реполнение произошло |
|
|
|
OV = 0: переполнение не произошло |
|
1 |
Z |
Бит ноля АЛУ |
|
|
|
Z = 1: действие, влияющее на бит ноля, было выполнено |
|
|
|
Z = 0: последнее действие, влияющее на бит ноля, при- |
|
|
|
вело к его сбросу |
|
0 |
C |
Бит переноса АЛУ |
|
|
|
C = 1: произошёл перенос старшего бита результата |
|
|
|
C = 0: переноса старшего бита результата не произошло |
Процессор микроконтроллеров dsPIC33 имеет 16 битный регистр состоя-
ния (StatusRegister – SR). Младшая часть регистра состояния (SRL) содержит
флаги арифметических операций (нуля, переноса, переполнения и знака), а также
13
3 бита приоритета (IPL2…IPL0), в которых устанавливается текущий приоритет прерываний процессора. Биты регистра представлены в таблицах 1 и 2.
1.8. Режимы адресации
Инструкции процессора dsPIC33 могут быть регистровыми и адресными.
Основное различие между этими типами инструкций состоит в том, что регистро-
вые инструкции модифицируют содержимое регистров, в то время как адресные инструкции используют содержимое рабочих регистров для доступа к данным,
находящимся в памяти. В свою очередь адресные инструкции могут быть как с прямой регистровой адресацией, так и с косвенной регистровой адресацией.
Прямая регистровая адресация используется для доступа к содержимому
16 рабочих регистров W0…W15, причем обращение возможно, как к целому слову (16 бит), так и к байту.
Косвенная регистровая адресация применяется для доступа к любой ячей-
ке памяти данных посредством формирования исполнительного адреса данных по содержимому одного или нескольких рабочих регистров. Таким образом, со-
держимое рабочего регистра или регистров является указателем на область па-
мяти данных.
Примеры применения различных методов адресации представлены ниже:
- прямая адресация, адрес операнда указывается непосредственно в опе-
рационном слове инструкции. Операнд должен быть расположен в области
NearDataSpace (первые 8 кБайт ОЗУ):
add 0x900, W0 ; Сложение значения по адресу 0x900 с W0. ;Результат сохраняется в W0
- расширенный режим инструкции mov – прямая адресация, но может ад-
ресоваться вся память ОЗУ
mov 0x2500, W7 ; Сохранение значения по адресу 0x2500 в регистр W7
- прямая адресация регистров. В качестве операндов используются значе-
ния рабочих регистров:
14
ior W0, W2, W5 ;Поразрядное логическое ИЛИ регистров W0 и W2, ;сохранение результата в W5
- косвенная адресация – может использоваться в большинстве инструк-
ций:
add W4, [W5], [W6] ;Сложение W4 со словом по указателю W5, ;сохранение результата по указателю W6
- косвенная адресация с пре/пост инкрементом и декрементом, при этом учитываются правила адресной арифметики в зависимости от типа операнда
(байт или слово):
mov [++W0], [W1] ;Увеличение указателя w0 на 2, перемещение значения
;по указателю W0 в ячейку, на которую указывает W1,
- косвенная адресация со смещением:
mov [W4 + W5], [W6++] ;Получение указателя на ячейку операнда,
:путем сложения W4 и W5, перемещение значения по полученному
;указателю по адресу W6, увеличение значения W6 на 2
Поддержка различных методов адресации позволяет получать очень ком-
пактный код при использовании компиляторов с языков высокого уровня.
1.9. Система команд
16-битные микроконтроллеры Microchip имеют расширенный набор ин-
струкций, большинство из которых поддерживает операции типа «чтение-
модификация-запись», что позволяет работать с данными напрямую в ОЗУ, не используя рабочие регистры.
Семейство dsPIC33 имеет 83 инструкции (включая инструкции DSP-
ядра). Почти все инструкции выполняются за один командный такт. В зависи-
мости от типа операндов, инструкции могут быть слово-, байтлибо бит-
ориентированными. Большинство слово- и байт-ориентированных инструкций являются трехоперандными (типа A = B + C). Большинство бит-
ориентированных инструкций имеют два операнда.
15
Отдельно стоит отметить «пустые» команды NOP и NOPR не выполняющие ни каких действий и необходимые лишь для нормирования выполнения подпро-
грамм по количеству машинного времени. В дальнейшем описании приводятся только основные команды и их описание, которые могут понадобиться для вы-
полнения лабораторных работ и ознакомления с особенностями написания про-
грамм на ассемблере. Для более подробного знакомства с командами требуется обратиться к полному руководству программиста для dsPIC контроллеров.
Команды перемещения
В командах перемещения используется хотя бы один регистр. Регистро-
вые инструкции могут использовать W регистр как регистр данных или ре-
гистр, в который помещается смещение адреса.
Основной командой перемещения является команда MOV (от. анг.
MOVE – перемещать, передвигать), которая в зависимости от формата переме-
щаемых данных может быть трех типов:
-MOV для 16-и битных данных в формате слова;
-MOV.B для 8-и битных данных в формате байта;
-MOV.D для 32-х битных данных в формате двойного слова.
После выбора конкретной команды сначала указывается источник дан-
ных для перемещения (константа, содержимое регистра, косвенный адрес), а
затем адрес назначения (содержимое регистра, косвенный адрес). Еще одной командой перемещения является EXCH (от анг. Exchange - обмен), позволяю-
щая осуществить обмен содержимым между двумя регистрами.
Команды математических операций
Микроконтроллеры семейства dsPIC33 обладают обширным набором ин-
струкций для выполнения математических и логических действий над операн-
дами. В АЛУ процессора предусмотрено выполнение 4 основных математиче-
ских действий над целыми знаковыми и беззнаковыми числами: сложения, вы-
читания, умножения и деления. Для каждого из этих действий предусмотрен ряд
16
инструкций, в которых используются различные типы адресации, делающие выполнение таких операций весьма эффективным.
К математическим инструкциям относятся следующие:
-add (от анг. addition) – сложение;
-sub (от анг. subtract) – вычитание;
-inc (от анг. increment) – увеличение на 1;
-dec (от анг. decrement) – уменьшение на 1;
-mul.xx (от анг. multiply) – умножение;
-div.xx (от анг. divide) – деление,
где xx – указывает тип и длину операндов. Применяются следующие обозначе-
ния:
-S (от анг. signed) – знаковая переменная;
-U (от анг. unsigned) – беззнаковая переменная;
-D (от аг. doubleword) – двойное слово.
Далее приведено несколько примеров использования этих инструкций.
mov #34, W0
add W0, #7, W1
В этой программе команда add имеет 3 операнда. К содержимому реги-
стра W0 прибавляется 7, и результат записывается в регистр W1. После выпол-
нения операции там будет находиться значение 41 (0x29).
mov #7, W1
add W1, #5, [W0]
Вданном случае команда add складывает содержимое регистра W1 (0х7)
сконстантой 5 и помещает результат по адресу, находящемуся в регистре W0.
После выполнения операции в этой ячейке будет находиться значение 12 (0xC).
Команды логических операций
Эти команды позволяют выполнять булевые одноместные и двуместные операции. К таким операциям относятся хорошо известные двуместные операции
17
логическое «И», логическое «ИЛИ», исключающее «ИЛИ» и одноместная опера-
ция отрицания «НЕ». В эту группу команд включены инструкции очистки (обну-
ления) операнда и установки, когда все биты операнда устанавливаются в 1.
Инструкции, выполняющие операцию логического «И», имеют мнемони-
ческое обозначение and, логического «ИЛИ» — ior, исключающего «ИЛИ» — xor. Операция отрицания «НЕ» реализована посредством инструкции com.
Кроме того, в эту группу команд включена команда neg, позволяющая инверти-
ровать знак числа. Инструкции логических операций весьма полезны при выде-
лении и анализе отдельных битов операндов.
Примеры использования команд приводятся ниже.
mov #0xFC, W0
mov #0x13, W1
andW0, W1, W2
Здесь выполняется операция логического «И» над операндами, помещен-
ными в регистры W0 и W1. Команда and помещает результат операции в ре-
гистр W2. При указанных значениях операндов W0 и W1 итоговое значение в регистре W2 будет равно 0x10. Если инструкцию «and W0, W1, W2» заменить инструкцией «ior W0, W1, W2» (логическое «ИЛИ»), то итоговое значение в регистре W2 станет равным 0xFF. При использовании в программе команды xor (исключающее «ИЛИ») в регистре W2 после выполнения операции будет со-
держаться значение 0xEF.
mov #0xC, W0
com W0, W1
В этом примере показано применение инструкции com. Эта инструкция инвертирует все биты исходного операнда. В данном случае инвертируется со-
держимое регистра W0 (0x000C), а результат, который будет равен 0xFFF3, по-
мещается в W1.
mov #0xFFF4, W0
neg W0, W1
18
Программа инвертирует знак числа при помощи команды neg. Команда neg использует стандартный алгоритм получения инверсии числа: сначала все биты операнда инвертируются, затем к младшему биту прибавляется 1. В дан-
ном примере при исходном значении операнда в регистре W0, равном 0xFFF4 (дополнительный код отрицательного числа –12), результат выполнения ко-
манды neg, помещенный в регистр W1, будет равен 0x000C, что соответствует положительному числу 12.
Команды работы с битами
Команды работы с битами, как следует из названия, предназначены для манипуляций с отдельными битами операндов. Такая возможность является весьма востребованной, поскольку в большинстве случаев системы на базе микроконтроллеров должны работать с отдельными сигнальными битами внешних устройств. Битовые команды позволяют анализировать состояние от-
дельных битов, что дает возможность организовать ветвления и переходы в программе, а также устанавливать или сбрасывать отдельные биты операнда.
К командам работы с битами относятся следующие:
-bclr – сброс бита;
-bset – установка бита;
-btg – инвертирование бита;
-btst – проверка бита.
Пример применения команд работы с битами:
mov #34, W0
bset W0, #0
bclr W0, #5
В данном примере в регистр W0 записывается значение 34 (0x22). Затем команда «bset W0, #0» устанавливает бит 0 этой переменной, в результате чего содержимое регистра становится равным 35 (0x23). Следующая за ней ин-
19
струкция bclr W0, #5 сбрасывает бит 5 регистра, в результате чего окончатель-
ное его значение будет равно 3 (0x3).
Для быстрого анализа состояния отдельных битов переменной в систему команд микроконтроллеров dsPIC33 включены инструкции fbcl, ff1l и ff1r. Эти инструкции очень полезны в системах сбора данных при сканировании, напри-
мер, сигнальных выводов периферийных устройств. Краткое описание этих ин-
струкций:
- fbcl (FindFirstBitChangefromLeft) - определяет изменение состояния би-
тов от младшего к старшему (слева направо);
-ff1l (FindFirstOnefromLeft) - находит первый ненулевой бит при проходе слева направо;
-ff1r (FindFirstOnefromRight) - находит первый ненулевой бит при прохо-
де справа налево.
Пример использования инструкции ff1r:
mov #8, W2
ff1r W2, W3
В примере в регистр W2 заносится значение 8. Инструкция ff1r обнару-
живает первый единичный бит в регистре W2 на позиции 4 (отсчет ведется от 1) и записывает это значение в регистр W3. Таким образом, регистр W3 бу-
дет содержать значение 4.
Команды сдвига и циклического сдвига
Эта группа команд часто используется для преобразования последова-
тельного потока битов в параллельный двоичный код и обратно, а также для операций быстрого целочисленного умножения и деления на степень двойки.
К командам сдвига и циклического сдвига относятся следующие:
-asr – арифметический сдвиг вправо;
-lsr – логический сдвиг вправо;
-rlc – сдвиг влево через флаг переноса;
20
