ВНУТРИСХЕМНЫЙ СИМУЛЯТОР ДЛЯ МИКРОКОНТРОЛЛЕРОВ PIC16/17


В. Бродин, А. Калинин, Л. Хохлов

    Симулятор представляет собой комплекс аппаратных и программных средств, позволяющих создать рабочую программу для микроконтроллера из семейства PIC и внедрить ее в плату системы управления

Особенности архитектуры микроконтроллеров PIC16/17

    Основным назначением микроконтроллеров PIC16/17, как следует из аббревиатуры PIC (Peripheral Interface Controller), является выполнение интерфейсных функций. Этим объясняются особенности их архитектуры:

    Анализ архитектуры микроконтроллеров PIC с точки зрения их программирования и отладки систем позволяет сделать следующие выводы:

    Указанные особенности архитектуры микроконтроллеров PIC оправданы чрезвычайно низкой ценой, поэтому эти изделия (особенно семейства PIC16) весьма популярны. В настоящее время их используют даже вместо логических ИС средней степени интеграции. Но реализовать все преимущества этих микроконтроллеров можно только при наличии средств программирования и отладки, адекватных по цене и функциональным возможностям решаемым задачам. Важнейшие требования к инструментальным средствам для микроконтроллеров, ориентированных на выполнение функций ввода-вывода, можно сформулировать следующим образом:

Внутрисхемная симуляция как метод отладки

    К традиционным методам комплексной отладки аппаратуры и программного обеспечения микропроцессорных систем можно отнести следующие:

    Фирма 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:

    Программная компонента внутрисхемного симулятора представляет собой интегрированную систему программирования на языке ассемблер, функционирующую в среде 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, при переполнении которого выставляется бит соответствующего регистра, который можно проверять в программе. Пользователь может отказаться от изображения окна внешних воздействий без остановки выполнения программы.

Литература



Лаборатория «Микропроцессорные системы» МИФИ
Тел. (095) 323-9357
E-mail:mpsis@d406.micro.mephi.ru
Website: http://msl.gaw.ru