Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2004 №6

Новое расширенное ядро PIC18 микроконтроллеров компании Microchip

Афанасьев Илья


Компания Microchip модернизировала ядро PIC18 в соответствии с современными требованиями, создав усовершенствованное ядро EGG (Extended Gold Gate) с новыми инструкциями, расширяющими функциональность ядра.

Компания Microchip Technology Inc. на протяжении нескольких лет с успехом производит мощные Flash-микроконтроллеры семейства PIC18 с тактовой частотой до 40 МГц, аппаратным умножителем 8x8 за один такт и широким набором периферийных модулей: многоканальный 10-разрядный АЦП, ШИМ, интерфейсы I2C, SPI, USART, LIN, CAN2.0B. Система команд микроконтроллеров PIC18 изначально разрабатывалась для эффективного использования языка высокого уровня С. Однако, проанализировав современные требования и оптимальное взаимодействие с компиляторами, компания Microchip модернизировала ядро PIC18, и теперь новые микроконтроллеры имеют усовершенствованное ядро EGG (Extended Gold Gate).

Новые контроллеры поддерживают все 75 стандартных команд ядра PIC18, а также 8 новых дополнительных команд и расширение адресации в стандартных командах для оптимизации реализации рекурсивных функций и работы с программным стеком.

Стандартное ядро PIC18 добавляет много расширенных возможностей по сравнению с младшим семейством микроконтроллеров PICmicro (PIC12, PIC16), в то же время обеспечивая легкость перехода снизу вверх. Большинство команд занимает одно программное слово (16 бит) за исключением четырех команд, которые требуют два слова программной памяти.

Каждая однословная команда делится на код операции (opcode), который определяется типом инструкции, и один или несколько операндов, которые определяют действие команды.

Система команд сгруппирована в четыре основные категории:

  • байт-ориентированные команды;
  • бит-ориентированные команды;
  • команды, работающие с константами;
  • управляющие команды.
  • системы команд

Дополнительно к стандартным 75 инструкциям ядра PIC18 новые микроконтроллеры поддерживают команды, расширяющие функциональность ядра. Дополнительные восемь инструкций пополняют операции с косвенной и индексной адресацией, в новом ядре также реализована индексная адресация со смещением для многих стандартных инструкций ядра PIC18. Расширение системы команд по умолчанию запрещено. Для разрешения работы расширенных команд служит специальный бит конфигурации микроконтроллера XINST. Таким образом, реализуется полная программная совместимость со стандартным ядром, если пользователь использует новые микроконтроллеры со старым программным обеспечением.

Расширенные команды можно классифицировать как команды с константами, которые работают с регистрами общего назначения или используются для индексной адресации. Список новых инструкций приведен в таблице 1. Две из инструкций ADDFSR и SUBFSR имеют специальное расширение для работы с регистром косвенной адресации FSR2. Эти команды (ADDULNK и SUBLNK) позволяют производить автоматический выход из подпрограммы (return) после выполнения. Расширенные инструкции предназначены для улучшения оптимизации и возможности создания реентерабельного кода (то есть построения рекурсивных алгоритмов или использования программного стека) на языках высокого уровня, например на С. Наряду с прочим, расширение системы команд позволяет пользователю работать с языками высокого уровня для эффективного выполнения таких операций над данными, как, например:

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

Таблица 1. Список новых инструкций ядра PIC18
Таблица 1. Список новых инструкций ядра PIC18
Пример 1:
Синтаксис расширенных команд

Большинство расширенных команд работает с индексными параметрами, используя один из регистров FSR (регистр указателя адреса при косвенной адресации) и некоторое смещение, чтобы определить регистр адресата или источник. Когда аргумент для команды служит частью индексной адресации, он помещается в квадратные скобки. Это сделано, чтобы указать, что параметр используется как индекс или сдвиг. Если индекс или значение смещения не заключены в скобки, то ассемблер MPASM™ укажет на ошибку. Когда разрешен расширенный набор команд, скобки также используются, чтобы указать индексные параметры в байт-ориентированных и бит-ориентированных командах.

Пример 2:
Пример 3:
Бит-ориентированные и байт-ориентированные команды в режиме индексной адресации со смещением

В дополнение к восьми новым командам в расширенном наборе добавлена индексная адресация со смещением в стандартных байт- и бит-ориентированных командах. В зависимости от вида написания команды ее интерпретация ассемблером будет различна.

Если расширенный набор запрещен, то адрес f в команде указывает на буквальное местоположение в памяти в зависимости от значения параметра а: при а = 0 — в Access Bank, при а = 1 — в банке GPR (адрес которого определен в BSR).

Если же расширенный набор команд разрешен, то адрес интерпретируется либо как в стандартном режиме работы ядра PIC18, либо как смещение от значения указателя в FSR2. Если нужно указать значение смещения, то это смешение должно быть обрамлено квадратными скобками, при этом значение смещения должно лежать в диапазоне от0 до 95 (5Fh). Практически это означает, что все команды, которые используют бит признака доступа к оперативной памяти Access Bank или BSR как параметр — то есть все байт- и бит-ориентированные команды (что составляет почти половину основных команд PIC18) могут вести себя по-другому в ядре PIC18 с расширенным набором команд. Использование скобок указывает к компилятору, что значение должно интерпретироваться как индекс или смещение. Исключение скобок или использование значения смещения большего, чем 5Fh, в пределах скобок приведет к выдаче сообщения об ошибке в ассемблере MPASM. Пример 4, а и 6иллюстриру-ет использование одной и той же команды для разных случаев адресации.

Когда содержание FSR2 указывает на адрес 0х00, границы оперативной памяти по существу повторно отображаются к их первоначальным значениям. Это может быть полезно при создании кода, совместимого с обычным ядром PIC18.

Если в режиме индексной адресации со смещением индексный параметр заключен в скобки, то параметр доступа к оперативной памяти a никогда не указывается и будет автоматически принят как 0. Это отличие от стандартной операции, когда a указывает на целевой адрес. Объявление бита доступа оперативной памяти в этом режиме также приведет к сообщению об ошибке в ассемблере MPASM. Параметр адресата d функционирует в новом ядре как и прежде.

В последних версиях языка ассемблера MPASM поддержка расширенного набора команд должна быть указана явно. Это делается либо с опцией в командной строке /у, либо с директивой PE в листинге исходного кода. В компиляторе MPLAB-C18 нужно указывать директиву -extended и подключать соответствующий командный файл линкера, например 18f4620 e.lkr.

Пример 4: Иллюстрация работы одной и той же команды для разных режимов адресации. Режим расширенного ядра разрешен.

Оптимизация кода при использовании языка высокого уровня

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

Рассмотрим некоторые примеры оптимизации кода и быстродействия при использовании языка высокого уровня С.

Пример 5: Присвоение значения элементу массива, mass[2] = 5.

При реализации на стандартном ядре PIC18 данная команда занимает 10 байт памяти программ и выполняется за 5 машинных циклов:

Расширенное ядро требует всего 4 байт программной памяти и выполняется за 2 машинных цикла:

Пример 6: Присвоение элементу массива значения другого элемента, mass[2] = mass[5].

Стандартное ядро PIC18: 12 байт памяти программ:

Расширенное ядро: 4 байт программной памяти

Пример 7: Вызов функции по указателю: fn[ptr]().

Стандартное ядро: 18 байт программной памяти, выполняется за 9 машинных циклов:

Расширенное ядро: 14 байт программной памяти, выполняется за 6 машинных циклов:

Особенности микроконтроллеров с расширенным ядром PIC18

Компания Microchip готовит к выпуску целое семейство микроконтроллеров с расширенным ядром PIC18 (табл. 2). Все микроконтроллеры выполнены по технологии NanoWatt, а значит, имеют встроенный тактовый генератор с возможностью программного выбора частоты от 32 кГц до 8 МГц; имеют возможность отключения тактирования ядра для сохранения энергии; имеют возможность переключения «на лету» источника тактовой частоты между основным генератором (до 40 МГц), дополнительным генератором, подключаемым к Timer 1, и внутренним RC-генератором. В NanoWatt-микроконтрол-лерах имеется возможность контроля работоспособности основного кварцевого генератора и в случае отказа кварца — переключения на внутренний генератор. Эта особенность может пригодиться для повышения надежности важных и необслуживаемых систем.

Все новые микроконтроллеры поддерживают внутрисхемную отладку с помощью отладчика-программатора ICD-2. Для новых контроллеров поддерживаются 3 точки останова, просмотр и модификация содержимого ОЗУ, возможность запуска программы в реальном времени и в пошаговом режиме.

Таблица 2. Микроконтроллеры с расширенным ядром PIC18
Таблица 2. Микроконтроллеры с расширенным ядром PIC18

Среди новых микроконтроллеров есть микросхемы со встроенной поддержкой протоколов USB 2.0 (full-speed), CAN 2.0B, кроме того, во всех контроллерах есть поддержка интерфейса I2C, SPI и расширенный интерфейс USART (EUSART) с возможностью автоподстройки скорости и выхода из режима SLEEP при наличии активности на шине.

Скачать статью в формате PDF  Скачать статью Компоненты и технологии PDF

 


Сообщить об ошибке