ВНУТРИСХЕМНЫЙ СИМУЛЯТОР ДЛЯ МИКРОКОНТРОЛЛЕРОВ PIC16/17
В. Бродин, А. Калинин, Л. Хохлов
Симулятор представляет собой комплекс аппаратных и программных средств, позволяющих создать рабочую программу для микроконтроллера из семейства PIC и внедрить ее в плату системы управления
Особенности архитектуры микроконтроллеров PIC16/17
Основным назначением микроконтроллеров PIC16/17, как следует из аббревиатуры PIC (Peripheral Interface Controller), является выполнение интерфейсных функций. Этим объясняются особенности их архитектуры:
- RISC-система команд, характеризующаяся малым набором одноадресных инструкций (33, 35 или 55), каждая из которых имеет длину в одно слово (12, 14 или 16 бит) и большинство выполняется за один машинный цикл. В системе команд отсутствуют сложные арифметические команды (умножение, деление), предельно сокращен набор условных переходов;
- высокая скорость выполнения команд: при тактовой частоте 20 МГц время машинного цикла составляет 200 нс (быстродействие равно 5 млн.операций/сек);
- наличие мощных драйверов (до 24 мА) на линиях портов ввода/вывода;
- низкая потребляемая мощность;
- ориентация на ценовую нишу предельно низкой стои-мости, определяющая использование дешевых корпусов с малым количеством выводов (8, 14, 18, 28), отказ от внешних шин адреса и данных (кроме PIC17C4X), использование упрощенного механизма прерываний и аппаратного (программно недоступного) стека.
Анализ архитектуры микроконтроллеров PIC с точки зрения их программирования и отладки систем позволяет сделать следующие выводы:
- RISC-система команд обеспечивает высокую скорость выполнения инструкций, но вызывает затруднения и снижение производительности при программировании нетривиальных алгоритмов. Поскольку все инструкции в системе команд являются одноадресными, загрузка константы в любой из регистров требует двух инструкций. Вначале нужно загрузить константу в рабочий регистр W, а затем переслать его содержимое в нужную ячейку памяти данных:
movlw 12h
movwf REG
Аналогично, все бинарные арифметико-логические операции приходится выполнять с привлечением рабочего регистра W.
- Высокое быстродействие в значительной степени достигается за счет использования конвейера команд. Инструкции ветвления, изменяющие программный счетчик (безусловный переход, вычисляемый переход), не используют инструкцию из очереди, поэтому выполняются за два машинных цикла и снижают темп выполнения программы. Кроме того, сам анализ условий в архитектуре PIC требует выполнения “лишних” команд.
- Наличие одного вектора прерываний, отсутствие развитого механизма обработки запросов по приоритетам и вложенных прерываний затрудняют решение сколько-нибудь сложных задач управления. При приходе запроса от любого из источников выполняется переход на процедуру обработки по единственному вектору. В процедуре приходится по флагам определять источник, причем условия ветвления, как указывалось выше, анализируются сложно, и все это ухудшает время реакции. После обработки прерывания нужно самостоятельно очистить флаг запроса. Из-за отсутствия вложенных прерываний возможно длительное ожидание обработки запросом от источника с более высоким приоритетом.
- Аппаратный стек глубиной 2 или 8 слов не имеет признака переполнения и ограничивает вложенность процедур. За отсутствием его переполнения программист должен следить самостоятельно.
- Память данных состоит из банков, для определения текущего банка используются биты регистров STATUS (для PIC16) или BSR (для PIC17). На этапе трансляции принадлежность указанного регистра текущему активному банку не может быть проверена, для этого требуется моделирование хода выполнения программы.
- Память программ разбита на страницы размером 2К слов. Для перехода на нужный адрес по командам CALL и GOTO должны быть правильно установлены биты выбора текущей страницы в регистре PCLATCH. На этапе трансляции невозможно проверить правильность передачи управления во время выполнения, для этого также требуется моделирование выполнения программы.
- Ограниченность ресурсов микроконтроллеров PIC делает проблематичным их программирование на языках высокого уровня.
Указанные особенности архитектуры микроконтроллеров PIC оправданы чрезвычайно низкой ценой, поэтому эти изделия (особенно семейства PIC16) весьма популярны. В настоящее время их используют даже вместо логических ИС средней степени интеграции. Но реализовать все преимущества этих микроконтроллеров можно только при наличии средств программирования и отладки, адекватных по цене и функциональным возможностям решаемым задачам. Важнейшие требования к инструментальным средствам для микроконтроллеров, ориентированных на выполнение функций ввода-вывода, можно сформулировать следующим образом:
- основным назначением этих средств является поддержка программирования на языке ассемблер и перенесение программы на плату системы управления;
- мощные драйверы портов ввода/вывода, состояние которых однозначно описывается значениями в регистрах управления, упрощают функцию замещения электрофизических параметров прототипной БИС, поэтому эти порты можно имитировать с помощью БИС программируемой логики;
- стоимость инструментальных средств должна соответствовать невысокой стоимости одноплатного контроллера.
Внутрисхемная симуляция как метод отладки
К традиционным методам комплексной отладки аппаратуры и программного обеспечения микропроцессорных систем можно отнести следующие:
- схемная эмуляция, в том числе внутрисхемная, а также с использованием режима ONCE (у микроконтроллеров фирмы Intel) [1];
- эмуляция памяти программ [2];
- использование внутренних специальных средств микропроцессорных БИС (например, BDM порта микроконтроллеров фирмы Motorola) [3];
- использование внешних относительно целевой БИС аппаратных средств, размещаемых на плате микропроцессорного контроллера [4];
- использование супервизора отладки, присоединяемого к плате микропроцессорного контроллера на период отладки [5];
(разрабатывается в последнее время в качестве метода комплексной отладки).
Фирма Motorola в качестве средства освоения своих 8-разрядных микроконтроллеров предлагает изделия класса StartKit, использующие в качестве метода отладки внутрисхемную симуляцию (ICS — in-circuit simulation). Суть этого метода состоит в сочетании программной эмуляции операционных функций микропроцессорной БИС, выполняемой на быстродействующем инструментальном компьютере, с реализацией функций портов ввода/вывода посредством программируемого аппаратного модуля.
Изделия типа M68ICS05C имеют нарочито ограниченные характеристики, чтобы не конкурировать с внутрисхемными эмуляторами, которые для семейства микроконтроллеров 68HC05 имеют стоимость около $3500. Однако, в условиях отечественного рынка для систем на основе RISC-микроконтроллеров метод внутрисхемной симуляции может стать одним из основных методов комплексной отладки, поскольку отвечает всем основным требованиям, перечисленным выше.
Внутрисхемный симулятор для микроконтроллеров PIC16/17
Симулятор является комплексом аппаратных и программных средств, позволяющих создать рабочую программу для микроконтроллера из семейства PIC и перенести ее на плату системы управления.
Аппаратная компонента внутрисхемного симулятора реализует функции портов ввода/вывода общего назначения микроконтроллера, то есть является эмулятором физических линий портов. Для этой цели использован универсальный порт внутрисхемной симуляции ICS40, имеющий 40 программируемых линий ввода/вывода. Каждая линия управляется через триггер-защелку выходной информации и триггер разрешения выхода, отключающий выход в высокоимпедансное состояние. Чтение состояния линии производится непосредственно с вывода микросхемы-порта. Таким образом, структура линии порта ICS40 идентична внутренней структуре порта микроконтроллера. В процессе отладки проекта внутрисхемный симулятор подключается к исследуемой плате, замещая целевой микроконтроллер. Выполнение прикладной программы производится программой-симулятором, встроенной в интегрированную систему программирования. При выполнении инструкций микроконтроллера, обращающихся к порту ввода/вывода (PORTx, TRISx для PIC16), обмен данными производится с регистрами ICS40, эмулирующими порты микроконтроллера. Таким образом прикладная программа работает непосредственно с отлаживаемой системой. Естественно, время выполнения инструкции прикладной программы при симуляции значительно больше, чем при выполнении программы микроконтроллером. Однако, для проектов, требующих реакции на редко возникающие события (десятки миллисекунд), внутрисхемный симулятор может полностью выполнить задачу отладки даже в реальном времени. К таким проектам можно отнести задачи измерения и регулирования температуры, измерения давления, концентрации газов и т. д. Еще одним ограничением использования внутрисхемной симуляции является отладка специальных периферийных функций микроконтроллеров: интерфейс UART, АЦП. Для решения таких задач разрабатываются модули, аппаратно реализующие данные периферийные функции и подключаемые к порту ICS40.
Порт ICS40 выполнен в виде печатной платы размером 60ґ80 мм, размещаемой в непосредственной близости от отлаживаемой платы. К инструментальному компьютеру типа IBM PC порт ICS40 подключается через параллельный интерфейс CENTRONICS. Для подключения к исследуемой плате (то есть для замещения целевого микроконтроллера внутрисхемным симулятором) используется кабель с разъемом типа DIP16/18/20/28/40, в зависимости от типа симулируемого микроконтроллера. Питание ICS40 осуществляется от внешнего источника напряжения +5 В. Характеристики порта ICS40:
- количество линий ввода/вывода — 40;
- нагрузочная способность выхода:
при U < 0,45 В — 12 мА,
при U > 2,4 В — 4 мА;
- ток короткого замыкания выхода — не более -150 мA.
Программная компонента внутрисхемного симулятора представляет собой интегрированную систему программирования на языке ассемблер, функционирующую в среде MS-DOS. При работе с аппаратурой, когда возможны сбои инструментального компьютера из-за нештатных ситуаций в отлаживаемой системе, удобнее использовать DOS.
Интегрированная система “ТурбоАссемблер-PIC” создана на основе библиотеки программных модулей и механизмов обмена отладочной информацией, разработанных в лаборатории “Микропроцессорные системы”. Быстрый рост номенклатуры микроконтроллеров требует создания все новых средств отладки, поэтому весьма важно наличие технологии их разработки. Такая технология, созданная за последнее десятилетие в нашей лаборатории, применительно к программным средствам подразумевает единую методику проектирования кросс-трансляторов, единую оболочку и интерфейс пользователя, набор механизмов обмена информа-цией внутри интегрированной системы и интерфейсов связи с различными аппаратными платформами. Она поддержана библиотекой программных модулей, выполняющих функции отдельных компонент интегрированной системы. Система “ТурбоАссемблер-PIC” является опытом формального построения интегрированной системы программирования на основе ранее созданной технологии и разработки новых модулей кросс-ассемблера и программно-логической модели семейства микроконт-роллеров PIC. Интегрированная система включает: редактор текста, полноразмерный кросс-ассемблер, редактор связей, библиотеку стандартных функций, символический отладчик и программно-логическую модель. Вид рабочего экрана системы с открытыми окнами редактора текста, дизассемблера и символического отладчика приведен на рис. 1.
Рис. 1. Вид экрана системы программирования
Фактически в комплект поставки входят два исполняемых модуля системы программирования: один из них ориентирован на микроконтроллеры семейства PIC16XX, а другой — на семейство PIC17XX. Существование двух отдельных исполняемых модулей обусловлено значительным различием программных моделей микроконтроллеров указанных семейств. С другой стороны, это позволяет разработчику сосредоточиться на определенной архитектуре, ограничить набор настроек системы и ее размер. Встроенный в систему “ТурбоАссемблер-PIC” транслятор полностью совместим по набору команд с ассемблером MPASM, поставляемый фирмой Microchip. Макрорасширения языка содержат некоторые отличия. Макроассемблер дает возможность сегментировать память программ и данных, формировать перемещаемый код. Это позволяет создавать библиотеки функций. Для разработчиков доступно множество исходных текстов примеров программ (Application Notes) на www-сервере Microchip. После незначительных изменений тексты этих примеров могут быть восприняты системой “ТурбоАссемблер-PIC”, после чего становятся доступны все ее преимущества в части формирования перемещаемого кода и раздельной трансляции. В систему программирования встроена библиотека математических функций периода выполнения. В операциях с плавающей запятой поддержан 3-байт формат числа, принятый как стандарт в других системах разработки, ориентированных на микроконтроллеры PIC.
Для создания сложных многомодульных программ используется менеджер проекта, встроенный в систему. Пользователь создает список файлов, участвующих в трансляции, указывает их месторасположение. Менеджер проекта отслеживает изменения в файлах, и в зависимости от этого, транслирует только изменившиеся. Если программа состоит из одного файла, загруженного в окно редактора, то проект по умолчанию состоит из этого единственного файла. Программа транслируется редактором связей в HEX-файл. Для загрузки кода программы в микросхему можно воспользоваться универсальным программатором KROM, созданным в лаборатории “Микропроцессорные системы”.
Символический отладчик позволяет программисту вести отладку программы непосредственно в исходном тексте, просматривать и изменять при остановах значения переменных, обращаясь к ним по именам, определенным в исходном тексте. Он обеспечивает общепринятые режимы отладки: выполнение программы по шагам (останов после каждой команды), прогон программы с остановами в контрольных точках.
Для просмотра областей памяти можно воспользоваться окном Watch или Evaluate/Modify. Просматривать можно значение символов в текущем контексте (данного файла). Возможны обращения к меткам как памяти данных, так и памяти программ. К метке можно обращаться для получения ее адреса
#Lab_name
или значения — данных, начинающихся с нее —
Lab_name.
Для явного обращения можно воспользоваться указателями DATA или CODE, по умолчанию производится обращение к памяти данных. Через запятую можно указать формат для отображения (десятичный, двоичный или шестнадцатиричный). Дополнительно можно получить значения следующих функций от действительного аргумента по указанному адресу: SYS, COS, TAN, ATAN.
При отладке программы пользователь может наблюдать код выполняемой программы в окне дизассемблера (рис. 1). В отношении микроконтроллеров PIC это особенно полезно из-за сложности реализации блока программного счетчика и сложной структуры памяти данных. Перемещаясь по шагам синхронно в окне исходного текста и окне дизассемблера, можно просматривать истинный выполняемый код. При переключении банков программист наблюдает в окне дизассемблера имена функциональных регистров активного банка и сможет легко отловить ошибки обращения к неактивному банку памяти данных. При вызове процедуры из другой страницы памяти программ также можно определить истинное значение адреса перехода. В окне дизассемблера можно произвольно перемещаться по памяти программ, изменять ее значения и устанавливать контрольные точки. Встроенный строчный ассемблер позволяет выполнять ассемблирование команд после правки непо-средственно в процессе отладки. Это дает возможность вносить оперативные изменения в текст в ходе отладки без перекомпиляции всей программы.
Кроме того, в окне дизассемблера разработчик имеет возможность наблюдать время выполнения программы в зависимости от тактовой частоты процессора. Обнулив перед выполнением интересующей процедуры внутренние часы модели (команда меню Hard|Clear clock) и установив на выходе из процедуры контрольную точку, можно определить время выполнения фрагмента программы.
Для выполнения команд программы отладчик привлекает программно-логическую модель, которая описывает ресурсы микроконтроллера: память программ и данных, аппаратный стек, программный счетчик, порты ввода вывода. В модели реализованы функции таймеров, режимы захвата значения сигнала, режим пониженного энергопотребления. Программно-логическая модель представляет собой обобщенную модель семейства. При инициализации системы программирования пользователь определяет тип микроконтроллера, а система конфигурирует обобщенную модель, определяя максимальный размер памяти программ, отсутствующие области памяти данных, набор устройств ввода/вывода.
Отображение внутренних ресурсов микроконтроллера является достаточно сложной задачей. Особенностью микроконтроллеров PIC является реализация ОЗУ в виде регистрового файла и отображение специальных функциональных регистров в его адресное пространство. Кроме этого память данных состоит из нескольких банков, которые проецируются в общее адресное пространство. Значение активного банка определяется состоянием управляющего регистра (BSR для PIC17 и STATUS для PIC16). Наиболее часто используемые регистры являются сквозными в адресном пространстве, и доступ к ним осуществляется независимо от значения активного банка. С другой стороны, часть регистров физически не реализована, а существующие области меняются от модели к модели, и поэтому необходимо запретить их изменения. В силу этого пользователю при отладке приходится иметь дело со сложной структурой памяти данных и множеством условно-стей. Управляющие регистры представляют собой комбинацию битовых флагов. Для облегчения контроля состояния регистров, в модели используется отображение их в виде прокручивающегося списка. Данные в каждом регистре представляются как в шестнадцатиричном, так и в двоичном коде. В списке отображается адресное пространство, и при изменении банка подлежащие регистры переключаются. Для функциональных регистров отображаются имена, для регистров общего назначения — адреса. Окно ресурсов изображено на рис. 2.
Рис. 2.Окно ресурсов микроконтроллера
В верхней строке окна отображен регистр состояния, каждый бит которого выделен отдельно: биты признаков результатов (Z — флаг нуля, DC — полупереноса, C — переноса), биты переключения активного банка (PR1:PR2), биты режима пониженного потребления и состояния сторожевого таймера (PD и TO), а также бит глобального разрешения прерываний (GIE).
Поскольку стек микроконтроллеров PIC программно недоступен и используется исключительно при вызове подпрограмм, он отображается в виде кольцевого буфера без возможности редактирования. Отдельными полями выведены значение программного счетчика и рабочего регистра.
Рис. 3. Окно генерации внешних воздействий
При запуске программы в прогон на экране появляется окно с изображением внешних выводов микроконтроллера (рис. 3), и можно задавать внешние воздействия на них. У портов ввода/вывода в зависимости от того, как их выводы запрограммированы, входы и выходы выделяются разными цветами. Если программа выполняет запись в порт, то пользователь визуально отследит выходящие данные. Также он может устанавливать данные для чтения на выводах, запрограммированных как входы (стрелочка направлена к корпусу микроконтроллера и подсвечена желтым цветом). Если внутренние блоки ввода/вывода используют сигналы внешних выводов, пользователь сможет их задавать.
При возникновении запроса на прерывание программа выполняет переход по соответствующему вектору прерываний. Также реализован сторожевой таймер WDT, при переполнении которого выставляется бит соответствующего регистра, который можно проверять в программе. Пользователь может отказаться от изображения окна внешних воздействий без остановки выполнения программы.
Литература
- Бродин В.Б., Калинин А.В. Схемные эмуляторы на универсальной платформе// Chip News. — 1998. — № 5. — С. 24–31.
- Бродин В.Б., Калинин А.В. Эмулятор ПЗУ с функциями логического анализатора// Инженерная микроэлектроника. — 1998. — № 1. — С. 16–18.
- Шагурин И.И. Микропроцессоры и микроконтроллеры фирмы Motorola. — М.: Радио и связь. — 1998. — 560 с.
- Бродин В.Б., Мальцев В.И., Петров С.Г., Попов Ю.В Одноплатный контроллер на основе MCS-196 с системой программирования// Chip News. — 1997. — № 3. — С. 10–15.
- Бродин В.Б., Калинин А.В. Одноплатный контроллер с присоединяемым супервизором и комплекс средств проектирования на его основе// Chip News. — 1998. — № 11-12. — С. 50–53.
Лаборатория «Микропроцессорные системы» МИФИ
Тел. (095) 323-9357
E-mail:mpsis@d406.micro.mephi.ru
Website: http://msl.gaw.ru