Проектирование на программируемых системах на кристалле PSoC Cypress. Часть 4. Системные ресурсы PSoC

№ 12’2006
PDF версия
Продолжая рассказ о программируемых системах на кристалле PSoC, рассмотрим имеющиеся в них выделенные системные ресурсы, которые могут использоваться как для обеспечения работы цифровой и аналоговой периферии, так и для расширения функциональности.

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

Все статьи цикла:

К системным ресурсам PSoC относятся следующие элементы:

  • источники тактовых частот;
  • блок (блоки) накапливающего умножителя;
  • блок децимации;
  • контроллер I2C;
  • контроллер USB;
  • схемы сброса;
  • схемы контроля напряжения питания и импульсного повышающего регулятора напряжения (Switch Mode Pump);
  • внутренний источник опорного напряжения и сенсор температуры;
  • аналоговый мультиплексор.

В системные ресурсы можно включить также флэш-память, которая доступна для записи из программы пользователя.

Кратко источники тактовых частот упоминались в первой статье цикла, когда шла речь о настройке системных ресурсов в среде проектирования PSoC Designer. Сейчас мы рассмотрим структуру блока генераторов (рис. 1) более подробно.

Рис. 1. Структура блока генераторов

Главный внутренний генератор (IMO) является базовым источником тактового сигнала почти для всех прочих источников в системе PSoC. Этот генератор создает опорную частоту 24 МГц, которая используется прочими схемами. В некоторых сериях PSoC имеется возможность выбора режима работы генератора на пониженной частоте — 6 МГц вместо 24 МГц. В версиях микросхем PSoC, предназначенных для работы в расширенном температурном диапазоне (для так называемого автомобильного применения), частота главного генератора составляет 12 МГц. Главный генератор является RC-генератором и его точность составляет ±2,5% без применения внешних компонентов. Это достигается загрузкой калибровочных значений в управляющий регистр IMO_TR из отдельной области ПЗУ (Supervisory ROM, SROM), которая программируется на заводе—изготовителе чипа. Загрузка этих калибровочных значений выполняется кодом в файле boot.asm, который автоматически генерируется при создании проекта в PSoC Designer. Если требуется большая точность главного генератора, то в системе PSoC предусмотрена возможность синхронизации его с генератором, использующим внешний кварцевый резонатор 32 768 Гц (ECO). Главный генератор через мультиплексор связывается с основной шиной тактовой частоты системы (линия SYSCLK). Благодаря указанному мультиплексору в качестве системной частоты может выступать сигнал EXTCLK, подаваемый с контакта микросхемы. Системная частота SYSCLK является опорной для частоты SYSCLKX2 (удвоенная системная), а также для делителей, формирующих частоты CPUCLK (тактовая частота процессорного ядра), VC1 и VC2 (тактовые частоты для цифровых и аналоговых блоков), VC3 (тактовая частота для цифровых блоков и один из источников прерывания). Кроме того, частота SYSCLK используется для привязки асинхронных сигналов, поступающих с портов ввода-вывода или возникающих в системе.

Внутренний низкоскоростной генератор (ILO) используется в качестве тактового сигнала для сторожевого таймера и таймера режима «сна» (частота SLEEP), а кроме того, может выступать и как источник частоты для цифровых блоков (CLK32K). Генератор ILO тоже является RC-генератором, создает частоту 32 кГц и также калибруется значениями из SROM, однако точность его ниже, чем у главного генератора. Если необходима большая точность для частоты CLK32K, то генератор ILO может быть отключен, а для создания CLK32K будет использоваться генератор ECO.

Блок накапливающего умножителя (рис. 2) является полностью аппаратным системным ресурсом, не требующим какого-либо конфигурирования. Наличие этого блока в составе системы зависит от серии PSoC; в некоторых сериях могут присутствовать два независимых умножителя. Доступ к умножителю осуществляется через регистры, отображенные на пространство регистров ввода-вывода процессорного ядра. Умножитель может работать в двух режимах — просто умножение и умножение с накоплением результата. В первом случае сразу после записи 8-разрядного значения в регистр MULx_X или MULx_Y результат будет находиться в регистрах MULx_DH и MULx_DL. Во втором случае функция умножения с накоплением будет выполнена при записи в регистр MACx_X или MACx_Y, а результат будет находиться в регистрах ACCx_DR(3-0).

Рис. 2. Блок накапливающего умножителя

Накапливающие регистры могут быть сброшены записью в регистр MACx_CL0 или в регистр MACx_CL1.

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

Блок децимации предназначен для аппаратной поддержки функций цифровой обработки сигналов и используется в PSoC для реализации дельта-сигма и инкрементирующего АЦП. Наличие этого блока и его тип зависят от серии PSoC. Существуют два возможных типа блока децимации. Блок первого типа (рис. 3) позволяет осуществить одиночное или двойное интегрирование входного дискретного 1-битного сигнала. Кодированному значению входного сигнала ставится в соответствие взвешенное значение — входной сигнал, равный единице, имеет вес «+1», а сигнал, равный нулю, — «–1». Таким образом, интегрирование сигнала представляет собой суммирование весов за определенный период времени. На каждом такте частоты работы блока интегральное значение увеличивается или уменьшается на единицу в зависимости от сигнала на входе.

Рис. 3. Блок децимации первого типа

Блок децимации первого типа реализует интегрирующую часть цифрового Sinc²-фильтра, являющегося частью дельта-сигма АЦП (рис. 4). Дифференцирующая часть в этом случае реализуется программно.

Рис. 4. Фильтр Sinc²

Блок децимации второго типа (рис. 5) представляет собой полноценный аппаратный Sinc²-фильтр.

Рис. 5. Блок децимации второго типа

Контроллер I²C представляет собой преобразователь из параллельной шины в двухпроводную последовательную.

Для того чтобы уменьшить нагрузку на процессор, этот блок осуществляет необходимую базовую поддержку протокола I²C. Контроллер I²C может функционировать в режиме ведомого, ведущего и в режиме с несколькими ведущими на шине. В режиме ведущего контроллер поддерживает тактовые частоты 50, 100 и 400 кГц. Взаимодействие контроллера с процессором осуществляется через регистры ввода-вывода и прерывания. Поскольку контроллер реализует лишь базовую поддержку протокола, полная реализация функциональности осуществляется со стороны программного обеспечения.

В аппаратной реализации контроллера есть несколько ограничений:

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

Для интерфейса с контроллером используются четыре регистра. Регистр I²C_CFG предназначен для конфигурации контроллера — выбора режима работы, скорости и используемых прерываний. Регистр I²C_SCR используется для управления передачей, а также для контроля состояния шины. Регистр I²C_DR используется для передаваемых и принимаемых данных. I²C_MSCR является регистром управления и статуса при работе контроллера в режиме ведущего.

Благодаря тому, что в библиотеке пользовательских модулей присутствует несколько программно-аппаратных реализаций контроллера I²C, необходимость дополнительного программирования может возникнуть лишь в исключительных случаях.

Контроллер USB присутствует на данный момент лишь в одном семействе микросхем PSoC — CY8C24x94, а также в чипах CY7C64215. Он реализует спецификацию USB 2.0 для полноскоростных устройств (Full-Speed) со скоростью передачи 12 Мбит/с.

В состав контроллера USB (рис. 6) входят следующие компоненты:

  • полноскоростной приемопередатчик USB;
  • автомат управления последовательным интерфейсом (Serial Interface Engine, SIE);
  • 256 байт выделенного статического ОЗУ;
  • арбитр памяти PSoC (PMA);
Рис. 6. Блок-схема контроллера USB

Приемопередатчик содержит встроенный регулятор напряжения для создания необходимых для шины уровней напряжения, а также встроенный подтягивающий резистор 1,5 кОм на линии D+.

Автомат SIE аппаратно осуществляет следующие действия:

  • кодирование передаваемых и декодирование принимаемых данных;
  • проверка адреса;
  • генерация соответствующих квитирующих пакетов ACK/NAK/Stall;
  • проверка безошибочности принимаемых пакетов;
  • идентификация типа принимаемых пакетов (SETUP, IN, OUT);
  • идентификация маркера начала фрейма SOF (Start-of-Frame) и подсчет их числа;
  • запись или считывание данных в выделенной памяти USB в соответствии с установками арбитра памяти.

Кроме того, автомат SIE генерирует прерывания для обработки в программе следующих необходимых для реализации интерфейса USB событий:

  • заполнение и считывание буферов данных в выделенной памяти USB;
  • настройки каналов арбитра памяти;
  • декодирование запросов USB;
  • проверка и установка правильных маркеров DATA0, DATA1.

Автомат SIE поддерживает 5 конечных точек USB — конечную точку управления с адресом 0, поддерживающую запросы SETUP, IN и OUT, и четыре конечных точки с адресами 1–4, которые поддерживают запросы IN и OUT для транзакций передачи массивов данных (Bulk), прерываний (Interrupt) или изохронных данных (Isochronous).

Выделенная память USB представляет собой 256 байт статической памяти, однако она не доступна напрямую для процессорного ядра M8C. Получить доступ к ней можно только через регистры арбитра памяти PMA, который является интерфейсом к данной памяти для двух блоков — процессора M8C и автомата SIE. Блок PMA предоставляет восемь каналов для управления данными. Все эти каналы могут использоваться M8C, но со стороны SIE четыре конечных точки с адресами 1–4 жестко связаны с каналами 1–4 блока PMA. На программное обеспечение накладывается обязанность следить за тем, чтобы один и тот же канал не использовался одновременно и M8C, и SIE. Если процессору требуется получить доступ к той области памяти, которая в данный момент используется SIE, то должны использоваться два канала, настроенные на одинаковые диапазоны адресов.

Задача программирования интерфейса USB является достаточно нетривиальной и заслуживает отдельной статьи, поэтому лучше всего воспользоваться при разработке готовым и отлаженным модулем из библиотеки PSoC Designer.

Схемы сброса предназначены для инициализации конфигурационных регистров и процессора в начальные состояния. Возможны четыре условия, приводящие к сбросу:

  • начальный сброс при подаче напряжения питания (Power-on-Reset, POR) либо при его падении;
  • сброс при подаче сигнала на контакт XRES;
  • сброс от сторожевого таймера (WDR);
  • внутренний сброс, возникающий при начальной загрузке, если обнаружена ошибка чтения флэш-памяти.

Сброс POR представляет собой две раздельные схемы — непрецизионного (Imprecise POR, IPOR) и прецизионного сброса (Precision POR, PPOR). Схема IPOR имеет невысокую точность, и ее порог срабатывания находится ниже более точного порога схемы PPOR, который калибруется при начальной загрузке. Это позволяет разделить причину возникновения сброса POR и, как следствие, получить более быстрый переход к рабочему режиму в случае кратковременного «просаживания» питающего напряжения.

Внешний сброс (External Reset) возникает при подаче сигнала высокого уровня на контакт XRES. Этот контакт имеет внутренний резистор, притягивающий его к земле, поэтому внешнего резистора не требуется.

Во время действия схем сброса POR или XRES главный внутренний генератор IMO выключается для сбережения энергии. Кроме того, работа этих схем сброса изменяет поведение контактов P1[0] и P1[1], предназначенных для «прошивки» микросхемы PSoC. После возникновения сброса POR и примерно на 8 мс после окончания его действия на контакт P1[0] выдается высокий уровень напряжения, а контакт P1[1] конфигурируется как контакт с резистивной подтяжкой к земле. Затем контакт P1[0] еще на 8 мс, также как и P1[1], конфигурируется как контакт с резистивной подтяжкой к земле. После этого эти контакты переводятся в высокоимпедансное состояние. При возникновении сброса XRES контакты P1[0] и P1[1] после окончания действия этого сигнала на 200 мкс конфигурируются как контакты с резистивной подтяжкой к земле. Эти последовательности необходимы для того, чтобы просигнализировать программатору PSoC, что он может перехватить управление и осуществить прошивку или чтение флэш-памяти.

Сброс от сторожевого таймера (WDR) возникает при его переполнении. Сторожевой таймер может быть запущен пользователем при сбросе бита PORS в управляющем регистре CPU_SCR0. Однако так как этот бит может быть установлен только при возникновении сброса POR или WRES, то возможности отключить сторожевой таймер после запуска не существует. Для того чтобы не происходило сброса WDR, необходимо регулярно, не реже одного раза за два периода частоты CLK32K, сбрасывать таймер при помощи записи любого значения в регистр RES_WDT. При возникновении сброса WDR оперативная память очищается, однако это можно предотвратить, если установить бит IRAMDIS в регистре CPU_SCR1 — это приведет к тому, что первые 216 ячеек ОЗУ сохранят свои значения.

При любом из вариантов сброса процессор проходит через процедуру начальной инициализации, когда выполняется специальная функция SWBootReset, находящаяся в SROM. Эта функция проверяет контрольную сумму калибровочных значений, записанных в SROM и, в случае ее правильности, инициализирует регистры процессора и ОЗУ нулями (только первую страницу при многостраничной организации памяти) и переходит к исполнению кода пользователя, начиная с адреса 0000h во флэш-памяти. В случае неправильной контрольной суммы выполняется внутренний сброс и устанавливается бит IRESS в регистре CPU_SCR1, свидетельствующий, что процесс начальной инициализации выполнялся неоднократно. Функция SWBootReset может быть вызвана программно — для этого необходимо установить в нулевое значение регистр-аккумулятор процессора и выполнить инструкцию SSC.

Схема контроля напряжения питания (Low Voltage Detect, LVD) контролирует напряжение на контакте Vdd и вызывает прерывание при его падении ниже порога, выбираемого пользователем в регистре VLT_CR. Кроме того, эта же схема может вызывать понижение тактовой частоты процессора при падении напряжения, если установлен бит LVDTBEN.

Встроенный импульсный повышающий регулятор напряжения (Switch Mode Pump, SMP) предназначен для генерации питающего напряжения Vdd при использовании батарейного питания. При включении микросхемы PSoC и до тех пор, пока напряжение на контакте питания Vdd не достигнет порогового уровня схемы POR, все внутренние схемы PSoC удерживаются в выключенном состоянии. Исключением является схема SMP. Типичная схема повышающего регулятора представлена на рис. 7. Для его реализации необходимы три внешних компонента — индуктивность, диод и конденсатор.

Рис. 7. Повышающий импульсный регулятор напряжения

При замкнутом ключе SMP электрическая энергия накапливается в индуктивности, а при размыкании заряжает конденсатор. Ключ переключается с частотой 1,3 МГц (скважность 50%), благодаря чему напряжение на конденсаторе достигает необходимого уровня, заданного в регистре VLT_CR. Данная схема позволяет получить необходимое напряжение питания от одной батареи с напряжением не менее 1,1 В, однако нагрузочный ток невелик — от 10 мА при питании от 2 В до 80–100 мА при 4,5 В. Повысить продуктивность этого регулятора можно, немного усложнив схему [4].

Внутренний формирователь опорного напряжения Vbandgap (рис. 8) представляет собой схему, создающую опорное напряжение 1,3 В из напряжения запрещенной зоны полупроводника, равного 1,2 В.

Рис. 8. Формирователь опорного напряжения

Кроме буфера, формирующего опорное напряжение, этот блок содержит и схему выборки-хранения, выполненную на КМОП-ключе и конденсаторе, что позволяет использовать опорное напряжение при выключенном буфере. Помимо опорного напряжения этот блок формирует пропорциональное температуре напряжение, то есть является встроенным сенсором температуры. Это напряжение изменяется на 3 мВ при изменении температуры на 1 °С. Данный температурно-зависимый выход блока подсоединен к одному из входов аналогового блока ASC21, что позволяет в программе отслеживать изменения температуры кристалла. Однако так как это температурно-зависимое напряжение формируется относительно температуры абсолютного нуля (–273 °C), то присутствует достаточно большое смещение на выходе температурного сенсора, поскольку рабочая температура PSoC находится в пределах от –40 до +85 °C (+125 °C). Поэтому при использовании данного датчика требуется производить его калибровку.

Дополнительный аналоговый мультиплексор (рис. 9) присутствует только в микросхемах CY8C24x94, CY8C21x34, CY7C64215, CY7C603xx и CYWUSB6953. Этот системный ресурс позволяет подключать все (либо почти все) контакты ввода-вывода микросхемы PSoC к выделенной внутренней аналоговой шине, причем одновременно к ней может быть подсоединено любое число контактов. Аналоговая шина может, в свою очередь, подсоединяться к инвертирующему или к не инвертирующему входу аналогового блока типа CT. Контакты ввода-вывода могут также соединяться с напряжением питания Vdd.

Рис. 9. Аналоговый мультиплексор

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

Аналоговая шина может подключаться к управляемому источнику тока, что может применяться, например, там, где требуется измерение емкости.

Широко используемое на данный момент применение блока аналогового мультиплексора — реализация емкостных сенсоров прикосновения (технология CapSence). Более подробно данная технология будет рассмотрена в одной из следующих статей.

Флэш-память, помимо хранения собственно программы, может быть использована для сохранения каких-либо параметров, состояние которых должно быть восстановлено после включения питания. Для реализации записи во флэш-память можно воспользоваться библиотечным модулем эмуляции EEPROM, либо прямым вызовом процедур для выполнения очистки и записи блока, находящихся в SROM. Второй вариант может оказаться более предпочтительным, если требуется уменьшить размер программы, поскольку модуль эмуляции EEPROM позволяет изменять только выбранное количество байт в блоке флэш-памяти, но ценой достаточно больших затрат ОЗУ и памяти программ. Используя вызовы процедур из SROM, можно сэкономить до килобайта в объеме кода программы. Вызов данных функций не представляет никаких сложностей (листинг 1). Для этих операций необходимо рассчитать значения длины импульсов программирования (CLOCKW) и очистки (CLOCKE), а также величины задержки DELAY. Эти параметры зависят от температуры, от частоты работы процессора и индивидуальных особенностей чипа (рис. 10) и нужны для выбора оптимальных значений при «прошивке» флэш-памяти, которая выполняется для продления срока службы памяти этого типа. Параметры M, B и Mult можно получить, вызвав находящуюся в SROM функцию чтения калибровочных таблиц TableRead. Значение температуры можно получить от упоминавшегося встроенного датчика, либо задав его константой. В данном примере для вызова функций из SROM используется макроопределение SSC_Action, объявленное в файле m8ssc.inc.

Листинг 1

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

Чтение сохраненных данных осуществляется инструкцией romx.

В заключение читателю предлагается самостоятельно поэкспериментировать с отладочной платой из комплекта CY3210-Miniprog1. Возьмите за основу примеры из прошлых статей и сделайте для тренировки следующий «проект»: используя модуль АЦП DELSIG8 (8-разрядный дельта-сигма), реализуйте в программе оцифровку значения с потенциометра и сохранение во флэш-память текущего значения при нажатии на кнопку. Используйте это сохраненное значение в качестве порогового для управления индикаторами — при превышении порога включайте светодиоды.

Литература

  1. PSoC Mixed Signal Array Technical Reference Manual (TRM). Version 2.20.
  2. Assembly Language User Guide.
  3. Килочек Д. Проектирование на программируемых системах на кристалле PSoC Cypress. Компоненты и технологии. 2006. № 4, 6, 8.
  4. Grygorenko V. AN2349. Increasing Output Power of a Switch Mode Pump.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *