
- •Общая структура и номенклатура микроконтроллеров
- •Микроконтроллер 68hc908gp32
- •3. Процессорный модуль cpu08
- •5. Начальный запуск и обработка прерываний.
- •6. Режимы работы микроконтроллеров
- •7. Организация и программирование памяти
- •8. Конфигурация микроконтроллеров
- •9. Модуль сторожевого таймера cop08
- •10. Параллельные порты ввода-вывода данных.
- •11. Модуль асинхронного последовательного интерфейса sci08
- •12. Модуль синхронного последовательного интерфейса spi08
- •13. Таймерные модули
- •14. Модуль аналого-цифрового преобразователя adc08.
- •15. Модуль обслуживания клавиатуры kbi08
3. Процессорный модуль cpu08
Процессорный модуль CPU08, используемый в микроконтроллерах семейства 68HC08, выполняет набор из 90 команд с использованием 9 способов адресации.
Регистровая модель. Процессорный модуль CPU08 (рис.3) содержит 8-разрядные аккумулятор A и регистр признаков CCR, 16-разрядные индексный регистр H:X, указатель стека SP и программный счетчик PC.
|
7 0 |
Аккумулятор A |
||||||||
|
A |
|||||||||
15 8 |
7 0 |
|
||||||||
Н |
Х |
Индексный регистр Н:Х |
||||||||
15 0 |
|
|||||||||
РС |
Программный счетчик PC |
|||||||||
15 0 |
|
|||||||||
SP |
Указатель стека SP |
|||||||||
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
V |
1 |
1 |
H |
I |
N |
Z |
C |
Регистр признаков CCR |
Рис.3. Регистровая модель процессора CPU08
Регистр CCR содержит значения следующих признаков:
C - признак переноса (принимает значение C=1 при возникновении переноса из старшего разряда результата);
Z - признак нуля (принимает значение Z=1 при нулевом результате);
N - признак знака (равен старшему разряду результата, при обработке чисел со знаком имеет значения N=0 при положительном результате, N=1 при отрицательном результате);
I - маска прерывания (при значении I=0 обработка прерываний разрешается, при I=1 – запрещается);
H - признак переноса между тетрадами (используется при операциях над двоично-десятичными числами).
V – признак переполнения при обработке чисел со знаком (принимает значение V=1, когда результат выходит за границы диапазона чисел +127…-128).
Программный счетчик PC содержит адрес очередной выполняемой команды.. Максимальный объем адресуемой памяти для семейства 68HC08/908 составляет 64 Кбайт, при этом модели с меньшим размером памяти используют только часть адресуемого пространства. Адресное пространство таких микроконтроллеров имеет неиспользуемые окна (см. раздел 7). При обращении к этим окнам модуль SIM08 реализует перезапуск микроконтроллера, указывающий на наличие ошибки в программе – обращение к несуществующей ячейке памяти.. При запуске и перезапуске микроконтроллера (процедура RESET) в PC автоматически загружается адрес первой команды выполняемой программы (вектор начального запуска) из двух последних ячеек адресуемой памяти с адресами $FFFE-FFFF (старший байт PCh – младший байт PCl).
Указатель стека SP служит для адресации ячейки ОЗУ, являющейся вершиной стека. При запуске микроконтроллера (процедура RESET) в SP автоматически загружается значение $00FF, обеспечивая возможность использования в качестве стека ячеек ОЗУ и регистров, имеющих адреса в диапазоне $0000-FF. При дальнейшей работе процессора в качестве вершины стека может быть использована любая позиция адресуемой памяти в пределах имеющегося в данной модели ОЗУ данных.
Способы адресации. Микроконтроллер выполняет набор операций над операндами, размещенными в регистрах A, X и памяти. Команды имеют длину от 1 до 3 байтов: первый байт содержит код операции, второй и третий байты обеспечивают адресацию операнда. Для выборки операнда используются следующие способы адресации:
- регистровая (операнд располагается в регистре A или X);
- индексная (адресом операнда служит содержимое регистра H:X);
- индексная со смещением (адрес операнда образуется сложением содержимого регистра H:X и 8- или 16-разрядного смещения, заданного во втором и третьем байте команды);
- индексная с пост-инкрементом (используется только в командах MOV и CBEQ - адресом операнда служит содержимое регистра H:X, которое после выполнения команды автоматически увеличивается на 1);
- индексная со смещением и пост-инкрементом (используется только в команде CBEQ - адрес операнда образуется сложением содержимого регистра H:X и 8-разрядного смещения, заданного во втором и третьем байте команды, после выполнения команды содержимое регистра H:X автоматически увеличивается на 1);
индексная по указателю стека со смещением (адрес операнда образуется сложением содержимого регистра SP и 8- или 16-разрядного смещения, заданного во втором и третьем байте команды);
- прямая (8- или 16-разрядный адрес операнда задается во втором и третьем байте команды);
- непосредственная (8-разрядный операнд содержится во втором байте команды);
- относительная (используется только в командах ветвления - адрес команды образуется сложением текущего содержимого PC и заданного во втором байте команды 8-разрядного смещения, которое является числом со знаком).
При прямой адресации с 8-разрядным адресом обращение возможно только к 256 начальным позициям адресного пространства (см. рис.7), в котором располагаются регистры интерфейсных и периферийных модулей и часть ОЗУ. При индексной адресации смещение является числом без знака. Индексная адресация и прямая адресация с 16-разрядным адресом позволяют обращаться к любой позиции адресного пространства, однако при этом необходимо, чтобы значение адреса не превышало $FFFF. При относительной адресации возможен переход к командам, расположенным в пределах 127 позиций ниже или выше очередной команды программы.
Система команд. Выполняемые микроконтроллером команды делятся на группы команд пересылки, арифметических и логических операций, сдвигов, битовых операций и установки признаков, управления программой и процессором. Ниже описывается реализация этих команд, в приведенных таблицах даются их мнемокоды. В набор команд входят безадресные и одноадресные команды. Регистровая адресация задается указанием имени соответствующего регистра A, X в мнемокоде команды, поэтому команды с такой адресацией являются безадресными. В одноадресных командах задается адрес используемого операнда или размещения результата. В таблицах после мнемокода этих команд указывается символ (opr), который при записи на языке Ассемблера заменяется символом, определяющим способ адресации:
$addr8 или $addr16 – 8- или 16-разрядное значение адреса в шестнадцатиричной форме при прямой адресации;
X – при индексной адресации;
X+ - при индексной адресации с пост-инкрементом;
d8, X или d16, X – при индексной адресации со смещением (d8, d16 – 8- или 16-разрядное смещение);
d8, X+ - при индексной адресации с пост-инкрементом и смещением (d8 – 8-разрядное смещение);
d8, SP или d16, SP – при индексной адресации по указателю стека со смещением (d8, d16 – 8- или 16-разрядное смещение).
Адресуемый таким образом операнд, выбираемый из ячейки памяти, обозначается символом M. При непосредственной адресации вместо символа (opr) записывается #Im - значение операнда Im с префиксом #.
Команды пересылки (табл.3) осуществляют пересылку операндов между регистрами и ячейками памяти. Команды LDA, LDX, производящие загрузку операнда в регистры A, X, используются все способы адресации, кроме относительного. При записи содержимого этих регистров в память командами STA, STX не используется также непосредственная адресация. Команда LDHX позволяет записать в индексный регистр H:X двухбайтовый непосредственный операнд #Im, который содержится во втором и третьем байте команды, или загрузить в этот регистр содержимое двух рядом расположенных ячеек памяти. Команда STHX производит запись содержимого H:X в две рядом расположенные ячейки памяти. При обращении к памяти в командах LDHX, STHX задается адрес первой ячейки памяти с помощью 8-разрядной прямой адресации.
Таблица 3. Команды пересылки.
Мнемокод |
Команда |
Операция |
LDA (opr) |
Загрузка A |
M A |
LDX (opr) |
Загрузка X |
M X |
LDHX (opr) |
Загрузка H:X |
M H:X |
STA (opr) |
Запись A в память |
A M |
STX (opr) |
Запись X в память |
X M |
STHX |
Пересылка H:X в память |
H:X M |
MOV (addr1),(addr2) |
Пересылка «память-память» |
M1 M2 |
TAX |
Пересылка A в X |
A X |
TXA |
Пересылка X в A |
X A |
TAP |
Пересылка A в CCR |
A CCR |
TPA |
Пересылка CCR в A |
CCR A |
TSX |
Пересылка SP+1 в H:X |
SP+1 H:X |
TXS |
Пересылка H:X-1 в SP |
H:X -1 SP |
CLR (opr) |
Запись 0 в M |
$00 M |
CLRA |
Запись 0 в A |
$00 A |
CLRX |
Запись 0 в X |
$00 X |
CLRH |
Запись 0 в H |
$00 H |
NSA |
Перестановка тетрад в A |
(A7-4) <-> (A3-0) |
PUSHA |
Запись A в стек |
A (SP), SP-1 SP |
PUSHH |
Запись H в стек |
H (SP), SP-1 SP |
PUSHX |
Запись X в стек |
X (SP), SP-1 SP |
PULA |
Загрузка A из стека |
SP+1 SP, (SP) A |
PULH |
Загрузка H из стека |
SP+1 SP, (SP) H |
PULX |
Загрузка X из стека |
SP+1 SP, (SP) X |
Команда MOV обеспечивает пересылку содержимого между двумя ячейками памяти. При этом возможны четыре варианта выполнения команды:
MOV #Im, addr8 - пересылка непосредственного операнда #Im в прямо адресуемую ячейку памяти;
MOV addr8-s, addr8-d - пересылка между двумя прямо адресуемыми ячейками памяти: источником (адрес addr8-s) и приемником (адрес addr8-d);
MOV addr8, X+ - пересылка содержимого прямо адресуемой ячейки в ячейку, адресуемую с помощью регистра H:X, после пересылки производится инкремент содержимого H:X;
MOV X+, addr8 - пересылка содержимого ячейки, адресуемой с помощью регистра H:X, в прямо адресуемую ячейку памяти; после пересылки производится инкремент содержимого H:X.
Во всех вариантах команды MOV используется только 8-рязрядная прямая адресация.
Команды TAX, TXA выполняют пересылку операндов между регистрами A и X. Команды TAP и TPA позволяют считать в аккумулятор содержимое регистра признаков CCR для последующего анализа или сохранения и загрузить в этот регистр новое содержимое из аккумулятора.
К этой же группе относятся команды CLRA, CLRX, CLRH, CLR, производящие запись 0 в регистры A, X, H и ячейку памяти. В команде CLR могут использоваться следующие способы адресации: индексная, индексная по указателю стека с 8-разрядным смещением или прямая с 8-разрядным адресом.
Команда NSA меняет местами старшую (биты A7-4) и младшую (биты A3-0) тетрады содержимого аккумулятора.
Отдельную подгруппу составляют команды сохранения в стеке содержимого регистров A, H, X и загрузки этих регистров из стека. Команды сохранения PSHA, PSHH, PSHX пересылают содержимое соответствующих регистров в ячейку памяти, адресуемую содержимым регистра SP, затем содержимое этого регистра уменьшается на 1, адресуя следующую свободную ячейку стека. Команды загрузки увеличивают на 1 содержимое SP, адресуя верхнюю заполненную ячейку стека, после чего содержимое ячейки загружается в соответствующий регистр.
Команды арифметических операций (табл.4) выполняют соответствующие действия над операндами, один из которых располагается в аккумуляторе A, где размещается затем результат. При операциях сложения и вычитания с учетом и без учета признака переноса C (команды ADC, ADD, SBC, SUB) второй операнд M адресуется любым способом, кроме относительного. Команда двоично-десятичной коррекции DAA выполняется после команды ADD для получения правильного результата, если в качестве слагаемых использовались двоично-десятичные числа (две тетрады представляют два десятичных разряда числа).
Команда умножения MUL выполняется над 8-разрядными операндами без знака, расположенными в регистрах A, X, 16-разрядное произведение X:A размещается в этих же регистрах (старший байт в X, младший байт в A). Команда деления DIV использует в качестве делимого 16-разрядный операнд H:A (старший байт в H, младший байт в A), делитель находится в регистре X. Полученное 8-разрядное частное размещается в аккумуляторе, остаток – в регистре H.
При операциях инкремента, декремента (команды INC, INCA, INCX, DEC, DECA, DECX) и изменения знака (перевод операнда в дополнительный код, команды NEG, NEGA, NEGX) используются следующие способы адресации: индексная, индексная по указателю стека с 8-разрядным смещением или прямая с 8-разрядным адресом.
Таблица 4. Команды арифметических и логических операций,
сравнения и тестирования
Мнемокод |
Команда |
Операция |
ADD (opr) |
Сложение |
A + M A |
ADC (opr) |
Сложение с переносом |
A + M + С A |
SUB (opr) |
Вычитание |
A - M A |
SBC (opr) |
Вычитание с заемом |
A - M - С A |
MUL |
Беззнаковое умножение |
A * X X : A |
DIV |
Беззнаковое деление |
H:A / X -> A, остаток -> H |
DAA |
Двоично-десятичная коррекция результата сложения |
|
INC (opr) |
Инкремент M |
M + 1 M |
INCA |
Инкремент A |
A + 1 A |
INCX |
Инкремент X |
X + 1 X |
DEC (opr) |
Декремент M |
M - 1 M |
DECA |
Декремент A |
A - 1 A |
DECX |
Декремент X |
X - 1 X |
NEG (opr) |
Изменение знака M |
0 - M M |
NEGA |
Изменение знака A |
0 - A A |
NEGX |
Изменение знака X |
0 - X X |
AIX #Im |
Сложение H:X с константой |
H:X + Im -> H:X |
AIS #Im |
Сложение SP с константой |
SP + Im -> SP |
CMP (opr) |
Сравнение A с M |
A – M, установка V,N,Z,C |
CPX (opr) |
Сравнение X с M |
X - M, установка V,N,Z,C |
CPHX (opr) |
Сравнение H:X c M:M+1 |
H:X – M:M+1, установка V,N,Z,C |
TST (opr) |
Тестирование M |
M - 0, установка N,Z |
TSTA |
Тестирование A |
A – 0, установка N,Z |
TSTX |
Тестирование X |
X – 0, установка N,Z |
AND (opr) |
Логическое И |
A M A |
OR (opr) |
Логическое ИЛИ |
A M A |
EOR (opr) |
Исключающее ИЛИ |
A M A |
COM (opr) |
Логическая инверсия M |
M M |
COMA |
Логическая инверсия A |
A A |
COMX |
Логическая инверсия X |
X X |
BIT (opr) |
Битовое тестирование |
A M, установка N,Z |
Команды AIX, AIS позволяют корректировать значение адреса, размещенного а регистрах H:X или SP, путем сложения их содержимого с 8-разрядной константой, которая задается в виде непосредственного операнда Im. Этот операнд является числом со знаком (представляется в дополнительном коде).
Команды сравнения CMP, CPX выполняют вычитание операндов без записи результата, но с установкой значений признаков V, N, Z, C в соответствии с полученным результатом. Эти команды используют все возможные способы адресации операнда. Команда CPHX производит сравнение 16-разрядных операндов, одним из которых является содержимое индексного регистра H:X, а вторым – непосредственно заданный в команде двухбайтовый операнд Im или содержимое двух рядом расположенных ячеек памяти M:M+1. В последнем случае команда CPHX использует 8-разрядную прямую адресацию.
Команды тестирования TST, TSTA, TSTX устанавливают признаки N, Z в соответствии со значением выбираемого операнда. В команде TST используется индексную, индексную по указателю стека с 8-разрядным смещением или прямую адресацию с 8-разрядным адресом.
Команды логических операций AND, ORA, EOR выполняют операции И, ИЛИ, Исключающее ИЛИ над разрядами содержимого аккумулятора A и адресуемого операнда (табл.4). Команда битового тестирования BIT производит логическое умножение операндов (операция И) без записи результата, но с установкой признаков N, Z. При выполнении этих команд используются все способы адресации, как и в командах сложения-вычитания. В командах логической инверсии COM, COMA, COMX используется только индексная, индексная по указателю стека с 8-разрядным смещением или прямая адресация с 8-разрядным адресом.
. Команды сдвигов (табл.5) выполняют арифметические (команды ASL, ASLA, ASLX, ASR, ASRA, ASRX), логические (команды LSL, LSLA, LSLX, LSR, LSRA, LSRX) и циклические (команды ROL, ROLA, ROLX, ROR, RORA, RORX) сдвиги над операндами, расположенными в регистрах A, X или адресуемой ячейке памяти. При обращении к памяти используется индексная, индексная по указателю стека с 8-разрядным смещением или прямая адресация с 8-разрядным адресом. Команды ASL, ASLA, ASLX реализуют такие же операции, как и команды LSL, LSLA, LSLX.
Таблица 5. Команды сдвигов
Мнемокод |
Команда |
Операция |
С
Операнд
0 ASLA, LSLA ASLX, LSLX |
Арифметический или логический сдвиг влево |
|
С
Операнд |
Арифметический сдвиг вправо |
|
С
Операнд
0 |
Логический сдвиг Вправо |
|
С
Операнд |
Циклический сдвиг Влево |
|
С
Операнд |
Циклический сдвиг вправо |
|
Команды битовых операций BCLR, BSET (табл.6) устанавливают значение 0 или 1 для n-го бита в операнде, 8-разрядный адрес которого содержится во втором байте команды (8-разрядная прямая адресация). Номер бита n задается в команде. Команды CLC, CLI и SEC, SEI устанавливают значение 0 или 1 признаков C, I в регистре условий CCR. При этом команды CLI и SEI разрешают и запрещают обслуживание поступающих запросов прерывания.
Таблица 6. Команды битовых операций и установки признаков.
-
Мнемокод
Команда
Операция
BCLR n, (opr)
Установка значения бита bn = 0
0 bn
BSET n, (opr)
Установка значения бита bn = 1
1 bn
CLC
Установка признака C = 0
0 C
CLI
Установка признака I = 0
0 I
SEC
Установка признака C = 1
1 C
SEI
Установка признака I = 1
1 I
При выполнении команд пересылки, арифметических и логических операций, сдвигов, битовых операций происходит изменение значений определенных признаков в регистре условий CCR. В табл.7 изменение этих признаков показано символами:
"+" - установка значения по результату операции,
"-" - значение остается неизменным,
0, 1 - установка соответствующих значений признаков,
“х” – принимает произвольное значение.
Таблица 7. Установка значений признаков при выполнении команд
-
Команды
Признаки
V
H
I
N
Z
C
LDA, LDX, LDHX, STA, STX, STHX,
0
-
-
+
+
-
TST, TSTA, TSTX, AND, ORA, EOR, BIT,
INC, INCA, INCX, DEC, DECA,DECX
+
-
-
+
+
-
ADD, ADDC
+
+
-
+
+
+
SUB, SBC, NEG, NEGA, NEGX,
CMP, CPX, CPHX, ASL, ASLA, ASLX,
+
-
-
+
+
+
LSL, LSLA, LSLX, ASR, ASRA, ASRX,
ROL, ROLA, ROLX, ROR, RORA, RORX
LSR, LSRA, LSRX
+
-
-
0
+
+
CLR, CLRA, CLRX, CLRH
0
-
-
0
1
-
COM, COMA, COMX
0
-
-
+
+
1
MOV
+
-
-
+
+
-
MUL
-
0
-
-
-
0
DIV
-
-
-
+
+
-
DAA
x
-
-
+
+
+
CLC
-
-
-
-
-
0
CLI
-
-
0
-
-
-
SEC
-
-
-
-
-
1
SEI
-
-
1
-
-
-
SWI
-
-
1
-
-
-
RTI, TAP
+
+
+
+
+
+
BRCLR, BRSET
-
-
-
-
-
+
WAIT, STOP
-
-
0
-
-
-
Команды управления программой реализуют безусловный переход JMP, условные и безусловные ветвления: Bcc, BRCLR, BRSET и BRA, BRN, переход и ветвление к подпрограмме: JSR, BSR, возврат из подпрограммы RTS, программное прерывание SWI, возврат из прерывания RTI (табл.8). К этой группе относятся также команды организации циклов DBNZ, DBNZA, DBNZX и комбинированные команды сравнения-ветвления CBEQ, CBEQA, CBEQX.
Команда JMP загружает в программный счетчик PC адрес следующей команды EA из ячейки памяти, которая выбирается с помощью индексной, индексной со смещением или прямой адресации.
Команды ветвления используют только относительный способ адресации. При этом адрес следующей команды, загружаемый в PC, формируется путем суммирования текущего содержимого PC, увеличенного на 2 (PC+2 – адрес очередной команды в тексте программы), и 8-разрядного относительного смещения rel8, которое является числом со знаком. Таким образом относительная адресация обеспечивает переход к командам, адреса которых находятся в пределах (PC+129)…(PC-126).
Команда BRA (обязательное ветвление) осуществляет безусловное ветвление, то-есть эквивалентна команде JMP с относительной адресацией. Команда BRN (отсутствие ветвления) пропускает два байта в выполняемой программе (код команды c байтом смещения rel8), после чего выполняется очередная команда. Таким образом эта команда эквивалентна команде NOP. Обычно она используется в процессе отладки программы, заменяя команду условного ветвления Bcc, когда необходимо проверить выполнение программы без ветвления.
Команды условного ветвления Bcc производят загрузку в PC нового адреса, если выполняется определенное условие. В табл.9 приведены 18 видов условий, которые вызывают ветвление программы. Мнемокод условия сс приписывается к букве B, образуя мнемокод соответствующей команды условного ветвления. Например, B + PL = BPL - мнемокод команды ветвления при положительном результате предыдущей операции (признак N=0).
Таблица 8. Команды управления программой и процессором.
-
Мнемокод
Команда
Операция
JMP (opr)
Безусловный переход
EA PC
BRA rel8
Безусловное ветвление
PC +2 + rel8 PC
BRN rel8
Отсутствие ветвления
PC + 2 PC
Bcc rel8
Условное ветвление
PC +2+ rel8 PC, если
выполняется условие cc
BRCLR n, (opr), rel8
Ветвление при bn = 0
PC +3 + rel8 PC, если bn = 0
BRSET n, (opr), rel8
Ветвление при bn = 1
PC + 3 + rel8 PC, если bn = 1
CBEQ (opr), rel8
Сравнение A и M, ветвление, если они равны
A – M,
PC + n + rel8 PC, если Z= 1
CBEQA #Im, rel8
Сравнение A и Im, ветвление, если они равны
A – Im,
PC +3 + rel8 PC, если Z = 1
CBEQX #Im, rel8
Сравнение X и Im, ветвление, если они равны
X– Im,
PC +3 + rel8 PC, если Z = 1
DBNZ (opr), rel8
Декремент M и ветвление, если M не равно 0
M-1M,
PC + n + rel8 PC, если Z=0
DBNZA rel8
Декремент A и ветвление,
если A не равно 0
A-1A,
PC +2 + rel8 PC, если Z=0
DBNZX rel8
Декремент X и ветвление, если A не равно 0
X-1X,
PC +2 + rel8 PC, если Z=0
JSR (opr)
Переход к подпрограмме
PC + n PC,
PCl (SP), SP - 1 SP
PCh (SP), SP - 1 SP
(EA) PC
BSR rel8
Ветвление к подпрограмме
PC + 2 PC
PCl (SP), SP - 1 SP
PCh (SP), SP - 1 SP
PC + 2 + rel8 PC
RTS
Возврат из подпрограммы
SP + 1 SP, (SP) PCh
SP + 1 SP, (SP) PCl
SWI
Программное прерывание
PC + 1 PC,
PCl (SP), SP - 1 SP
PCh (SP), SP - 1 SP
X (SP), SP - 1 SP
A (SP), SP - 1 SP
CCR (SP), SP - 1 SP
Ve (SP), SP - 1 SP
RTI
Возврат из прерывания
SP + 1 SP, (SP) CCR
SP + 1 SP, (SP) A
SP + 1 SP, (SP) X
SP + 1 SP, (SP) PCh
SP + 1 SP, (SP) PCl
RSP
Начальная установка SP
$00FF SP
NOP
Отсутствие операций
PC + 1 PC
WAIT
Переход в режим ожидания
Остановка процессора,
0 I (в CCR)
STOP
Переход в режим останова
Остановка ГТИ, 0 I (в CCR)
Большинство условий задается определенными значениями признаков в регистре CCR или комбинацией значений признаков, которая определяется соответствующим логическим выражением. Обычно эти значения признаков устанавливаются с помощью предыдущей команды сравнения или тестирования. Условем ветвления может быть равенство (Z=1) или неравенство (Z=0) сравниваемых операндов, а также различные варианты соотношений между ними. При сравнении операндов со знаком устанавливаются соотношения “больше”, “меньше”, “больше или равно”, “меньше или равно” (>, <, >=, <=). При сравнении беззнаковых операндов аналогичные соотношения (>, <, >=, <=) определяют условия “выше”, “ниже”, “ниже или равно”, “выше или равно”.
Таблица 9. Мнемокоды и условия выполнения команд условных переходов Bcc
-
Мнемокод
cc
Проверяемое условие
Логическое
выражение
NE
Не равно (ненулевой результат)
Z = 0
EQ
Равно (нулевой результат)
Z = 1
HI
Выше
(Z C) = 0
HS
Ниже или равно
(Z C) = 1
HS
Выше или равно (нет переноса)
C = 0
LO
Ниже (есть перенос)
C = 1
BGT
Больше
Z (N V) =0
BLE
Меньше или равно
Z (N V) =1
BGE
Больше или равно
N V = 0
BLT
Меньше
N V = 1
PL
Положительный результат
N = 0
MI
Отрицательный результат
N = 1
HCC
Нет переноса между тетрадами
H = 0
HCS
Есть перенос между тетрадами
H = 1
MC
Прерывания разрешены
I = 0
MS
Прерывания запрещены
I = 1
IH
Отсутствие запроса прерывания
IRQ# = 1
IL
Поступление запроса прерывания
IRQ# = 0
В качестве условий ветвления могут также использоваться значения признаков N, H и маски прерывания I. Одним из условий ветвления может быть поступление внешнего запроса прерывания на вход IRQ#.
Команда CBEQ выполняют ветвление при условии равенства операндов, хранящихся в аккумуляторе и адресуемой ячейке памяти. В зависимости от используемого способа адресации памяти команда может содержать k = 2, 3 или 4 байта, поэтому при ее выполнении содержимое PC увеличивается на k. Команды CBEQA, CBEQX осуществляют ветвление при равенстве содержимого регистров A или X значению заданной в команде константе Im.
Команды DBNZ, DBNZA, DBNZX служат для организации программных циклов. Текущее значение счетчика циклов определяется содержимым адресуемой ячейки памяти M (команда DBNZ), аккумулятора (команда DBNZA) или регистра X (команда DBNZX). Команда производит уменьшение текущего значения числа циклов на 1 (декремент) и осуществляют ветвление (возврат) к началу цикла, если результат декремента не равен 0 (заданное количество циклов еще не реализовано). При выплнении команды DBNZ содержимое PC может увеличиваться на величину k=2,3 или 4 в зависимости от используемого способа адресации.
Команды BRCLR, BRSET проверяют значение n-го бита bn в операнде, выбираемом с помощью 8-битной прямой адресации, и выполняют ветвление, если bn равен 0 или 1. Номер проверяемого бита n задается в этих командах с помощью непосредственного операнда #Im8=n. Эти команды содержат три байта, поэтому при их выполнении содержимое PC увеличивается на k=3.
Команды перехода и ветвления к подпрограмме JSR, BSR заносят из PC в стек адрес очередной команды программы, а затем загружают в PC новое содержимое. В команде JSR адрес ячейки памяти, из которой загружается новое содержимое PC, определяется с помощью индексной, индексной со смещением или прямой адресации. При этом адрес, загружаемый в стек при выполнении команды JSR, может быть больше адреса этой команды на k=1, 2 или 3 в зависимости от используемого способа адресации: k=1 при индексной адресации, k=2 при индексной адресации с 8-разрядным смещением или 8-разрядной прямой адресации, k=3 при индексной адресации с 16-разрядным смещением или 16-разрядной прямой адресации. В команде BSR адрес вызываемой подпрограммы определяется с помощью относительной адресации. По команде возврата из подпрограммы RTS из стека восстанавливается прежнее содержимое PC.
Команда программного прерывания SWI загружает в стек не только текущее содержимое PC, но и содержимое регистров A, X, CCR. При выполнении этой команды заполняется пять ячеек стека. Команда возврата из прерывания RTI восстанавливает прежнее содержимое регистров A, X, CCR, PC из стека. Отметим, что при выполнении этой команды в стеке не сохраняется содержимое регистра H -старшего байта индексного регистра. Для сохранения содержимого регистра H в начало программы обработки прерывания следует ввести команду PSHH, а в конце этой программы перед командой RTI выполнить команду PULH.
Управление процессором производится с помощью команды RSP, которая устанавливает в регистре SP начальное значение $00FF, команды NOP, не выполняющей каких-либо операций (пропуск байта), и команд WAIT, STOP, переводящих микроконтроллер в энергосберегающие режимы ожидания и останова с разрешением прерывания (установка признака I=0), с помощью которого осуществляется последующий возврат в нормальный режим. Возможности реализации энерго сберегающих режимов рассмотрены в разделе 6.
Большинство команд имеют время выполнения от 1Tt до 5Tt, где Tt = 1/Ft – период тактовых импульсов. Для выполнения некоторых команд требуется большее время: DIV - 7Tt, SWI - 9Tt, RTI - 7Tt.
Формирование тактовых импульсов.
Тактовые импульсы формируются модулем системной интеграции SIM08 на базе импульсных сигналов, которые генерируются модулем CGM08 (Clock Generator Module – 08). Выходные сигналы этого модуля определяют частоту тактовых импульсов, необходимую для работы процессора и периферийных модулей.
Модуль CGM08 содержит два генератора импульсов:
CG - формирует импульсы с частотой Fq, задаваемой внешним резонатором;
PG - генерирует импульсы частотой Fp = 2*P x (N x Fq)/ R помощью схемы фазовой автоподстройки частоты (ФАПЧ), выполняя умножение частоты Fq, задаваемой внешним резонатором. Значения параметров P, N, R определяются содержимым регистров PACTL, PMSH, PMSL, управляющих работой модуля CGM08.
Импульсы с выходов генераторов CG и PG после деления их частоты на 2 поступают на мультиплексер, который выдает сигналы для формирования тактовых импульсов модулю системной интеграции SIM08. Выбор генератора (CG или PG), задающего частоту тактовых импульсов, определяется значением бита BCS в регистре управления PCTL модуля CGM08 (рис.4,а).
Необходимость использования двух генераторов вызвана тем, что в микроконтроллерах семейства 68HC08/908 модуль SIM08 формирует тактовые импульсы, имеющие частоту Ft = Fx/4, где Fx = Fq или Fg –частота сигналов, поступающих с выхода генераторов CG или PG. Так как максимальная тактовая частота для этого семейства составляет Ft=8 МГц, то генераторы CG или PG должны вырабатывать сигналы с частотой Fg = 32 МГц. Для этого к генератору CG необходимо подключить внешний частотно-задающий кварцевый кристалл с резонансной частотой Fq = 32 МГц. Применение таких высокочастотных кварцевых резонаторов вызывает ряд проблем, связанных с повышенным уровнем возникающих помех, более высокой стоимостью этих кристаллов, их меньшей стабильностью. Поэтому для микроконтроллеров, работающих на тактовой частоте 1 МГц и выше, целесообразно использовать для формирования тактовых импульсов генератор PG, обеспечивающий высокую частоту тактовых сигналов при подключении низкочастотных кварцевых кристаллов (Fq=4 МГц и ниже), задающих опорную частоту генерации.
Генератор PG формирует сигналы с требуемой частотой Fg=4Ft путем умножения опорной частоты Fq, которая задается внешним кварцевым кристаллом. В состав генератора входит синтезатор частоты, содержащий схему PLL (Phase-Locked Loop), которая выполняет фазовую подстройку частоты (ФАПЧ), как это реализуется в радиотехнических устройствах. Схема PLL имеет два режима работы:
режим захвата, когда после начального запуска обеспечивается выход на генерацию выходных сигналов в заданном частотном диапазоне;
режим удержания, когда схема поддерживает заданную частоту генерации, компенсируя ее возможные отклонения в пределах рабочей полосы частот, возникающие из-за влияния дестабилизирующих факторов (внешние помехи, изменения напряжения питания и другие).
Генератор PG может автоматически переходить из режима захвата в режим удержания, когда генерируемая частота попадает в рабочую полосу частот PLL (автоматическое управление), или переключаться в требуемый режим путем программной установки бита ACQ# в регистре управления PBWC (программное управление). Вид управления задается пользователем при программировании работы модуля CGM08 путем соответствующей установки бита AUTO в регистре PBWC (рис.4,б).
В микроконтролерах серии GP используется вариант модуля CGM08, который обеспечивает умножение частоты в сотни раз, что позволяет подключать в качестве частотно-задающего элемента дешевые и стабильные кварцевые кристаллы с резонанасной частотой Fq=32,768 кГц, широко применяемые в часовой промышленности («часовые» кварцы).
Для получения тактовых сигналов заданной частоты Ft в этих микроконтроллерах необходимо выполнить программирование модуля CGM08 путем записи соответствующего содержимого в регистры, контролирующие его работу: PCTL – регистр управления генератором, PBWC – регистр управления формированием частоты, PMSH, PMSL, PMRS, PMDS – регистры коэффициентов, задающих частоту генерируемых импульсов.
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
PLLIE |
PLLF |
PLLON |
BCS |
PRE1 |
PRE0 |
VPR1 |
VPR0 |
а). PCTL ( адрес $0036) |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
AUTO |
LOCK |
ACQ# |
XLD |
0 |
0 |
0 |
0 |
б). PBWC ( адрес $0037) |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
MUL11 |
MUL10 |
MUL9 |
MUL8 |
в). PMSH ( адрес $0038) |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
MUL7 |
MUL6 |
MUL5 |
MUL4 |
MUL3 |
MUL2 |
MUL1 |
MUL0 |
г). PMSL ( адрес $0039) |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
VRS7 |
VRS6 |
VRS5 |
VRS4 |
VRS3 |
VRS2 |
VRS1 |
VRS0 |
д). PMRS ( адрес $003A) |
|||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
RDS3 |
RDS2 |
RDS1 |
RDS0 |
е). PMDS ( адрес $003B) |
Рис.4. Формат содержимого регистров управления модулем CGM08.
Регистр управления PCTL (рис.4,а) содержит следующие биты:
BCS – выбирает сигнал, используемый для формирования тактовых сигналов: сигнал на входе генератора CG при значении BCS=0 (частота Ft=Fq/4), сигнал на выходе генератора PG при BCS=1 (частота Ft=Fg/2), после запуска микроконтроллера устанавливается значение BCS=0 (тактирование от кварцевого резонатора), при установке значения BCS=1 бит PLLON в этом регистре принимает значение 1 (включение генератора PG) и затем доступен только для чтения;
PLLON – разрешает при значении PLLON=1 работу генератора PG, после запуска микроконтроллера работа PG разрешена (устанавливается значение PLLON=1);
PLLF – признак запроса прерывания от модуля CGM08: принимает значение PLLF=1 (запрос прерывания, который обслуживается при значении бита PLLIE=1) при автоматическом управлении (в регистре PBWC бит AUTO=1), если изменяется значение бита LOCK в регистре PWBC (рис.1.28,б), что указывает на вход схемы PLL в рабочую полосу частот (установка значения LOCK=1) или выход за пределы рабочей полосы (установка значения LOCK=0); этот бит доступен только для чтения и устанавливается в 0 при запуске микроконтроллера или при чтении содержимого регистра PCTL;
PLLIE – бит, разрешающий при значении PLLIE=1 прерывание процессора по запросу модуля CGM08 (установка признака PLLF=1); этот бит принимает значение PLLIE=0 при запуске микроконтроллера и может быть установлен в 1 только при автоматическом управлении генератором PG (в регистре PBWC бит AUTO=1);
PRE1-0 – биты, определяющие значение параметра P, используемого при расчете частоты импульсов Fg, генерируемых PG (рекомендуемое значение P=0);
VPR1-0 – биты, определяющие значение параметра E, используемого при расчете центра рабочей полосы частот Fv, генерируемых PG.
Регистр PBWC содержит следующие биты, управляющие формированием частоты сигналов генератора PG (рис.4,б):
AUTO – задает режим управления работой генератора PG: автоматический при значении бита AUTO=1, программный при значении AUTO=0;
LOCK – при автоматическом управлении (установлено значение бита AUTO=1) данный бит имеет значение LOCK=1, когда частота сигналов, формируемых генератором, находится в рабочей полосе частот; и LOCK=0, когда частота сигналов выходит за пределы рабочей полосы;
ACQ# - при автоматическом управлении (значение бита AUTO=1) этот бит доступен только для чтения и указывает режим работы генератора: ACQ#=0 в режиме захвата, ACQ#=1 в режиме удержания; при программном управлении (значение бита AUTO=0) запись соответствующего значения этого бита будет задавать режим работы генератора: режим захвата при ACQ#=0, режим удержания при ACQ#=1;
При запуске микроконтроллера все биты в регистре PBWC принимают значение 0.
Регистры PMSH, PMSL (рис.4,в,г) служат для записи значений коэффициента умножения N, определяющего частоту генератора Fg = (N x Fq)/R, где величина N в двоичном коде задается битами MUL11-0 в диапазоне от1 до 4095. При запуске микроконтроллера устанавливается значение N=64.
Значение коэффициента R задается битами RDS3-0 в регистре PMDSP (рис. 4,е).
Ширина рабочей полосы частот, в которой эффективно работает схема ФАПЧ, составляет от 0,5Fv до 2,0Fv. Для обеспечения стабильности работы этой схемы необходимо, чтобы частота генерации Fg была как можно ближе к значению Fv, указывающему центр рабочей полосы частот. Величина Fv определяется выражением Fv = Fn x L x 2*E, где значение коэффициента L определяется битами VRS7-0 в регистре PMRS (рис.4,д), параметр E=0, 1 или 2 задается битами VPR1-0 в регистре PACTL (рис.4,а), номинальная рабочая частота генератора PG составляет Fn = 38,4 кГц. При запуске микроконтроллера устанавливаются значения параметров L=64, E=0.
При программировании модуля CGM08 рекомендуется устанавливать значения параметров R=1, P=0, а значения N, L и E определяются с помощью следующих выражений:
N = [ 4Ft / Fq ], L x 2*E = [ 4Ft / Fn ],
где Ft – требуемая тактовая частота, Fq – резонансная частота кварцевого кристалла, задающего опорную частоту, Fn = 38,4 кГц. Величина E выбирается равной 0 при Ft<1 МГц, 1 при Ft=1..2 МГц, 2 при Ft>2 МГц. Полученные при расчете значения N, L округляются до ближайших целых чисел.
Для подключения внешних компонентов, обеспечивающих функционирование модуля CGM, используются следующие выводы микроконтроллера (рис.5):
OSC1, OSC2 – подключение частотно-задающего кварцевого кристалла Q;
CGMXFC – подключение конденсатора фильтра низких частот Cf в схеме PLL.
Рекомендуемые номинальные значения параметров внешних компонентов: cопротивления Rb = 10 МОм, Rs – 330 Ом (Rs включается при использовании высокочастотных кварцевых кристаллов, когда формирование тактовых импульсов выполняется генератором CG), емкости C1=C2= (6…40) пФ, Cb = 0,1 мкФ (конденсатор развязки питания). Емкость конденсатора фильтра Cf определяется по формуле:
Cf (мкФ) = 0,0154*Vп (В) / Fq (МГц).
При типовых значениях Vп = 5,0 В, Fq = (1…8) МГц емкость Cf составляет десятки нФ.
Микроконтроллер
(модуль
CGM08
или OSC08)
OSC1
OSC2 CGMXFC Vss
VDD
RB
Rs
Q
C2
C1
CF
CB
VП
Рис.5. Подключение внешних компонентов, обеспечивающих функционирование модуля CGM08