- •Теория микропроцессорных систем микроконтроллеры
- •Структура и функциональные возможности мк51
- •Электрический интерфейс мк51
- •Резидентная память данных
- •Работа блока управления и синхронизации
- •Элементы данных в мк51
- •Характеристика функциональных групп команд
- •2.5. Система команд семейства mcs-51.
- •2.5.1. Команды пересылки данных.
- •Команда обработки данных.
- •Команды передачи управления.
- •Характеристика периферийных блоков в составе мк51
- •Управление таймерами-счетчиками (т/с)
- •Описание вариантов конфигурации таймеров-счетчиков
- •Особенности реализации временных интервалов
- •Структура последовательного порта и принципы управления
- •Описание режимов работы уапп
- •Назначение и принципы функционирования системы прерываний
- •Управление приоритетами запросов прерываний
- •Работа системы обслуживания прерываний
- •Заполнение начальной области памяти программ
- •Шестнадцатиразрядные микроконтроллеры Motorola
- •Современные встраиваемые микроконтроллеры, выпускаемые производственной фирмой Freescale Semiconductor
- •Номенклатура и функциональный состав микроконтроллеров cемейства 68hcs12
- •2.1. Микроконтроллеры семейства 68нс12/912
- •2.1.3. Начальный запуск и обработка прерываний
- •2.1.4. Режимы работы и конфигурация микроконтроллеров
- •2.1.5. Функционирование и программирование Flash-памяти и эсппзу
- •2.1.6. Блок контроля функционирования и генератор тактовых импульсов
- •2.1.7. Параллельный ввод-вывод данных и подключение внешней памяти
- •2.1.8. Последовательные порты sci и spi
- •2.1.9. Таймерные модули и широтно-импульсные модуляторы
- •2.1.10. Модуль аналого-цифрового преобразователя atd
- •2.1.11. Модуль последовательного интерфейса msCan
- •2.1.12. Режим отладки bdm и установка контрольных точек
2.1. Микроконтроллеры семейства 68нс12/912
В 1998 г. компания Motorola начала выпуск нового семейства 16-разрядных микроконтроллеров 68НС12. Эти микроконтроллеры имеют ряд специфических особенностей, которые обеспечили им эффективное применение в электронной аппаратуре различного назначения. К числу таких особенностей относятся:
архитектурная совместимость с широко используемым семейством 8-разрядных микроконтроллеров 68НС11 (см. 1.3);
расширенный набор команд и способов адресации, обеспечивающих реализацию управления с использованием «нечеткой логики», поддержку языков высокого уровня и ряд других дополнительных возможностей;
улучшенные технические характеристики: высокая производительность, пониженное энергопотребление, расширенный объем адресуемой памяти; наличие встроенных средств отладки, существенно упрощающих процесс разработки систем на базе этих микроконтроллеров.
В настоящее время семейство 68НС12/912 является основным промышленным стандартом компании Motorola в сфере 16-разрядных микроконтроллеров. Эти микроконтроллеры маркируются следующими условными обозначениями:
-
MC
68НС
9
12
xx
32
V
FU
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
где отдельные группы символов имеют следующее назначение:
(1) - МС - серийное производство;
ХС - опытная серия; PC - опытные образцы;
(2) - 68НС - произведено компанией Motorola по HCMOS-технологии;
(3) - вид размещенной на кристалле памяти программ:
отсутствие цифры - масочное ПЗУ или без ПЗУ;
7 - электрически программируемое ПЗУ (однократно программируемое);
8 - ПЗУ с электрическим стиранием (ЭСППЗУ);
9 - Flash-память;
(4) - тип процессорного ядра: НС12;
(5) - серия микроконтроллера (например, A, D, DT);
(6) - объем внутренней памяти в килобайтах;
(7) - диапазон рабочих температур:
отсутствие буквы 0...70 °С;
I 0...85°С;
С -40...85 °С;
V -40...105°С;
М -40...125 °С;
(8) - тип корпуса (FU, PV и др.).
В 2002 г. начался выпуск нового поколения этого семейства - 68HCS12/912, в котором реализовано значительное повышение производительности (максимальная тактовая частота до 40 МГц) и увеличение объема внутренней Flash-памяти (до 256-512 Кбайт). Эти микроконтроллеры маркируются условными обозначениями:
-
MC
9
S12
xx
256
V
FU
(1)
(2)
(3)
(4)
(5)
(6)
(7)
где отдельные группы символов имеют следующее назначение:
(1) - МС - серийное производство;
ХС - опытная серия;
PC - опытные образцы;
(2) - вид размещенной на кристалле памяти программ:
отсутствие цифры - масочное ПЗУ;
9 - Flash-память;
(3) - тип процессорного ядра: S12;
(4) - серия микроконтроллера (например, А, С, DT);
(5) - объем внутренней памяти в килобайтах;
(6) - диапазон рабочих температур:
отсутствие буквы 0...70 °С;
I 0...85°С;
С -40...85 °С;
V -40... 105 °С;
М -40... 125 °С;
(7) - тип корпуса (PV, FU и др.).
Микроконтроллеры семейства 68НС12 имеют модульную структуру, которая реализуется из набора отдельных функциональных модулей, взаимодействующих с помощью стандартизованной межмодульной шины. Процессор CPU12 взаимодействует с этими модулями, обращаясь к их регистрам, которые после запуска микроконтроллера расположены в первых 512 позициях адресного пространства.
Набор периферийных модулей включает следующие устройства.
Параллельные порты имеют 8 линий ввода-вывода и служат для обмена данными с внешними устройствами. Микроконтроллеры семейства 68НС12/912 содержат от 8 до 12 портов, из которых 1 или 2 выполняют только ввод данных, а остальные являются двунаправленными. Выводы большинства портов могут использоваться для выполнения альтернативных функций, обеспечивая передачу адреса и данных при обращении к внешней памяти, передачу входных и выходных сигналов для других устройств - последовательных портов SCI, SPI, таймера, АЦП, ШИМ, контроллеров шин. Функционирование портов описано в 2.1.6.
Таймерные модули TIM и ЕСТ содержат 16-разрядный счетчик, имеющий 8 каналов, которые могут работать в режиме захвата или совпадения. Модуль ЕСТ, используемый в моделях 68НС12ВЕ32, 68HC912D60, 68HC912DG128, является модифицированным вариантом модуля TIM с улучшенными характеристиками. В состав модулей TIM и ЕСТ входит также 16-разрядный счетчик событий. Выводы таймерного модуля совмещены с выводами параллельного порта Т. Описание этих модулей дается в 2.1.9.
Модули АЦП, которые входят в состав всех микроконтроллерах данного семейства, имеют 8 входов AN7-0 для приема аналоговых сигналов. В большинстве моделей реализуется аналого-цифровое преобразование поступающих сигналов с разрешением 10 бит, только в модели 68НС812А4 используется 8-битовый АЦП. Аналоговые входы AN7-0 совмещены с выводами порта AD, который может служить для ввода данных. В моделях 68HC912D60, 68HC912DG128 используется два отдельных модуля АЦП и два параллельных порта ввода данных AD0, AD1 (см. рис. 2.1). Описание работы 10-битового модуля АЦП приведено в 2.1.10.
Модуль формирования ШИМ-сигналов входит в состав всех моделей, кроме 68НС812А4. Модуль имеет 4 выходных канала, на которые выдаются импульсные сигналы заданной скважности. Значения скважности Q задаются для каждого канала отдельно с помощью 8-битовых регистров. Таким образом обеспечивается реализация 255 различных значений Q. Попарно объединив регистры модуля, можно получить до 65 536 значений скважности ШИМ-сигналов, но при этом используются только два выходных канала. Функционирование модуля ШИМ описано в 2.1.9.
Модули последовательного асинхронного и синхронного интерфейса SCI, SPI обеспечивают протоколы последовательного обмена аналогично соответствующим модулям в семействах 8-разрядных микроконтроллеров (см. гл. 1). Выводы этих модулей совмещены с выводами порта S, которые могут использоваться для параллельного ввода-вывода данных. Модели 68НС812А4, 68HC912D60, 68HC912DG128 содержат два порта SCI, которые соединены специализированной шиной MI-bus, обеспечивающей возможность их совместной работы в системе. Особенности функционирования этих модулей рассмотрены в 2.1.8.
Специализированные интерфейсные модули BDLC, CAN, I2C, которые входят в состав различных моделей микроконтроллеров (см. табл. 2.1), реализуют последовательный обмен в соответствии с протоколами J1850, CAN 2.0А/В, I2C.
В системах и устройствах микроконтроллеры могут работать в автономном (Single-Chip) или расширенном (Expanded) режимах (см. 2.1.4). В автономном режиме микроконтроллер использует для хранения программ и данных только внутреннюю память. В расширенном режиме к микроконтроллеру подключается внешняя память, обмен с которой производится по 8- или 16-разрядной системной шине данных. Во всех моделях, кроме 68НС812А4, для такого обмена используется мультиплексированная шина. При этом 8-разрядные порты ввода-вывода А и В служат для выдачи 16 разрядов адреса-данных A/D15-0 (при 8-разрядной системной шине для пересылки байта данных D7-0 используется порт А), порт Е - для передачи сигналов управления обменом.
В модели 68НС812А4 при обращении к внешней памяти (расширенный режим) используются раздельные шины адресов и данных. При этом 8-разрядные порты ввода-вывода А и В служат для выдачи 16 разрядов адреса ADDR15-0, порты С и D - для пересылки 16 разрядов данных DATA15-0 (при 8-разрядной шине используется только порт С), порт Е - для передачи сигналов управления обменом. Таким образом, в расширенном режиме количество портов для обмена данными с внешними устройствами значительно сокращается. Микроконтроллеры 68НС812А4 при работе в расширенном режиме обеспечивают возможность увеличения адресного пространства до 4 Мбайт памяти команд и 1 Мбайт памяти данных.
Микроконтроллеры семейства 68НС12/912 реализуют также четыре различных специальных режима, которые используются на стадиях отладки программы и тестирования кристалла (см. 2.1.4).
В качестве примера на рис. 2.1 представлена структура микроконтроллера 68HC912D60, который является типичным представителем рассматриваемого семейства. Микроконтроллер содержит 16-разрядный процессор CPU12, Flash-память объемом 60 Кбайт, ЭСППЗУ емкостью 1 Кбайт, ОЗУ данных емкостью 2 Кбайт. Для обмена данными с внешними устройствами используется 9 параллельных портов А, В, Е, G, H, P, S, T, PCAN. Ввод данных может выполняться через порты AD0, AD1, выводы которых служат также в качестве аналоговых входов АЦП-0 и АЦП-1.
Рис. 2.1. Структура микроконтроллера 68HC912D60
Порты А, В можно использовать для организации мультиплексированной 8- или 16-разрядной внешней системной шины (расширенный режим), к которой подключается внешняя память емкостью до 64 Кбайт (см. 2.1.7). При реализации 16-разрядной шины на выводы портов А, В поступают мультиплексированные адреса-данные AD15-0, при 8-разрядной шине адрес А15-0 выдается на выводы портов А, В, а данные D7-0 - на выводы порта А. В расширенном режиме при обращении к внешней памяти формируются также выходные сигналы управления обменом: R/W# - сигнал чтения-записи, DBE# - сигнал разрешения передачи данных, LSTRB# - строб-сигнал пересылки младшего байта данных. Эти сигналы поступают на соответствующие выводы порта Е. Цикл обмена (запись или чтение) выполняется за один период тактовых импульсов, поступающих на вывод ECLK порта Е.
Для последовательного обмена данными служат два связных порта SCI-0, SCI-1 и периферийный порт SPI (см. 2.1.8), выводы которых совмещены с выводами параллельного порта S. В состав микроконтроллера входит также модуль CAN-контроллера, обеспечивающий интерфейс с последовательной шиной CAN (см. 2.1.11).
В состав микроконтроллера входят также таймерный модуль ЕСТ (см. 2.1.9), выводы которого совмещены с выводами порта А, модуль ШИМ (см. 2.1.9), имеющий 4 выходных канала PW3-0, совмещенных с выводами порта Р, и два 10-разрядных аналого-цифровых преобразователя (см. 2.1.10), которые имеют по 8 аналоговых входов, совмещенных с выводами параллельных портов ввода данных AD0, AD1.
Различные служебные функции, реализуемые в процессе работы микроконтроллера, выполняются устройствами, входящими в состав модуля интеграции LIM. Этот модуль обеспечивает выполнение таких функций, как:
генерация необходимых тактовых сигналов;
начальный запуск и конфигурация микроконтроллера;
реализация прерываний при поступлении внешних запросов XIRQ#, IRQ#, внутренних запросов от процессора и периферийных устройств, а также периодических прерываний;
интерфейс с внешней системной шиной в расширенном режиме;
контроль функционирования микроконтроллера с помощью сторожевого таймера и монитора тактовых сигналов;
отладка выполняемых программ с помощью режима BDM (Back-ground Debug Mode) и аппаратной установки контрольных точек.
Выполнение этих функций описывается в 2.1.3-2.15 и 2.1.12 данной главы.
Отдельные выводы модуля LIM служат для передачи сигналов, обеспечивающих реализацию его функций:
EXTAL, XTAL - выводы для подключения кварцевого резонатора;
XFC - вывод для подключения конденсатора фильтра низких частот;
RESET# - вход-выход сигнала запуска;
BKGD - вывод для последовательной передачи команд и данных при отладке программы в режиме BDM.
Ряд сигналов модуля LIM поступает на выводы порта Е:
XIRQ#, IRQ# - входы внешних запросов прерывания;
R/W#, DBE#, LSTRB# - выходы сигналов управления обменом по внешней шине;
ECLK - выход тактовых импульсов;
MODA, MODB - входы сигналов, задающих в процессе запуска режим работы микроконтроллера;
IPIPE0, IPIPE1 - выходы сигналов, указывающих текущее состояние процессора (используются в процессе отладки системы);
TAGLO# - сигнал выборки команды в режиме отладки BDM (используется для контроля работ процессора в специальном режиме);
CAL - выход сигналов калибровки - импульсов, имеющих частоту внешнего кварцевого резонатора (используется при тестировании микроконтроллера).
Генератор тактовых импульсов (ГТИ), входящий в состав модуля LIM, обеспечивает формирование импульсов с частотой Ft для тактирования работы процессора и периферийных устройств. Импульсы с частотой Ft поступают на выход ECLK. порта Е и служат для синхронизации других устройств системы.
Микроконтроллеры 68НС12/912 работают при напряжении питания Vп = 5,0 В с максимальной тактовой частотой Ft = 8 МГц. Ряд моделей имеют модификации, работающие при пониженном напряжении Vп = 3,3 В.
Микроконтроллеры имеют два режима работы с пониженным энергопотреблением - ожидания и останова, как и семейство 68НС11/711.
Режим ожидания реализуется при поступлении команды WAI, которая вызывает запись в стек содержимого регистров процессора и останавливает его работу. При этом продолжают функционировать ГТИ и периферийные устройства: таймер, последовательные порты, АЦП. В этом режиме потребление мощности снижается в несколько раз. Выход из режима ожидания происходит по внешнему сигналу RESET# =0 или сигналу запуска от блока контроля функционирования, а также при поступлении внешнего (XIRQ#, IRQ#) или внутреннего запроса прерывания.
Режим останова реализуется после выборки команды STOP, которая производит запись в стек содержимого регистров процессора, а затем прекращает работу ГТИ, останавливает процессор и все периферийные блоки. При этом потребляемый ток уменьшается до десятков микроампер. Возврат в рабочий режим происходит при поступлении сигнала запуска RESET# =0 или внешнего запроса прерывания на вход IRQ# или XIRQ#.
Для возврата из режимов ожидания и останова можно также использовать сигналы KWi (см. рис. 2.1), поступающие на выводы некоторых параллельных портов, запрограммированных соответствующим образом (см. 2.1.5).
При выходе из режима останова требуется время, чтобы ГТИ установил необходимые параметры формируемых тактовых импульсов. Поэтому нормальное функционирование микроконтроллера начинается после задержки, которая составляет 4096Tt, где Tt = 1/Ft - длительность одного такта. Если используется стабильный внешний генератор тактовых импульсов, то эту задержку можно исключить, установив в регистре INTCR значение бита DLY=0 (см. 2.1.3).
В табл. 2.2 приведены значения потребляемых токов в рабочем режиме, режимах ожидания и останова при напряжении питания Vп = 5 В и различных значениях тактовой частоты Ft для ряда моделей микроконтроллеров 68НС12/912.
Таблица 2.2. Значения потребляемого тока в различных режимах функционирования
для микроконтроллеров семейства 68НС12/912
Микроконтроллеры 68HCS12 являются следующим поколением семейства 68НС12, которое отличается более совершенной технологией изготовления (разрешающая способность 0,25 мкм вместо 0,5 мкм для семейства 68НС12) и использованием нового варианта Flash-памяти. В результате существенно повышена максимальная тактовая частота (до 25 МГц в выпускаемых моделях, 33-40 МГц в последующих разработках) и увеличена емкость внутренней Flash-памяти (до 256 Кбайт в выпускаемых моделях, 512-1024 Кбайт в последующих разработках).
Программный код CPU 12 снизу вверх совместим с кодом 68НС11 на уровне исходного текста. Поэтому разработчики, применяющие в качестве элементной базы популярное 8-разрядное семейство 68НС11/711, могут перейти на 16-разрядные микроконтроллеры 68НС12/912, используя имеющиеся средства программирования и ранее разработанное программное обеспечение.
Способы адресации. Процессор CPU12 поддерживает все способы адресации, используемые семейством 68НС11/711, и реализует 7 дополнительных вариантов индексной адресации. Обеспечиваются следующие способы адресации:
регистровая (операнд располагается в одном из регистров процессора);
непосредственная (8- или 16-разрядный операнд содержится в команде);
прямая (8- или 16-разрядный адрес операнда задается в команде);
относительная (адрес образуется путем сложения содержимого программного счетчика PC и заданного в команде 8- или 16-разрядного смещения (используется только в командах ветвления);
индексная (адресом операнда является содержимое регистров IX, IY, SP или PC);
индексная со смещением (адрес операнда образуется путем сложения содержимого регистров IX, IY, SP или PC с заданным в команде 5-, 9- или 16-разрядным смещением);
индексная со смещением, расположенным в аккумуляторе А, В или D (адрес операнда образуется путем сложения содержимого заданных регистров IX, IY, SP или PC с 8- или 16-разрядным содержимым одного из аккумуляторов);
индексная с предекрементом (адрес операнда определяется содержимым указанного в команде регистра IX, IY или SP, которое перед выборкой операнда уменьшается на заданное в команде число от 1 до 8);
индексная с преинкрементом (адрес операнда определяется содержимым указанного в команде регистра IX, IY или SP, которое перед выборкой операнда увеличивается на заданное в команде число от 1 до 8);
индексная с постдекрементом (адрес операнда определяется содержимым указанного в команде регистра IX, IY или SP, которое после выборки операнда уменьшается на заданное в команде число от 1 до 8);
индексная с постинкрементом (адрес операнда определяется содержимым указанного в команде регистра IX, IY или SP, которое после выборки операнда увеличивается на заданное в команде число от 1 до 8);
косвенно-индексная с 16-разрядным смещением (адрес операнда располагается в ячейке памяти с адресом, который получается путем сложения содержимого заданных регистров IX, IY, SP или PC с 16-разрядным смещением);
косвенно-индексная со смещением, заданным в регистре D (адрес операнда располагается в ячейке памяти с адресом, который получается путем сложения содержимого заданных регистров IX, IY, SP или PC с содержимым регистра D).
Значения 5-, 8-, 9- и 16-разрядных смещений, заданных в команде, являются числами со знаком. Значения смещений, хранящихся в аккумуляторах, представляются числами без знака.
Система команд. Процессор CPU12 выполняет набор из 208 команд над операндами, расположенными в регистрах и ячейках памяти. Система команд CPU12 является расширенным набором команд семейства 68НС11 и включает в себя команды пересылки данных, команды арифметических и логических операций, сравнения и сдвигов, битовые команды, команды управления программой и управления процессором, а также дополнительные группы команд для обработки табличных данных и реализации «нечеткой логики».
Команды CPU12 содержат от 1 до 6 байт. Первые 1 или 2 байта содержат код операции и определяют способ адресации, в последующих байтах могут размещаться операнд (непосредственная адресация), адрес (прямая адресация) или смещение.
Ниже дается обзор команд, выполняемых процессором CPU12, полный состав которых содержится в приведенных таблицах (по соответствующим группам). Дополнительные команды, введенные в микроконтроллерах семейства 68НС12/912, отмечены в таблицах символом *. Краткое описание этих команд приводится в данном разделе. Остальные команды выполняются аналогично соответствующим командам семейства 68НС11/711, которые описаны в 1.3.2. В таблицах в скобках после мнемокода команд, адресующих выбираемый из памяти операнд, указывается символ opr, который при записи на языке Ассемблера заменяется символом, определяющим способ адресации:
$addr - 8- или 16-разрядное значение адреса addr в шестнадцатеричной форме при прямой адресации;
X (Y, SP или PC) - указывает регистр IX (IY, SP или PC), используемый при индексной адресации;
А (В или D), X (Y, SP или PC) - указывает аккумулятор А (В или D) и индексный регистр IX (IY, SP или PC), используемые при индексной адресации со смещением, содержащимся в аккумуляторе;
d, +X (+Y или +SP), d, -X (-Y или -SP) - задает значение инкремента или декремента d (от 1 до 8) и указывает регистр IX (IY или SP), используемый при индексной адресации с преинкрементом (+) и предекрементом (-);
d, Х+ (Y+ или SP+), d, Х- (Y- или SP-) - задает значение инкремента или декремента d (от 1 до 8) и указывает регистр IX (IY или SP), используемый при индексной адресации с постинкрементом (+) и постдекрементом (-);
d, X (Y, SP или PC) - задает 5-, 8-, 9- или 16-разрядное смещение d и указывает регистр IX (IY, SP или PC) при индексной адресации со смещением;
[d, X], [d, Y], [d, SP] или [d, PC] - задает 16-разрядное смещение d и указывает регистр IX, IY, SP или PC при косвенно-индексной адресации со смещением;
[D, X], [D, Y], [D, SP] или [d, PC] - указывает регистры IX, IY, SP или PC, используемые при косвенно-индексной адресации со смещением в регистре D;
#Im - задает 8-разрядное значение операнда Im, используемого при непосредственной адресации.
Операнд, выбираемый из памяти, обозначается в таблицах команд символом (М).
Команды пересылки (табл. 2.4) осуществляют загрузку операндов из памяти в регистры, запись содержимого регистров в память или передачу между регистрами. В эту группу введены дополнительные команды пересылки между ячейками памяти, обмена между регистрами, знакового расширения и обращения к стеку. Команды MOVB и MOVW производят пересылку 8- и 16-разрядных операндов из ячейки памяти с адресом M1 в ячейку с адресом М2.
Таблица 2.4. Команды пересылки
При пересылке может использоваться прямая, индексная или непосредственная адресация. Команды PSHC, PSHD и PULC, PULD выполняют загрузку в стек и запись из стека содержимого регистров CCR и D. Взаимный обмен содержимым между регистрами А, В, D, IX, IY, SP, CCR выполняется с помощью команды EXG. При обмене между 8- и 16-разрядными регистрами в 8-разрядный регистр записывается младший байт 16-разрядного содержимого, а содержимое 8-разрядного регистра поступает в младший байт 16-разрядного регистра. При этом старший байт 16-разрядного регистра принимает значение $FF, если этот регистр указан в качестве r1, или $00, если он указан в качестве r2. Команда SEX осуществляет пересылку содержимого 8-разрядного регистра А, В или CCR, указанного в качестве r1, в младший байт 16-разрядного регистра D, IX, IY или SP, указанного как r2. При этом все биты старшего байт этого регистра принимают значение старшего (знакового) разряда 8-разрядного регистра (знаковое расширение). Таким образом производится преобразование 8-разрядного числа в 16-разрядное с сохранением знака.
Команды арифметических операций (табл. 2.5) выполняют сложение и вычитание содержимого двух регистров или регистра и ячейки памяти с учетом или без учета признака переноса, а также производят коррекцию результата после сложения двоично-десятичных чисел.
Таблица 2.5. Команды арифметических операций и сравнения
В эту группу входят команды, выполняющие инкремент или декремент операнда и изменяющие его знак. Эти команды аналогичны соответствующим командам микроконтроллеров семейства 68НС11/711. Существенно расширен набор команд умножения и деления. Введены команды умножения 16-разрядных операндов со знаком и без знака EMUL, EMULS. Получаемое при этом 32-разрядное произведение хранится в регистрах IY (старший байт) и D (младший байт). Команды деления дополнены операциями деления 16-разрядных операндов со знаком IDIVS, а также операциями деления 32-разрядного операнда на 16-разрядный без знака и со знаком: EDIV, EDIVS.
Дополнительно введена команда EMACS, которая реализует операцию умножения с накоплением, широко используемую при цифровой обработке сигналов. Умножаются два 16-разрядных операнда, которые расположены в ячейках памяти, адресуемых содержимым регистров IX, IY. Произведение суммируется с 32-разрядным числом, которое выбирается из четырех ячеек памяти. Адрес младшего байта этого числа задается в команде (прямая адресация). Результат операции заносится в эти же ячейки памяти (накопление результатов).
Команды сравнения (см. табл. 2.5) выполняют установку признаков N, Z, V, С в регистре CCR в соответствии с результатом вычитания содержимого двух операндов, хранящихся в регистрах-аккумуляторах или регистре и ячейке памяти. Команды тестирования устанавливают значения признаков N, Z в соответствии с содержимым ячейки памяти или регистра-аккумулятора. В число команд этой группы добавлена команда CPS, которая производит сравнение содержимого адресуемой ячейки памяти и указателя стека SP.
Команды логических операций (табл. 2.6) реализуют побитовые операции И, ИЛИ, Исключающее ИЛИ над содержимым регистра и ячейки памяти, инвертирование содержимого регистра или ячейки памяти.
Таблица 2.6. Команды логических операций и сдвигов
В набор команд для семейства 68НС12/912 добавлены команды ANDCC, ORCC логических операций И, ИЛИ над содержимым регистра признаков CCR и непосредственно заданной константы. Эти команды используются для установки необходимых значений признаков в регистре CCR. Команды побитового тестирования BITA, BITB устанавливают признаки N, Z в соответствии с результатом логической операции И над содержимым регистра-аккумулятора А или В и адресуемой ячейки памяти.
Команды сдвига (см. табл. 2.6) выполняют одноразрядные арифметические, логические и циклические сдвиги содержимого регистров-аккумуляторов или ячейки памяти. Все команды этой группы аналогичны соответствующим командам микроконтроллеров семейства 68НС11/711.
Таблица 2.7. Установка значений признаков
При выполнении команд пересылок, арифметических и логических операций, сдвигов происходит изменение значений признаков в регистре CCR. В табл. 2.7 изменение признаков Н, N, Z, V, С показано такими символами:
«+» - установка значения по результату операции;
«-» - значение остается неизменным;
«0», «1» - установка соответствующих значений признаков 0 или 1;
«х» — неопределенное (произвольное) значение признака.
Команды битовых операций BCLR, ВSET (табл. 2.8) обеспечивают установку в 0 или 1 бита в ячейке памяти, адресуемой с помощью прямой или индексной (со смещением или без смещения) адресации. Номер устанавливаемого бита задается непосредственным операндом Im. Команды установки признаков (табл. 2.8) выполняют установку требуемого значения признаков С, I, V в регистре CCR. Все эти команды выполняются аналогично соответствующим командам микроконтроллеров семейства 68НС11/711.
Таблица 2.8. Команды битовых операций и установки признаков
Команды табличной интерполяции TBL, ETBL (табл. 2.9) представляют новую группу команд, введенных в семейство 68НС12/912. Эти команды вычисляют значение линейной функции Y на отрезке между точками X1 и Х2, который делится на 256 интервалов. Содержимое регистра В задает номер интервала, для которого определяется значение функции:
Y = X1 +(В х (Х2-Х1)/256).
Для выборки операндов X1, Х2 в этих командах используются различные виды индексной адресации (кроме адресации с 9- и 16-разрядным смещением).
Команда TBL вычисляет 8-разрядное значение функции Y, используя 8-разрядные значения аргументов X1, Х2. Операнд X1 выбирается из ячейки памяти, адрес которой М задан в команде, операнд Х2 - из следующей ячейки памяти с адресом М+1. Результат Y, округленный до целого числа, записывается в регистр А.
Команда ETBL использует 16-разрядные значения X1, Х2 и вычисляет 16-разрядное значение Y. При этом операнд X1 выбирается из двух ячеек памяти с адресами М и М+1 (в команде задается адрес младшего байта М), операнд Х2 - из двух следующих ячеек памяти с адресами М+2, М+3. Округленный до целого числа результат Y поступает в регистр D.
Данные команды позволяют определять значения функции Y, аппроксимированной линейными отрезками. Операнды X1, Х2, определяющие значения Y в конечных точках отрезков, хранятся в памяти в виде таблицы. Промежуточные значения функции Y на этих отрезках определяются путем интерполяции, которая производится с помощью команд TLB, ETLB. По результатам вычисления Y устанавливаются признаки N, Z в регистре CCR, признак С может принять произвольное значение (0 или 1).
Команды нахождения максимума и минимума (табл. 2.9) позволяют выбрать минимальное или максимальное из двух чисел без знака, которые расположены в аккумуляторе А и ячейке памяти с адресом М, заданным в команде или аккумуляторе D и паре ячеек памяти с адресами М, М+1.
Для адресации памяти используются все виды индексной и косвенно-индексной адресации. Выбранное число располагается в аккумуляторе или ячейке памяти. Команды MINA, MINM, МАХА, МАХМ выполняют сравнение и выбор 8-разрядных операндов, команды EMINA, EMINM, ЕМАХА, ЕМАХМ - 16-разрядных операндов. При этом значения признаков в регистре CCR (см. табл. 2.7) устанавливаются в соответствии с результатом сравнения операндов (вычитания А-(М) или D-(M:M+1)).
Таблица 2.9. Команды табличной интерполяции и нахождения максимума-минимума
Команды «нечеткой логики» обеспечивают выполнение ряда специфических операций, которые позволяют эффективно реализовывать на базе микроконтроллеров семейства 68НС12/912 системы управления различными объектами с использованием методов «нечеткой логики» (fuzzy logic).
Этот вариант математической логики предполагает использование логических переменных, имеющих несколько возможных значений в диапазоне от «истинно» до «ложно». Таким образом вводятся промежуточные значения переменных, которые имеют вероятностный характер, обозначая «более истинные» или «менее истинные» события. Обработка этих нечетких переменных производится с помощью комплекта логических правил вида «если ... то», которые определяют нечеткие значения выходных переменных в зависимости от набора используемых входных переменных. Различные правила могут давать разные значения для одной и той же переменной. Поэтому на последнем этапе обработки для каждой переменной определяется среднее значение с использованием весовых коэффициентов. Это значение преобразуется в конечный результат, который представляется в виде двоичного числа,
Таким образом, для обработки поступающих данных с использованием «нечеткой логики» необходимо задать:
набор функций, позволяющих преобразовать поступающие данные в значения нечетких переменных;
комплект правил, с помощью которых производится обработка полученных входных переменных в нечеткие значения выходных переменных;
набор функций для обратного преобразования нечетких выходных переменных в двоичную форму представления.
Все эти функции и правила должны храниться в памяти микроконтроллера, образуя необходимую базу знаний для управления определенными объектами или процессами с помощью «нечеткой логики». Для создания такой базы знаний и определения значений весовых коэффициентов обычно используются экспертные оценки специалистов в области проектирования и эксплуатации объектов, которые должны управляться данной системой.
Используя хранящуюся в памяти базу знаний, процессор решает задачи управления с использованием «нечеткой логики», выполняя 3 основные процедуры:
фаззификацию - преобразование поступивших данных в значения нечетких входных переменных с помощью соответствующих трапецеидальных функций, параметры которых выбираются из базы знаний;
обработку нечетких входных переменных с помощью комплекта логических правил, выбираемых из базы знаний;
дефаззификацию - преобразование полученных нечетких выходных переменных в двоичные значения результатов обработки.
Группа команд «нечеткой логики» (табл. 2.10) включает 4 команды, выполняющие данные процедуры.
Таблица 2.10. Команды «нечеткой логики»
Команда MEM производит фаззификацию, выполняя преобразование 8-разрядных данных в значения нечетких входных переменных Y, которые могут иметь значения от $00 («абсолютно ложно» - логический 0) до $FF («абсолютно истинно» - логическая 1). Таким образом обеспечивается возможность использования 256 степеней истинности входных переменных. Присвоение нечеткого значения Y производится для каждой входной переменной X в соответствии с функцией преобразования, определенной в используемой базе знаний. Задаваемые функции Y = f(X) имеют форму трапеции, которая определяется четырьмя 8-разрядными параметрами- положениями начальной (Р1) и конечной (Р2) точек, наклоном передней (S1) и задней (S2) сторон (см. рис. 2.2). Величина наклона задается целым числом, которое получается округлением результата деления:
S1 =256/(P1s-P1), S2 = 256/(Р2 - P2s),
где P1, P1s, P2, P2s - значения X для соответствующих вершин трапеции. Значения S1 и S2 = $00 указывают на вертикальное положение передней или задней стороны трапеции (бесконечный наклон). При S1=$00 точке Р1 соответствует величина Y=$FF, при S2=$00 точке Р2 соответствует Y=$FF. Параметры P1, P2, S1, S2 хранятся в памяти в виде таблицы функций фаззификации, которая адресуется содержимым индексного регистра IX. Каждая функция определяется 4 байтами в этой таблице, которые имеют адреса (IX) - значение P1, (IX+1) - значение Р2, (IX+2) -значение S1, (IX+3) - значение S2. Значение нечеткой переменной Y определяется в соответствии с поступившими входными данными, которые загружаются в аккумулятор А. Полученное значение Y записывается в ячейку памяти, адрес которой содержится в регистре IY. На рис. 2.2 показаны примеры определения Y для четырех значений входных данных Х1=$10, Х2=$38, ХЗ=$50, Х4=$78 при использовании функции фаззификации с параметрами P1=$20, P2=$80, S1=$08, S2=$10.
Рис. 2.2. Примеры преобразования входных данных в значения нечетких переменных при использовании различных функций фаззификации
После выполнения команды MEM содержимое регистра IX автоматически инкрементируется на 4, а содержимое IY - на 1, адресуя следующую функцию фаззификации и следующую позицию для размещения нечетких входных переменных в соответствующих таблицах базы знаний. Путем последовательного выполнения этой команды производится заполнение таблицы нечетких входных переменных, которые затем обрабатываются с помощью логических правил, имеющихся в базе знаний.
Обработка полученных нечетких входных переменных производится с помощью команд REV и REVW. Алгоритм обработки задается комплексом логических правил, которые хранятся в памяти и последовательно выбираются процессором при выполнении данных команд. Используемые логические правила имеют вид:
Если Y1 And Y2 And Y3 ... And Ym, то Z1, Z2, Z3... Zn,
где Y1...Ym - значения нечетких переменных, которые получены при выполнении фаззификации и хранятся в таблице входных переменных; Z1.. .Zn - значения получаемых результатов операции, которые записываются в формируемую таблицу выходных переменных. Символ And обозначает операцию «Нечеткое И», результатом выполнения которой является минимальное из значений входных нечетких переменных. Это значение присваивается выходным переменным Z1...Zn непосредственно в полученном виде или после умножения на весовой коэффициент.
Программа обработки реализуется путем последовательного выполнения правил, хранящихся в базе знаний. Если разные правила дают различные значения для одной и той же выходной переменной Zi, то ей присваивается максимальное из полученных значений. Эта процедура реализуется логической операцией «Нечеткое ИЛИ»:
Zi(1) Or Zi(2) Or ...Or Zi(k) = Zi,
где Zi(j) - значения выходной переменной Zi, полученной при выполнении j-ro логического правила; Or - символ операции «Нечеткое ИЛИ». Таблица значений нечетких переменных Zi, сформированная после выполнения всего комплекса заданных правил, является результатом обработки данных с использованием «нечеткой логики».
Комплекс необходимых логических правил содержится в памяти в виде массива, адресуемого содержимым регистра IX. Каждое правило задается перечислением адресов используемых входных переменных Y и адресов получаемых выходных переменных Z. Списки входных и выходных адресов разделяются символом-разделителем. Другой разделитель ставится в конце списка правил, указывая на завершение процедуры обработки. Таким образом, элементами хранящегося в памяти массива логических правил являются адреса используемых переменных (входных и выходных) и символы-разделители.
Команда REV обеспечивает обработку нечетких переменных без использования весовых коэффициентов. Предварительно в регистр IX загружается адрес первого элемента массива используемых правил, в регистр IY - базовый адрес таблицы, где хранятся входные переменные X и в которую будут записываться результаты Z. В аккумулятор А необходимо загрузить число $FF, а в регистре CCR установить значение признака V=0 (для этого достаточно выполнить команду LDAA $FF).
Элементами массива правил являются 8-разрядные смещения, задающие положение входных и выходных переменных в таблице, адресуемой с помощью регистра IX. После перечня смещений, определяющих расположение всех входных переменных X, используемых в данном правиле, следует разделитель $FE, после которого дается перечень смещений для размещения в таблице получаемых значений выходных переменных. Последующий разделитель $FE указывает на начало перечисления входных переменных для нового правила. Разделитель $FF ставится в конце массива правил, вызывая завершение выполнения команды. При такой организации в массиве может содержаться произвольное число правил, в каждом из которых можно указывать любое количество входных и выходных переменных.
При поступлении команды REV процессор выбирает из массива правил первый элемент (смещение) для адресации первой входной переменной, затем выбирает из таблицы эту переменную и сравнивает ее значение с содержимым аккумулятора А. Минимальное из этих значений заносится в А, т. е. реализуется операция, аналогичная выполняемой по команде MINA (см. табл. 2.9). Затем содержимое IX автоматически инкрементируется на 1, адресуя следующую входную переменную для первого правила, после выборки которой снова выполняется операция определения минимума. Таким образом в аккумуляторе А, в котором хранятся промежуточные результаты, оказывается минимальное из значений входных переменных, указанных в данном правиле (операция «Нечеткое И»). Когда из массива правил выбирается разделитель $FE, то это указывает на конец списка входных переменных. После этого процессор выбирает из массива смещения, задающие расположение результата, и заносит по соответствующим адресам содержимое аккумулятора А. Выборка очередного разделителя $FE указывает на окончание выполнения очередного правила. После этого в А загружается число $FF и процессор последовательно выбирает входные переменные, смещения которых заданы в следующем правиле. При поступлении разделителя $FE накопленное в А минимальное значение записывается в позиции размещения результата, определенные в этом правиле.
При размещении результата выполнения каждого правила реализуется операция поиска максимального из значений, содержащихся в аккумуляторе А и адресуемой ячейке памяти, которая служит для хранения данной выходной переменной. Это значение и заносится в ячейку памяти, как при выполнении команды МАХМ (см. табл. 2.9). Таким образом, таблица выходных переменных заполняется максимальными значениями переменных, полученных с помощью различных правил (операция «Нечеткое ИЛИ»). При этом для получения правильных результатов во все ячейки этой таблицы должно быть предварительно записано число $00.
Выполнение команды REV завершается, когда из массива правил будет выбран разделитель $FF. При этом в таблице выходных переменных, базовый адрес которой содержится в регистре IY, будут накоплены результаты обработки. В процессе выполнения этой команды признак V в регистре CCR указывает вид текущей процедуры: при выборке и обработке входных переменных значение V=0, при записи результатов для очередного правила - V=1. Поэтому значение V изменяется после выборки каждого разделителя $FE. После завершения команды в регистре CCR должно быть установлено V=1, другое значение этого признака указывает на наличие ошибок в массиве правил.
Команда REVW может выполнять обработку нечетких переменных с использованием весовых коэффициентов или без них. При этом вид обработки определяется предварительной установкой значения признака С в регистре CCR: с введением весовых коэффициентов - С=1, без них - С=0. В регистр IX загружается адрес первого элемента массива логических правил, в регистр IY - адрес первого элемента таблицы весовых коэффициентов (если они используются). В аккумулятор А, который служит для промежуточного хранения результатов выполнения правил, предварительно загружается число $FF, а в регистре CCR устанавливается значение признака V=0 (с помощью команды LDAA $FF).
Команда REVW использует массив правил, элементами которого являются 16-разрядные абсолютные адреса входных и выходных переменных, их разделителем служит число $FFFE. Разделитель $FFFF в конце массива правил вызывает завершение выполнения команды.
Без использования весовых коэффициентов команда REVW выполняется аналогично команде REV, определяя минимальные значения адресованных входных переменных и располагая их по заданным адресам в таблице выходных переменных. При использовании весовых коэффициентов содержимое регистра А перед размещением в качестве результата выполнения очередного правила умножается на 8-разрядный весовой коэффициент Wi. Адрес коэффициента задается для каждого правила в таблице, адресуемой содержимым регистра IY. Старший байт полученного произведения записывается в таблицу выходных переменных. После выполнения очередного правила содержимое регистра IY инкрементируется на 1, адресуя весовой коэффициент для следующего правила. Значения признака V в регистре CCR служат для контроля процесса обработки, как и при выполнении команды REV.
Команда WAV осуществляет дефаззификацию, в результате которой производится переход от нечетких значений выходных переменной к точным выходным значениям, требуемым для управления системой. В качестве исходных данных эта команда использует таблицу нечетких выходных переменных Zi, полученных в процессе обработки с помощью команд REV, REVW, и таблицу заданных 8-разрядных весовых коэффициентов Fi, определяющих степень влияния той или иной выходной переменной на конечный результат. При поступлении команды WAV производится вычисление суммы произведений Fi*Zi и суммы используемых весовых коэффициентов:
P = ....Fi*Zi, S = ...Fi,
где n указывает количество выходных переменных и коэффициентов (до 255), выбираемых из соответствующих таблиц при вычислении Р, S. Последующее деление полученных результатов с помощью команды EDIV (см. табл. 2.4) позволяет получить средневзвешенное значение выходного параметра Zw = P/S, которое используется при решении задач управления объектами. Если для этого требуется несколько выходных параметров, то команды WAV и EDIV выполняются несколько раз с различными значениями Zi, Fi, n.
При выполнении команды WAV в аккумулятор В загружается требуемое значение n, в регистр IX - адрес первой выходной переменной, в регистр IY - адрес весового коэффициента, заданного для этой переменной. После каждого вычисления полученные промежуточные значения Р и S сохраняются, содержимое регистров IX, IY автоматически инкрементируется на 1, адресуя в соответствующих таблицах следующую выходную переменную Zi и заданный для нее коэффициент Fi, содержимое аккумулятора В уменьшается на 1. Процесс вычисления заканчивается, когда содержимое В становится равным 0, при этом признак Z в регистре CCR принимает значение 1. Накопленное в процессе вычислений 24-разрядное значение суммы произведений Р заносится в пару регистров IX:D (16 младших разрядов в D, 8 старших разрядов в IX), а 16-разрядное значение суммы весовых коэффициентов S -в регистр IY. Таким образом, полученные результаты готовы для выполнения последующей команды EDIV, вычисляющей значение выходного параметра Zw.
Необходимо отметить, что выполнение команд REV, REVW, WAV может потребовать значительного времени. Поэтому допускается прерывание их выполнения при поступлении соответствующих запросов с автоматическим сохранением промежуточных результатов в стеке. После обработки прерывания содержимое используемых регистров автоматически восстанавливается и выполнение данных команд продолжается.
Команды управления программой (табл. 2.11) реализуют безусловный переход, условные и безусловные ветвления по различным условиям, организацию циклов, вызов подпрограмм и реализацию программных прерываний, выход из подпрограммы или процедуры обработки прерывания.
Значительная часть команд этой группы выполняется аналогично соответствующим командам микроконтроллеров 68НС11/711 с использованием ряда дополнительных способов адресации, введенных для семейства 68НС12/912. Так, при выполнении команд JMP, JSR для определения адреса перехода ЕА могут использоваться любые варианты прямой, индексной и косвенно-индексной адресации, которые обеспечивает процессор CPU12. В командах условного ветвления по значению заданного бита BRCLR, BRSET операнд выбирается с помощью различных вариантов прямой или индексной адресации. В качестве условий ветвления cc используются такие же комбинации признаков, как для семейства 68НС11/711 (см. табл. 1.59).
Дополнительно введенные команды LBcc, LBRA реализуют условное и безусловное ветвление с использование 16-разрядного смещения со знаком rel16. Таким образом обеспечивается возможность перехода к любой позиции адресного пространства объемом 64 Кбайт («длинное» ветвление). Команда LBRN реализует переход к следующей команде программы. Эти команды имеют длину 4 байта (2 байта - код операции, 2 байта - смещение rel16).
Таблица 2.11. Команды управления программой
Команда CALL обеспечивает вызов подпрограммы, расположенной за пределами 64 Кбайт стандартного адресного пространства. Для адресации расширенной памяти емкостью до 4 Мбайт используется специальный регистр, который содержит старшие 8 разрядов формируемого при этом 24-разрядного адреса. Отметим, что из рассматриваемых в данном разделе микроконтроллеров семейства 68НС12/912 возможности адресации такого объема памяти реализуются только в модели 68НС812А4. Поэтому команды CALL и RTC выполняются только процессорами CPU12, входящими в состав микроконтроллеров 68НС812А4.
При выполнении команды CALL содержимое регистра PPAGE заносится в стек вместе с содержимым PC. В данной команде используется непосредственное или косвенное указание номера страницы, где располагается вызываемая подпрограмма. При непосредственном указании в поле операндов дается номер страницы page, который может иметь значения от 0 до 63. В этом случае символ opr задает способ определения 16-разрядного адреса ЕА, указывающего первую команду подпрограммы, с помощью прямой или различных вариантов индексной адресации. Если используемый в команде CALL символ opr задает один из вариантов косвенно-индексной адресации, то значения адреса ЕА и номера страницы page выбираются из памяти. В этом случае из пары адресуемых в команде ячеек памяти выбираются старший и младший байты адреса ЕА, а из следующей за ними ячейки - номер требуемой страницы page. Возврат из подпрограммы при использовании расширенного адресного пространства реализуется с помощью команды RTC, которая восстанавливает первоначальное содержимое регистров PPAGE и PC, загружая его из стека.
Введенные в семействе 68НС12/912 команды DBEQ, DBNE, IBEQ, IBNE, TBEQ, TBNE обеспечивают различные варианты реализации программных циклов. В качестве операнда cnt в этих командах указываются символы А, В, D,X, У или SP, определяющие 8- или 16-разрядные регистры А, В, D, IX, IY или SP, которые используются в качестве счетчиков циклов. Смещение rel9 является 9-разрядным числом со знаком, что обеспечивает переход в пределах от -256 до +255 позиций от текущего содержимого PC. Условием перехода к началу цикла окончания является равенство нулю (команды DBEQ, IBEQ, TBEQ) или неравенство нулю (команды DBNE, IBNE, TBNE) содержимого счетчика cnt. Команды TBEQ, TBNE обеспечивают выполнение цикла в соответствии с текущим содержимым регистра-счетчика. Команды DBEQ, DBNE предварительно производят декремент содержимого счетчика на 1, а команды IBEQ, IBNE - инкремент содержимого счетчика на 1.
Программное прерывание выполняется с помощью команды SWI, которая заносит в стек содержимое регистров процессора и загружает в PC соответствующий вектор прерывания Ve, размещенный в таблице векторов по адресу $FFF6-F7 (см. 2.1.3). Дополнительная команда TRAP также сохраняет в стеке содержимое регистров и загружает в PC вектор Ve, размещенный по адресу $FFF-F9, который служит для вызова обработчика прерывания при поступлении неправильного кода команды (см. 2.1.3). В качестве операнда tn в команде TRAP используются числа в диапазоне $30-39 или $40-FF, которые соответствуют значению второго байта в неправильных (неиспользуемых) кодах команд. Возвращение из программы-обработчика прерываний (исключений) обеспечивает команда RTI.
Команды управления процессором (табл. 2.12) переводят его в энергосберегающие режимы ожидания и останова (команды WAI, STOP, см. 2.1), а также обеспечивают отсутствие операций («пустая» команда NOP).
Следует отметить, что аналогично NOP отсутствие (пропуск) операции реализуют команды BRN и LBRN. Отличие состоит в том, что команда NOP обеспечивает задержку выполнения программы на один такт, a BRN и LBRN - на 2 и 4 такта. Путем комбинации этих команд и организации их циклического выполнения можно программно реализовать различные значения задержек.
Дополнительно введенная в семейство 68НС12/912 команда BGND обеспечивает перевод процессора в специальный режим отладки BDM (Background Debug Mode), который описан в 2.1.12.
Время выполнения большинства команд составляет от 1 до 6 тактов (в зависимости от используемого способа адресации). Более длительное время требуется для реализации команд деления IDIV, IDIVS, EDIV, EDIVS, FDIV и умножения с накоплением EMACS (11-13 тактов), табличной интерполяции TBL, ETBL (8 и 10 тактов), вызова подпрограммы CALL (8-10 тактов), программных прерываний SWI, TRAP (9 и 10 тактов), ожидания WAI и останова STOP (9 и 10 тактов). Длительность выполнения команд «нечеткой логики» REV, REVW, WAV зависит от объема используемой базы знаний.
Таблица 2.12. Команды управления процессором
Организация очереди команд. Особенностью процессора CPU12 является реализация внутренней очереди команд, в которую выбираются коды команд для их последующего выполнения. Организация очереди исключает потери времени на выбор очередной команды после выполнения предыдущей, что обеспечивает повышение производительности.
Очередь команд в CPU12 имеет две основные позиции, в которые поступают по 2 байта программного кода. Первые 2 байта загружаются в позицию 1 очереди. При выборке двух следующих байт программы первые 2 байта перемещаются из позиции 1 в позицию 2 очереди, откуда они выбираются для декодирования и исполнения. Вновь поступившие 2 байта занимают освободившуюся позицию 1. Дополнительный 16-разрядныЙ буфер команд располагается перед очередью. В него загружаются 2 вновь выбранных байта программного кода, если позиции 1 и 2 очереди заняты командами, выполнение которых еще не завершено. После выполнения команды, расположенной в позиции 2, в эту позицию перемещаются для исполнения два байта из позиции 1. В освободившуюся позицию 1 очереди поступают байты программного кода из буфера команд. Таким образом, очередь команд содержит две основные позиции 1 и 2, в которых содержатся 4 байта выбранного программного кода, и дополнительный буфер команд, где хранятся 2 следующих байта, если обе позиции очереди заняты командами, ждущими выполнения.
В каждом такте выполнения программы очередь команд имеет одно из четырех возможных состояний:
состояние 0: отсутствие перемещения программного кода в очереди (стационарное состояние);
состояние 1: прием в буфер команд двух байт программного кода;
состояние 2: перемещение двух байт из позиции 1 в позицию 2 и загрузка в позицию 1 двух новых байтов программного кода с шины данных;
состояние 3: перемещение двух байт из позиции 1 в позицию 2 и загрузка в позицию 1 двух байт программного кода из буфера команд.
В процессе работы микроконтроллера информация о текущем состоянии очереди команд выдается на внешние выводы IPIPE1-0 и может использоваться для контроля его функционирования в процессе отладки программного обеспечения и аппаратных средств системы. В каждом такте на эти выходы выдается код ЕХ, указывающий на начало выполнения следующей команды программы, и код DM, определяющий состояние очереди команд. Код ЕХ принимает соответствующее значение, когда в позицию 2 очереди команд поступает первый байт (код операции) новой команды программы и начинается ее выполнение. При этом ЕХ указывает, в каком байте - старшем (с четным адресом) или младшем (с нечетным адресом), размещается код операции новой команды.
Код ЕХ устанавливается на выводах IPIPE1-0 при поступлении отрицательного перепада тактового сигнала ECLK (начало очередного такта), код DM - при положительном перепаде этого сигнала. Значения этих кодов приведены в табл. 2.13.
Таблица 2.13. Значения сигналов (коды EX, DM) на выводах IPIPE1-0
