Научная статья на тему 'Инструментарий для разработки программируемых систем на кристалле PSoC'

Инструментарий для разработки программируемых систем на кристалле PSoC Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
520
72
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МИКРОКОНТРОЛЛЕР / ПРОГРАММИРОВАНИЕ / СИСТЕМА НА КРИСТАЛЛЕ / ПРОЕКТ / АССЕМБЛЕР / API / PSOC CREATOR

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Халайджи А. К., Хартов В. Я.

Описано назначение систем на кристалле PSoC и их отличие от микроконтроллеров. Особое внимание уделено рассмотрению аналоговой подсистемы, как одной из важнейших компонент PSoC от компании производителя Cypress. Приведены технические характеристики двух плат, использованных в качестве платформ для системного проектирования (семейств PSoC 3 и PSoC 5). Описана среда разработки систем на кристалле PSoC Creator и ее функциональные возможности. Освещены различные подходы по созданию элементов для проектируемой системы: схемотехнический, с помощью LUT-таблиц, на языке Verilog. Показана возможность программирования на языках ассемблер! и Cи. Даны рекомендации по разработке систем на кристаллах PSoC. DOI: 10.7463/rdopt.0215.0786444

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Инструментарий для разработки программируемых систем на кристалле PSoC»

Ссылка на статью:

// Радиооптика. МГТУ им. Н.Э. Баумана. Электрон. журн. 2015. № 02. С. 1-19.

Б01: 10.7463/п1о1*.0215.0786444

Представлена в редакцию: 21.02.2015 http://radiooptics.ru Исправлена: 09.03.2015

© МГТУ им. Н.Э. Баумана

УДК 004.3

Инструментарий для разработки программируемых систем на кристалле PSoC

Халайджи А. К.1, Хартов В. Я.1* кЬаПоуЬтЫи^ gmail.com

1МГТУ им. Н.Э. Баумана, Москва, Россия

Описано назначение систем на кристалле PSoC и их отличие от микроконтроллеров. Особое внимание уделено рассмотрению аналоговой подсистемы, как одной из важнейших компонент PSoC от компании производителя Cypress. Приведены технические характеристики двух плат, использованных в качестве платформ для системного проектирования (семейств PSoC 3 и PSoC 5). Описана среда разработки систем на кристалле PSoC Creator и ее функциональные возможности. Освещены различные подходы по созданию элементов для проектируемой системы: схемотехнический, с помощью LUT-таблиц, на языке Verilog. Показана возможность программирования на языках ассемблера и Ca Даны рекомендации по разработке систем на кристаллах PSoC.

Ключевые слова: система на кристалле, микроконтроллер, PSoC creator, проект, программирование, ассемблер, API

Введение

Успехи развития компьютерной техники тесно связаны с достижениями в области интегральных технологий одновременно с улучшением характеристик отдельных модулей ЭВМ: процессора, оперативной и постоянной памяти и др. Если в недалеком прошлом в качестве компонентов вычислительных систем использовались интегральные схемы (ИС) с малой интеграцией, то сегодня сложные системы конструируются, как правило, из больших и сверхбольших схем (БИС, СБИС). Однако такой подход не всегда оправдан.

Дело в том, что производство БИС и СБИС осуществляется по отлаженным технологическим процессам, поэтому такие устройства чаще всего входят в состав универсальных ЭВМ. Однако в ходе автоматизации технологических процессов широкое применение получили встраиваемые компьютерные системы. Для каждой автоматизируемой задачи необходимо иметь определённые модули периферии и разрабатывать соответствующее программное обеспечение. Производство СБИС под конкретные задачи становится всё больше неэффективным, так как нередко при внесении изменений в технологические процессы приходится заменять всё оборудование, и поскольку алгоритмы работы меняются, аппаратная логика СБИС оказывается

Радиооптика

неспособной к применению в новых условиях. Поэтому часто во встраиваемых системах используют технологию систем на кристалле (СНК, SoC).

Система на кристалле — это выполненная на одном кристалле электронная вычислительная система, состоящая из одного или нескольких процессорных модулей, образующих ядро и дополнительных системных и периферийных устройств. Тесная интеграция компонентов системы позволяет достичь высокого быстродействия при построении специализированных ЭВМ. Недостатком таких систем, также как и СБИС, является неизменяемость их структуры. Несмотря на это, СНК обладают высокой производительностью и за счёт того, что не содержат «лишних» для решения конкретной задачи элементов, зачастую обгоняют СБИС по быстродействию, надёжности, энергопотреблению и др.

Большие возможности для разработчиков открывают технологии программируемых логических интегральных схем (ПЛИС). Современные ПЛИС основаны на следующих типах ИС: программируемые логические матрицы (ПЛМ, Programmable Logic Array, PLA), программируемая матричная логика (ПМЛ, Programmable Array Logic, PAL) и базовые матричные кристаллы (БМК, Gate Array, GA) [1,2]. С их помощью можно «запрограммировать» необходимую логику работы проектируемого устройства. Например, изготовленная в заводских условиях ПЛМ содержит матрицы со всеми возможными связями между логическими элементами. Программирование ПЛМ заключается в разрушении ненужных связей для получения на выходах ПЛМ требуемых логических функций в зависимости от входных сигналов.

Основная идея технологий ПЛИС заключается в многократном использовании ПЛМ (или ПМЛ), функциональность которых расширена благодаря добавлению обратных связей, использованию триггерной памяти, применению реконфигурируемых связей и программируемой функциональности. Это позволяет использовать одну и ту же схему для реализации разных задач. Для этого существуют среды разработки, с помощью которых возможно создать СНК на основе ПЛИС. К одной из таких можно отнести САПР Altera Quartus II.

Помимо ПЛИС серьезного внимания заслуживает технология изготовления программируемых систем на кристалле PSoC (Programmable System on Chip). Концепция PSoC была разработана фирмой Cypress и заключается в следующем: система помимо процессорного ядра содержит небольшой набор стандартной периферии и блок конфигурируемых элементов (как цифровых, так и аналоговых) [3, 4]. При этом основной особенностью PSoC является возможность конфигурирования блоков — биты управления расположены в пространстве ввода-вывода ядра, что позволяет динамически во время исполнения программы, записывая в них определённые значения, менять конфигурацию платы. Другой особенностью является отсутствие механизма «прожигаемых фьюзов» (fuses). Таким образом, большим преимуществом PSoC по сравнению с другими программируемыми системами является возможность гибкого реконфигурирования периферии во время работы устройства.

Существует ряд трудов в области исследований PSoC в России. Например, в [5, 6] приводятся примеры использования сред разработки от Cypress: PSoC Designer и PSoC

Creator. Также есть ряд опубликованных статей сотрудников компании Macrogroup по рассмотрению отдельных подсистем PSoC.

Основной целью данной статьи является рассмотрение основных возможностей PSoC, её особенностей и возможных сфер применения. Статья ориентирована на специалистов, имеющих представление о работе микропроцессорных систем и начинающих знакомство с системами PSoC от Cypress.

1. Структура PSoC

Проведём сравнительный анализ структуры PSoC и микроконтроллера. Основным элементом микроконтроллера является процессор. Он представляет собой ядро микроконтроллера и соединён шиной со всеми остальными элементами микроконтроллера: памятью (FLASH, SRAM, EEPROM), портами ввода-вывода общего назначения, таймерами, АЦП, каналами последовательного ввода-вывода и др. Практически все процессы (исключающие использование контроллера прямого доступа к памяти) в микроконтроллере происходят под контроллером процессора с помощью системы прерывания и поллинга. В таких системах процессор является высоконагруженным элементом, так как он взаимодействует со всеми другими элементами микроконтроллера, поэтому от выбора ядра микроконтроллера во многом зависит качество всего микроконтроллера в целом.

Системы на кристалле PSoC имеют структуру, приведённую на рис. 1.

Рис. 1. Общая структура PSoC (SAR ADC- только в составе PSoC 5)

Из рис. 1 видно, что система PSoC содержит множество элементов: ЦАП, АЦП, LCD-драйвер, CapSense [7, 8], компараторы, операционные усилители, таймеры, счётчики, ШИМ; реализует протоколы CAN 2.0, I2C, FS USB 2.0.

Для добавления недостающего функционала предусмотрены программируемые блоки SC/CT (Switch Cap/Continuous Time) в аналоговой подсистеме, а также UDB-блоки и DFB - в цифровой. Таким образом, при необходимости можно запрограммировать UDB-блоки таким образом, чтобы реализовать обмен по протоколам UART и SPI. (Прим. Помимо этого разработчики PSoC Creator, в которой происходит проектирование PSoC, включили интерфейсные модули UART и SPI как отдельные блоки, готовые к использованию, в библиотеку стандартных элементов).

Независимую работу цифровой подсистемы от процессора позволяет осуществить блок DFB. Этот блок является математическим сопроцессором, способным совершать высокоточные математические вычисления.

Основным преимуществом PSoC перед микроконтроллером является большое количество программируемых элементов, что даёт большую свободу при проектировании сложных систем.

Таким образом, системы на основе PSoC представляют собой гибкий аппарат для разработки сложных систем. Они могут заменить не только микроконтроллер, но и часть, а в отдельных случаях и всю аналоговую и цифровую обвязку системы. В связи с этим разработка систем с применением PSoC позволяет удешевить проектируемое устройство, уменьшить габариты и улучшить эксплуатационные характеристики.

Возможности PSoC рассмотрим на примере двух наборов: PSoC 3 Development Kit (CY8CKIT-030) [9] и PSoC 5 FirstTouch Starter Kit (CY8CKIT-014) [10]. Общий вид плат приведен на рис. 2.

Ниже приведены их основные технические характеристики.

К основным характеристикам платы PSoC 3 можно отнести:

- 8-битная архитектура CPU 8051 ;

- напряжение питания - 3.3 или 5 В;

- наличие разъёма для подключения батареи 9 В ;

- интерфейс USB для программирования. Интерфейс обеспечивает функционирование платы при питании 3.3 В;

- три вида «земли»;

- режим малого потребления мощности (Low-Power);

- наличие RTC (Real-time clock);

- два задающих частоту кристалла. Один имеет частоту 32 кГц. Он необходим для работы RTC, который имеется на плате, и может функционировать при пониженном напряжении питания (Low-Power). Частота второго кристалла составляет 24 МГц;

- кнопка RESET, при нажатии которой осуществляется перезагрузка платы и перезапуск программы; две кнопки и два светодиода;

а)

б)

Рис.2. Структурные схемы PSoC 3 (а) и PSoC 5 (б)

- зона прототипирования, на которой можно разместить несложную аналоговую цепь;

- потенциометр;

- два порта: первый предназначен преимущественно для работы с CapSense и цифровыми сигналами, а второй - с аналоговыми;

- две кнопки и 5-элементный слайдер по технологии CapSense;

- сигма-дельта АЦП;

- широтно-импульсный модулятор (ШИМ, pulse-width modulation, PWM);

- LCD-драйвер;

- RS-232 интерфейс;

- К основным характеристикам платы PSoC 5 можно отнести:

- 32-битная архитектура ARM Cortex M3.

- разъём для подключения батареи 9 В;

- интерфейс USB, предназначенный для программирования;

- CapSense Proximity Sensor (датчик приближения);

- трёхосевой акселерометр;

- 5-сегментный CapSense-слайдер;

- невозможность одновременного использования CapSense-слайдера и Proximity Sensor;

- линейка индикаторов из восьми светодиодов;

- термистор;

- 12-пиновый соединитель для беспроводных модулей;

- 28 выводов на тыльной стороне платы (22 - GPIO, 2 - VDD, 2 - SIO);

- одна кнопка;

- сигма-дельта АЦП;

- АЦП последовательного приближения.

Таким образом, видно, что обе платы обладают достаточно разнообразным функционалом. Особый интерес представляет устройства, использующие технологию CapSense. Плата PSoC 5 имеет акселерометр, термистор, датчик приближения и др., однако не имеет LCD-дисплея, который есть на плате PSoC 3.

2. Среда разработки PSoC Creator

Вся разработка платформ на основе PSoC осуществляется в предоставляемой компанией Cypress среде PSoC Creator версий PSoC Creator 1.x, PSoC Creator 2.x, PSoC Creator 3.x.

Применительно к вышерассмотренным платам можно сделать следующее замечание. PSoC Creator 1.x поддерживает проекты на основе PSoC 3 и PSoC 5. PSoC Creator 2.х, поддерживает ещё и системы PSoC 5LP, которые являются модификацией PSoC 5 с

пониженным потреблением энергии. PSoC Creator 3.x поддерживает PSoC 5 LP и уже не поддерживает PSoC 5. Интерфейс PSoC Creator представлен на рис. 3.

Рис. 3. Главное окно проекта в PSoC Creator

В левой части экрана располагается панель проекта, в которой показана файловая структура директории проекта. Есть возможность добавлять файлы на языках C и ассемблера, а также на языке Verilog. Множество необходимых для проекта базовых элементов имеется в библиотеке элементов, поэтому нет необходимости программировать каждый элемент системы на Verilog или схемотехнически. Также существуют API-функции для элементов на языке C, поэтому для проектировщика описание функций проекта на языке C более удобно, чем на языке ассемблера.

Изначально в директории проекта создано три файла:

1) TopDesign.cysch - файл схемотехнического описания используемых элементов;

2) Design01.cydwr - файл настройки частот, приоритетов прерываний, каналов DMA и «распиновки», то есть привязки логических выводов, используемых в проекте, реальным физическим выводам платы;

3) main.c - файл программы.

В центральной части экрана представлена рабочая область (редактор для кода или область для расположения элементов схемы и т.д.). В правой части экрана расположена панель для отображения библиотеки элементов. Сразу после запуска программы доступно множество готовых к использованию элементов, таких как ADC, DMA и др. Помимо этого существует возможность создавать свои элементы и добавлять их в библиотеку. Эти элементы используются простым перетаскиванием левой кнопкой мыши из правой панели в рабочую область схемотехнического описания проекта.

Существует одна особенность, которая может ввести в заблуждение начинающих разработчиков. Она касается имён функций, предоставляемых API-описаниями, при работе с элементами. Дело в том, что для каждого элемента имеется встроенная в систему документация, в которой перечислены функции, вызов которых влияет на его поведение. Однако попытка непосредственного использования их в создаваемом программном коде приводит к ошибке. Дело всё в том, что имена функций, перечисленные в документации, являются лишь постфиксом для полного имени функции, которое имеет следующую структуру: <Имя элемента>_<Имя функции API>.

Как правило, процесс разработки протекает следующим образом. Сначала из библиотеки перетаскиваются элементы системы в рабочую область схемотехнического описания. При этом каждому из них присваивается уникальное имя. После этого, но до написания программного кода, можно собрать приложение по команде меню Build. При этом для каждого элемента в папке Generated_Source директории проекта создастся программный код, реализующий описываемое в документации API. Как уже говорилось выше, первым словом в названии каждой функции (до символа '_') является имя элемента. Таким образом, если есть элемент LCD, то LCD_PrintNumber() - корректный вызов функции, а CharacterLCD_PrintNumber() - некорректный, так как элемента с именем CharacterLCD не существует.

Может возникнуть вопрос, как компилятор узнаёт, есть ли элемент или нет. Дело в том, что главная функция программы main.c использует модуль device.h, который в свою очередь использует модуль project.h. При сборке приложений в project.h складываются директивы #include модулей каждого устройства. Поэтому из main.c доступны все функции каждого устройства. Весь этот механизм происходит автоматически при нажатии одной кнопки сборки проекта.

Опишем основные возможности, предоставляемые средой разработчику. Во-первых, как уже говорилось выше, система имеет базовую библиотеку стандартных элементов. Для того, чтобы использовать какой-либо из них, достаточно просто перетащить мышкой его из библиотеки в рабочую область проекта. После этого необходимо настроить его параметры. Вызвать окно для настройки можно двойным нажатием по элементу. Например, на рис. 4 представлено окно настройки таймера, входящего в библиотеку стандартных элементов.

Как видно (рис. 4), в окне настроек существует большое количество параметров, значения которых уже заданы автоматически. При необходимости их можно изменить. Также элементу автоматически присваивается уникальное имя, которое также можно изменить. В левом нижнем углу окна есть кнопка Data Sheet, вызывающая документацию с описанием элемента.

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

Рис. 4. Диалоговое окно конфигурации таймера

Помимо этого существует возможность создания элементов с помощью LUT-таблиц. LUT (Lookup table) - это специальные элементы, каждый вывод которых можно описать логической функцией входных сигналов, заданной в табличном виде. Этот приём позволяет проектировать цифровые схемы, логика которых может оказаться достаточно сложной. В целом, такое описание элемента позволяет сэкономить достаточно много времени при его проектировании. Особенно часто он применяется при проектировании цифровых автоматов последовательностного типа (автоматов с памятью).

Помимо этого среда Creator предоставляет возможность описания элементов на языке Verilog. Это позволяет описать сложное поведение элемента (схемы) на специализированном языке. Главный недостаток такого подхода заключается в том, что спроектированный таким способом элемент автоматически преобразуется в схемотехническое описание, которое часто бывает далеко на самым оптимальным. Тем не менее, для не искушенного в схемотехнике разработчика этот способ описания элемента может оказаться предпочтительным.

После того, как элемент спроектирован, его, как правило, используют в качестве одного из модулей общей схемы проекта. Для этого его необходимо, прежде всего, сохранить в библиотеке элементов, чтобы в проектируемой схеме он выглядел как «чёрный ящик» с определённым числом вводов и выводов. Это позволяет выстраивать иерархию элементов и инкапсулировать структуру, тем самым экономя рабочую область проекта, что весьма полезно и удобно.

Для каждого элемента, используемого в проекте после его сборки, формируется набор функций, с помощью которых можно воздействовать на него из программы. Преимуществом данного подхода является то, что можно составить сколь угодно сложную логическую схему устройства, вызывая в нужные моменты определённые функции API для управления элементами. Более того, среда достаточно гибкая и позволяет одновременно использовать все вышеперечисленные подходы, в том числе осуществлять аппаратно-программное управление. Например, если используется регистр, содержимое которого отображается на линейке светодиодов, и при этом в схеме проекта между ними существует шинное соединение, то при программном изменении содержимого регистра эти данные отобразятся на линейке светодиодов. Это позволяет проектировать устройства со сколь угодно сложной логикой функционирования.

3. Примеры проектирования

Рассмотрим пример проекта для PSoC 3. Итоговый вид главного модуля проекта представлен на рис. 5.

Основная задача этого проекта - исследование возможностей базовой платы без приобретения дополнительных кабелей и модулей. Суть проекта заключается в следующем.

Рис. 5. Итоговое окно проекта для PSoC 3

При подаче питания активируется программа 1. При этом запускается RTC, который время с начала работы платы, и это время выводится на дисплей. Это реализуется программно с помощью используемых функций API. Одновременно с этим с потенциометра снимается значение напряжения и с помощью АЦП преобразуется в двоичный код. Полученный код представляется в виде числа в десятичной системе счисления, которое программно выводится на дисплей. Помимо этого, программно

активируется DMA, настраиваемый таким образом, что по входным импульсам данные из области памяти переносятся на вход ЦАП. Область памяти представляет собой программно созданную таблицу значений дискретизированной функции sin(t), где t -время, а sin(t) - интенсивность света, излучаемого светодиодом. С помощью кода, полученного от АЦП, меняется частота, с которой работает DMA, что отражается как частота мигания светодиода. Таким образом, меняя вручную показания потенциометра (путем вращения ручки потенциометра), наблюдается изменение значений напряжения на экране дисплея, а также меняется частота мерцания светодиода.

При нажатии на кнопку SwitchPin активируется режим Low-Power, при котором гаснет дисплей, а также перестаёт мигать светодиод. Однако при этом RTC продолжает работать, следовательно, при повторном нажатии на эту кнопку и выходе из режима Low-Power на дисплее будет выведено правильное значение времени с момента подачи питания на плату.

При нажатии на кнопку ChangeProgramPin, если не активирован режим Low-Power, происходит прекращение работы программы 1 и запуск программы 2. Она заключается в демонстрации работы модуля ШИМ, а также CapSense элементов. Так, на дисплей выводится снова время, полученное от RTC, а также значение регистра сравнения, при котором происходит переключение на выходе модуля ШИМ К выходу ШИМ подключён светодиод, поэтому «1» отображается горением светодиода, «0» гашением. Также на экран выводится значение, получаемое от CapSense-элементов. С его помощью можно программно установить значение в регистре сравнения ШИМ Для этого считывается значение со слайдера, значения на котором соответственно распределены равномерно от 0 до 100 и с помощью двух кнопок увеличивают верхнее или уменьшают нижнее значение, получаемое с CapSense-элемента. Запись получаемого значения в ШИМ происходит при прерывании от ШИМ, возникающем, когда формируется импульс tc (значение на выходе ШИМ равно 0), то есть после каждого периода ШИМ-сигнала.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Следует заметить, что все кнопки задействованы по прерываниям, поэтому на схеме также имеются соответствующие элементы прерываний (для логического отображения прерываний). Также есть программа 3, написанная на ассемблере с целью демонстрации возможности написания программных вставок на языке ассемблера. Переход от программы 2 к программе 3, а также от программы 3 к программе 1 происходит при нажатии кнопки ChangeProgramPin.

Из рис. 5 и описания видно, что несмотря на то, что система состоит из взаимосвязанных модулей, схемотехнически реализованы они отдельно, а связь между ними - программно. При проектировании этого и следующего примеров активно использовались прилагаемые к базовым платам примеры готовых проектов, с которыми можно ознакомиться по документации. Каждый из них представляет собой небольшой проект, в котором показана работа стандартных элементов, например, CapSense, АЦП или ЦАП.

После сборки проекта необходимо осуществить процесс «распиновки». Для описываемого проекта конечная «распиновка» представлена на рис. 6.

Рис. 6. Окно «распиновки»

После того, как она осуществлена, необходимо присоединить плату и нажать кнопку для программирования. Если этот процесс завершён успешно - программа загружена в PSoC и готова к использованию. В область консольного вывода PSoC Creator при этом выводится информация о занимаемых на плате ресурсах. В частности, рассмотренный проект несмотря на достаточно большое число используемых технологий и сложную логику работы занимает 41.9% Flash памяти и 13.4% SRAM. Также можно примерно оценить число задействованных конфигурируемых блоков. В процессе программирования осуществляется индикация количества запрограммированных блоков. После определённого числа запрограммированных блоков видно, что остальные программируются несколько быстрее. Этот признак и можно использовать для определения задействованных блоков. Например, в данном проекте из 256 доступных задействовано только 110 блоков. Таким образом, потенциал платы задействован меньше, чем наполовину.

На рис. 7 представлено финальное состояние проекта для PSoC 5.

В рассматриваемом примере алгоритм функционирования устройства следующий. Устройство может находиться в одном из 7 состояний. Из одного состояния в другое оно переходит при нажатии кнопки. 0-е состояние (NONE) сбрасывает значение, используемое программой на ассемблере в 6-м (последнем) состоянии, и гасит все светодиоды. В состоянии THERM происходит вывод на линейку светодиодов значений температуры в двоичном коде, получаемой с помощью АЦП, ЦАП и термистора, переключая для измерения напряжения с того или иного вывода сигнал выборки аналогового

мультиплексора. Следующие три состояния служат для индикации «уровня» по трём осям акселерометра.

Рис. 7. Пример проекта для PSoC 5

Затем система переходит в состояние PROXIMITY - чем ближе некоторый предмет расположен к Proximity Sensor, тем больше светодиодов горит. Соответственно, когда поблизости нет объекта, светодиоды не горят. И наконец, последнее состояние - это моделирование счётчика по модулю 8, реализованное на ассемблере.

При программировании этого проекта была получена следующая информация по используемым ресурсам: 5,9% Flash памяти; 0,3% памяти SRAM, задействованных блоков - 100 из 1024.

При разработке программ в PSoC Creator иногда возникает необходимость просмотра кода ассемблера, который генерируется автоматически. Например, это может понадобиться для изучения работы функций API. Для этого существует несколько способов: файлы листинга, отладка дизассемблированного кода (доступно для PSoC 3 и недоступно для PSoC 5). Основным для всех является просмотр файлов листинга, которые создаются при сборке приложения и находятся в папке Debug, создаваемой при компиляции кода (для PSoC 3 используется Keil A51, для PSoC 5 - GCC). В них представлен код основной программы, а для каждой инструкции исходного кода приведены соответствующие команды кода ассемблера. При этом для PSoC 3 они написаны на ассемблере для архитектуры 8051, для PSoC 5 - ARM Cortex M3.

Для того, чтобы включить в проект код на ассемблере можно создать новый файл, описать в нём функции, затем, основываясь на конвенциях связи разноязыковых модулей, работать с этим кодом. Однако такие затраты не всегда оправданы, поэтому существует дополнительный способ: inline assembly, то есть использование ассемблерных вставок.

Для того, чтобы можно быть их использовать, необходимо разрешить опцию Inline assembly в опциях для файла в Workspace Explorer в меню Build Settings. После этого становится доступной отладка дизассемблированного кода.

У начинающего разработчика может возникнуть проблема при написании кода на ассемблере для PSoC 3 при работе с портами. Дело в том, что в архитектуре 8051 имеются регистры специального назначения SFR. Эти регистры описаны в файле проекта cy_boot/PSoC3_8051.h. Для управления портами ввода-вывода (GPIO) в архитектуре предусмотрено по три регистра для каждого порта x: SFRPRTxDR, SFRPRTxPS и SFRPRTxSEL, где x = 0-6, 12, 15. Регистр SFRPRTxSEL разрешает/запрещает программное управление портом, SFRPRTxPS (со статусом read-only) - регистр для считывания состояния порта, SFRPRTxDR - регистр для управления данными порта.

В частности, ниже представлен листинг ассемблерной вставки, используемой в проекте для PSoC 3. Здесь реализован алгоритм программного управления миганием светодиода (подсчитывается число миганий по модулю 256) с выводом на LCD-дисплей. Алгоритм управления миганием светодиода следующий:

1) разрешается управление портом (в данной плате доступно только два светодиода, подключенных к выводам порта P6[2] и P6[3]). Подпрограмма выполняет цифровой вывод на линию P6[2];

2) считывается состояние порта;

3) изменяется состояние на 2-ом выводе порта;

4) изменённое значение записывается в порт;

5) запрещается управление портом.

Таким образом, реализованный алгоритм позволяет, не мешая остальным устройствам, подключённым к этому же выводу порта (например, PWM соединён аппаратно), изменять его значение.

void asm program() {

#pragma asm

mov A, SFRPRT6SEL // разрешение изменения значения на выводе

orl A, #04h // P6.2

mov SFRPRT6SEL, A

mov A, SFRPRT6PS // получение значения из P6.2

xrl A, #00000100b // изменение состояния

mov R0, #0ffh // циклы задержки

c1: mov R1, #0ffh

c2: mov R2, #01fh

c3: djnz R2, c3 djnz R1, c2 djnz R0, c1

mov SFRPRT6DR, A // запись изменённого значения

anl A, #04h // сохранение в A только этого бита

// независимо от других mov R0, A // сохранение изменённого значения в R0

mov SFRPRT6SEL, #00h // запрет изменения P6

jz aft

mov DPTR, #asm count // обновление числа миганий, если P6.2 = 1

movx A, @DPTR inc A

movx @DPTR, A aft:nop

#pragma endasm

LCD_Position(ROW_1, COLUMN_7); // очистка LCD от прошлых данных

LCD_PrintString(CLEAR_NUMBER);

#pragma asm

mov R5, #07h // отображение числа миганий на LCD

mov R7, #01h lcall _LCD_Position mov A, R0 subb A, #064h jnc ?10 mov R5, #08h mov R7, #01h lcall _LCD_Position ?10:mov A, R0

subb A, #0Ah jnc dsp mov R5, #09h mov R7, #01h lcall _LCD_Position dsp:mov DPTR, #asm count // этот код вызова LCD PrintNumber был взят

movx A, @DPTR // из дизассемблированного кода на Си

mov R7, A mov R6, #00h clr A mov R4, A mov R5, A

lcall _LCD_PrintU32Number #pragma endasm

}

Очистка экрана между вставками реализована на Си намеренно для уменьшения количества кода, так как целью являлось показать возможность программирования на ассемблере 8-битной архитектуры 8051.

Теперь рассмотрим программирование на ассемблере для архитектуры ARM для PSoC 5. Если сравнивать с предыдущим примером, то здесь используется иной синтаксис:

вместо директив #pragma asm...#pragma endasm используется функция _asm(), которая

принимает на вход строковый литерал. При этом синтаксис такой, что можно в одной функции записывать несколько строк на ассемблере, а в каждой строке в конце необходимо ставить символ переноса строки. uint8 asm counter value = 0;

void asm counter() {

asm(

" mov r0, 0x10\n" // Циклы задержки

"c1:mov r1, 0xff\n"

"c2:mov r2, 0xff\n" "c3:subs r2, #1\n" " bne c3\n"

" subs r1, #1\n"

" bne c2\n"

" subs r0, #1\n"

" bne c1\n"

movw r3, #:lower16:asm counter value\n" // Получение старого " movt r3, #:upper16:asm counter value\n" // значения

" ldrb r3, [r3, #0]\n"

" add r3, r3, #1\n" // Увеличение значения на 1

" uxtb r0, r3\n" // Дополнение до 32 бит нулями

movw r3, #:lower16:asm counter value\n" // Сохранение нового " movt r3, #:upper16:asm counter value\n" // значения

" strb r0, [r3, #0]\n"

);

LEDControlReg Write(asm counter value);

}

По существу, данная ассемблерная вставка эквивалентна с точностью по времени, образуемой циклами задержки фрагменту кода на языке C^

int ii;

for (ii = 0; ii < N; ++ii); // N - требуемое значение для задержки

asm counter value++;

То есть вставка осуществляет программную задержку, а также увеличение глобальной переменной, определённой в коде C^ на 1. Как видно из примера, код на ^ более читаемый, поэтому целесообразно использовать именно его.

При написании кода на ассемблере для PSoC 5 может возникнуть больше проблем, чем для PSoC 3 из-за того, что нет возможности отладки дизассемблированного кода, а единственным местом, где можно посмотреть код дизассемблера - из файлов листинга. Существует возможность, естественно, вызова функций, предоставляемых API на C^ из ассемблера, но, чтобы не усложнять код, вызов функции осуществляется на C^

Заключение

Подводя итоги можно отметить, что PSoC позволяют создавать системы СНК, добавляя или изменяя программируемые блоки. Важным преимуществом PSoC по сравнению с иными программируемыми устройствами является возможность гибкой работы с аналоговой периферией во время работы устройства.

В статье были рассмотрены две платы разных семейств: PSoC 3 и PSoC 5. Каждая из них имеет свои достоинства и недостатки. Плата на базе PSoC 3 обладает достаточно большими габаритами, однако имеет режим Low power и LCD-дисплей. Достоинство платы PSoC 5 - это малые габариты и наличие акселерометра и термистора.

Проектирование с использованием PSoC позволяет сократить время разработки сложных систем, а также их габариты и стоимость. Поэтому их использование оправдано в тех случаях, когда необходимо в короткие сроки изготовить устройство управления, причём использующее недоступные компоненты, но которые можно запрограммировать.

Также использование PSoC целесообразно, если известно, что со временем может возникнуть необходимость реконфигурации устройства или его программно-аппаратной логики работы, а также в том случае, если оно необходимо только на короткий период времени. Тогда, по истечении необходимого времени эксплуатации данного устройства, его не нужно утилизировать, что произошло бы с обычными платами (например, на СБИС) - его возможно повторно эксплуатировать для решения совершенно других задач, изменив его конфигурацию и перепрограммировав плату.

Список литературы

1. Попов А.Ю. Проектирование систем на кристалле на основе ПЛИС: метод. указания. М.: Изд-во МГТУ им. Н.Э. Баумана, 2014. 12 с.

2. Попов А.Ю. Проектирование цифровых устройств с использованием ПЛИС: учеб. пособие. М.: Изд-во МГТУ им. Н.Э. Баумана, 2009. 80 с.

3. Емец С. Микроконтроллеры с реконфигурируемой периферией PSoC производства Cypress Microsystems — восьмиразрядники нового тысячелетия // Компоненты и технологии. 2004. № 39. С. 106-111.

4. Cypress unveils low-cost customized PSoC family // Electronic buyer's news. 2000. № 1238. С. 36.

5. Ермохина Н.И., Ибрагимов С.В., Хартов В.Я. Конфигурирование, настройка и программирование модулей системы на кристалле PSoC // Инженерный вестник. МГТУ им. Н.Э. Баумана. Электрон. журн. 2012. № 6. Режим доступа: http://engbul.bmstu.ru/doc/457900.html (дата обращения 31.02.2015).

6. Хабаров А.П., Хартов В.Я. Проектирование и моделирование цифровых модулей в системах на кристалле // Инженерный вестник. МГТУ им. Н.Э. Баумана. Электрон. журн. 2013. № 9. С. 665-678. Режим доступа: http://engbul.bmstu.ru/doc/618623.html (дата обращения 31.02.2015).

7. Долгушин С. Сенсорные интерфейсы на базе технологии PSoC CapSense // Компоненты и технологии. 2007. № 75. С. 80-85.

8. Килочек Д. Проектирование устройств с технологией Cypress CapSense // Компоненты и технологии. 2009. № 92. С. 139-143.

9. CY8CKIT-030. PSoC 3 Development Kit Guide. Doc. no. 001-61038 Rev. *H. Cypress Semiconductor Corporation, USA, 2011-2013. Режим доступа: http://www.cypress.com/?docID=46946 (дата обращения 31.02.2015).

10. CY8CKIT-014. PSoC 5 FirstTouch Starter Kit Guide. Spec. no. 001-57708 Rev. *A. Cypress Semiconductor Corporation, USA, 2011. Режим доступа: http://www.cypress.com/?docID=27015 (дата обращения 31.02.2015).

Radiooptics

Radiooptics of the Bauman MSTU, 2015, no. 02, pp. 1-19.

DOI: 10.7463/rdopt.0215.0786444

Received: 21.02.2015

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Revised: 09.03.2015

http://radiooptics.ru © Bauman Moscow State Technical Unversity

Toolkit for the development of programmable systems on PSoC chip

A.K. Khalaidzhi1, V.Ya. Hartov

1,*

khartovbrnstuig gmail.com :Bauman Moscow State Technical University, Moscow, Russia

Keywords: PSoC, microcontroller, PSoC creator, programming

The paper describes a set of technologies used in embedded systems, namely: VLSI, SoC, PLD, and PSoC. It highlights the advantages of the PSoC compared with the other technologies. In particular, the paper shows that in comparison with the other systems the PSoC is capable of programmable flexibility to reconfigure the periphery during device operation.

The paper presents a PSoC structure and describes all its subsystems: analog, digital, processor and port ones. It lists main specifications of two boards used as a platform for the system design (PSoC 3 and PSoC 5 families), which enable a further analysis of the PSoC capabilities.

There is a comparison of the possibilities offered by the different versions of PSoC Creator IDE from the company in Cypress. The paper describes an initial structure of the project directory and an interface of the main window of the project in PSoC Creator. It pays a particular attention to the built-in documentation system, as well as to the mechanism for composition of names of the functions to work with API intended for developers.

The paper shows the main ways for PSoC design, offered by IDE, in particular: schematic design, using LUT-table, in the Verilog language. It analyses their main advantages and disadvantages, shows the possibility of programming in C and assembler, and describes the basic stages of the design of PSoC in PSoC Creator.

There are two examples of design for the considered boards (PSoC 3 and PSoC 5 families). The main objective to design these examples was to study all the main features of boards without involving any additional equipment.

Particular focus is on the possibility of programming in assembly language. In particular, the paper presents two examples for different microprocessor architectures: 8051 and ARM Cortex M3. It shows how to use inline assembly. For PSoC 3 families, the paper shows a method for working with IO ports using the assembler instructions.

References

1. Popov A.Yu. Proektirovanie sistem na kristalle na osnove PLIS [Developing system-on-chip based on FPGA]. Moscow, Bauman MSTU Publ., 2014. 12 p. (in Russian).

2. Popov A.Yu. Proektirovanie tsifrovykh ustroistv s ispol'zovaniem PLIS [Digital device development using FPGA]. Moscow, Bauman MSTU Publ., 2009. 80 p. (in Russian).

3. Emets S. Microcontrollers with configurable PSoC peripheral made by Cypress Microsystems — 8-digit microcontrollers of new millennium. Komponenty i tekhnologii - Components & Technologies, 2004, no. 39, pp. 106-111. (in Russian).

4. Cypress unveils low-cost customized PSoC family. Electronic buyer's news, 2000, no. 1238, p. 36.

5. Ermokhina N.I., Ibragimov S.V., Khartov V.Ya. Configuration, adjustment and programming system modules based on PSoC. Inzhenernyy vestnik MGTU im. N.E. Baumana. Elektron. zhurn. - Electronic publishing engineering bulletin, 2012, no. 6. Available at: http://engbul.bmstu.ru/doc/457900.html (accessed 31.02.2015). (in Russian).

6. Khabarov A.P., Khartov V.Ya. Developing and modeling digital modules in system-on-chip. Inzhenernyy vestnik. MGTU im. N.E. Baumana. Elektron. zhurn. - Electronic publishing engineering bulletin, 2013, no. 9, pp. 665-678. Available at: http://engbul.bmstu.ru/doc/618623.html (accessed 31.02.2015). (in Russian).

7. Dolgushin S. Touch interfaces based on PSoC CapSense technology. Komponenty i tekhnologii - Components & Technologies, 2007, no. 75, pp. 80-85. (in Russian).

8. Kilochek D. Device engineering using Cypress CapSense technology. Komponenty i tekhnologii - Components & Technologies, 2009, no. 92, pp. 139-143. (in Russian).

9. CY8CKIT-030. PSoC 3 Development Kit Guide. Doc. no. 001-61038 Rev. *H. Cypress Semiconductor Corporation, USA, 2011-2013. Available at: http://www.cypress.com/?docID=46946 (accessed 31.02.2015).

10. CY8CKIT-014. PSoC 5 FirstTouch Starter Kit Guide. Spec. no. 001-57708 Rev. *A. Cypress Semiconductor Corporation, USA, 2011. Available at: http://www.cypress.com/?docID=27015 (accessed 31.02.2015).

i Надоели баннеры? Вы всегда можете отключить рекламу.