Проектирование на программируемых системах на кристалле PSoC Cypress. Часть 2. Цифровая конфигурируемая периферия

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

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

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

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

Конфигурируемая цифровая подсистема позволяет реализовать счетчики, таймеры, ШИМ, генераторы случайных последовательностей, блоки CRC, а также контроллеры интерфейса SPI, инфракрасный приемопередатчик и UART. К цифровой периферии PSoC относятся также контроллер шины I2C, умножитель и блок прореживания (Decimator), используемый для создания АЦП. Однако так как эти блоки являются фиксированными аппаратными модулями, то в структуре PSoC они отнесены к системным ресурсам, а не к цифровой подсистеме.

Рис. 1. Блок-схема цифровой подсистемы PSoC
Рис. 1. Блок-схема цифровой подсистемы PSoC

Цифровая подсистема состоит из четырех компонентов (рис. 1):

  • глобальные цифровые связи (Global Digital Interconnect, GDI);
  • связи в массиве цифровых блоков (Array Digital Interconnect, ADI);
  • связи внутри ряда цифровых блоков (Row Digital Interconnect, RDI);
  • цифровые базовые (DBB) и коммуникационные (DCB) блоки.

Глобальные цифровые связи состоят из четырех 8-разрядных шин — двух входных и двух выходных. Входные и выходные шины подразделяются на четные (GIE, GOE) и нечетные (GIO, GOO), в зависимости от номеров портов ввода-вывода, к которым эти шины подсоединены. Глобальные шины предназначены для передачи сигналов от контактов портов в цифровые блоки, либо для выдачи на контакты сигналов от цифровых блоков или от источников глобальных частот. Входные и выходные шины связаны друг с другом через двунаправленные тристабильные буферы (рис. 2).

Рис. 2. Входные и выходные шины
Рис. 2. Входные и выходные шины

Таким образом, есть возможность внутри микросхемы передавать входные сигналы на выход и наоборот, сигналы с выходных шин передавать на входные. Каждая линия глобальной шины имеет специальный триггер-хранитель (keeper). Этот хранитель после сброса системы устанавливает состояние линии глобальной шины в ‘1’, а в процессе работы сохраняет на линии последнее поданное на нее значение, что предотвращает возникновение неопределенного состояния.

За подсоединение глобальных шин отвечают регистры PRTxGS. Выдачей сигналов глобальных частот на выходную шину GOE управляет регистр OSC_GO_EN. Буферами, связывающими входные и выходные шины, управляют регистры GDI_x_IN (соединение вход-выход) и GDI_x_OU (соединение выход-вход).

Под связями в массиве цифровых блоков подразумеваются следующие линии:

  • сигналы глобальных частот для тактирования блоков
  • ;

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

Каждый ряд цифровых блоков (рис. 3) содержит четыре блока. Два первых блока являются базовыми (basic, DBB), два других — коммуникационными (communication, DCB). Каждый ряд содержит четыре входных RI[3..0] и четыре выходных линии RO[3..0], а также линию «широковещательной связи» (broadcast) — BCROW.

Рис. 3. Ряд цифровых блоков PSoC
Рис. 3. Ряд цифровых блоков PSoC

Мультиплексоры, соединяющие входные шины ряда с глобальными входными шинами, управляются регистрами RDIxRI. Регистры RDIxSYN управляют синхронизацией входных сигналов (блоки S0–S3). Входные сигналы могут быть привязаны к системной частоте SYSCLK, либо проходить напрямую, то есть быть асинхронными по отношению к цифровым блокам.

Выходные линии и линия BCROW, так же как и линии глобальной шины, имеют специальный триггер-хранитель (keeper), сохраняющий последнее состояние линии. Каждая выходная линия имеет таблицу преобразования (блоки L0–L3), которая позволяет ввести дополнительную логическую функцию при формировании выхода. Функция таблицы преобразования для каждой выходной линии ряда задается в регистрах RDIxLTх (рис. 4).

Рис. 4. Функции таблицы преобразования
Рис. 4. Функции таблицы преобразования

Регистры RDIxIS управляют мультиплексором на входе «A» в таблицах преобразования, а также задают связь broadcast-линии данного ряда с broadcast-линией другого ряда (линии BCROW[3..0]).

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

Цифровые блоки PSoC (рис. 5) подразделяются на два типа — базовые (Digital Basic Blocks, DBB) и коммуникационные (Digital Communication Blocks, DCB). Первый тип блоков позволяет реализовать такие периферийные модули, как таймеры, счетчики и ШИМ, а также модуль контроля с помощью циклического избыточного кода (CRC) и генератор псевдослучайной последовательности (PRS). Коммуникационные блоки, помимо указанных функций, позволяют создавать контроллеры интерфейса SPI или полнодуплексный UART.

Рис. 5. Структура цифрового блока PSoC
Рис. 5. Структура цифрового блока PSoC

Каждый цифровой блок построен на базе семи 8-битных регистров — трех конфигурационных, определяющих тип выполняемой блоком функции и конфигурацию входов и выходов блока, а также трех регистров данных и регистра управления функцией. Назначение бит в регистрах данных DxBxxDR0, DxBxxDR1, DxBxxDR2 и регистре статуса-управления DxBxxСR0 зависит от выполняемой блоком функции, которая определяется регистром DxBxxFN (табл. 1).

Таблица 1. Назначение битов в регистрах данных DxBxxDR0, DxBxxDR1, DxBxxDR2 и регистре статуса-управления DxBxxСR0
Таблица 1. Назначение битов в регистрах данных DxBxxDR0, DxBxxDR1, DxBxxDR2 и регистре статуса-управления DxBxxСR0

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

Таблица 2. Смысловое назначение входных сигналов для каждой функции блока
Таблица 2. Смысловое назначение входных сигналов для каждой функции блока

Регистр DxBxxOU управляет демультиплексором выходных сигналов, а также блоком ресинхронизации входной тактовой частоты (рис. 6). В таблице 3 приведено смысловое назначение выходных сигналов для каждой функции блока.

Рис. 6. Блок ресинхронизации
Рис. 6. Блок ресинхронизации

Ресинхронизация необходима для устранения возможной рассинхронизации блоков. Если тактовая частота образована делением системной частоты SYSCLK или удвоенной системной частоты SYSCLKx2 (например, частоты VC1, VC2, VC3), то необходимо привязать ее к соответствующей частоте. Так же следует проступать, если для тактирования блока используется выход другого блока, либо внешний сигнал. Использовать сквозное прохождение тактирующего сигнала не рекомендуется из-за возможного возникновения ошибок при выполнении операций чтения-записи регистров блока. Использовать этот режим следует, если требуется обеспечить работу блока в спящем режиме процессора (в этом случае частота либо должна быть образована от источника частоты 32К, либо должна являться внешним сигналом с контакта микросхемы) или если общение блока с процессором будет заключаться лишь в генерации прерывания.

Таблица 3. Смысловое назначение выходных сигналов для каждой функции блока
Таблица 3. Смысловое назначение выходных сигналов для каждой функции блока

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

Каждый блок в массиве цифровых блоков имеет свой выход запроса на прерывание. Приоритет этого запроса определяется порядковым номером блока в массиве, то есть блок с номером 0 в ряду 0 (блок DBB00) имеет наивысший приоритет, а блок DCB33 (если микросхема 29-й серии) имеет самый низший приоритет. За разрешение прерываний от цифровых блоков отвечают регистры маскирования INT_MSK1 и INT_MSK2 контроллера прерываний.

Подробно функции, реализуемые цифровыми блоками, рассмотрены в руководстве пользователя [1] в главе 17 «Digital blocks». Все рассмотренные регистры могут либо программироваться непосредственно в тексте программы, либо настраиваться в режиме расположения модулей и задания связей в PSoC Designer (Interconnect View).

В качестве примера, демонстрирующего работу с конфигурируемой цифровой периферией, рассмотрим несложный «проект», который реализуем на известной уже нам демо-плате из комплекта CY3210-Miniprog1.

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

Выполним все те действия по созданию нового проекта, которые были рассмотрены в первой части статьи. В редакторе системы (Device Editor,

) в режиме выбора модулей пользователя (User Module Selection View,

) выберем необходимые нам модули счетчика (Counter) и ШИМ (PWM) — рис. 7. При выборе модулей им присваивается имя, отражающее тип модуля и его порядковый номер, например PWM8_1. Это назначенное по умолчанию имя может быть изменено пользователем по его желанию.

Рис. 7. Выбор модулей пользователя
Рис. 7. Выбор модулей пользователя

Далее перейдем в режим задания связей (Interconnect View,

) и зададим соединение выходных линий (RO0[3..0]) нулевого ряда цифровых блоков с контактами, которые управляют светодиодами (рис. 8).

Рис. 8. Режим задания связей
Рис. 8. Режим задания связей

Для обеспечения последовательного переключения светодиодов будем переключать в нашей программе выход модуля ШИМ на соответствующую линию RO.

Следующий этап — размещение модулей пользователя на массиве цифровых блоков и задание их параметров. Разместим модули счетчика и ШИМ на блоках DBB00 и DBB01 соответственно (рис. 9), хотя можно выбрать и другое место в пределах ряда. Определение нужного нам места размещения для выбранного в данный момент модуля пользователя происходит нажатием на кнопку Next Allowed Placement

, а его размещение на блоке (или блоках) происходит при нажатии на кнопку Place User Module

. Удалить выбранный модуль из массива блоков можно кнопкой Undo Place User Module

.

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

После размещения компонентов зададим их параметры (рис. 10, 11).

Рис. 10. Параметры модуля счетчика
Рис. 10. Параметры модуля счетчика
Рис. 11. Параметры модуля ШИМ
Рис. 11. Параметры модуля ШИМ

Для обеспечения эффекта плавного изменения яркости светодиода частота его переключения должна быть не менее 25 Гц. Для обеспечения полного диапазона изменения яркости для модуля ШИМ зададим период, равный 256 тактам входной частоты. Соответственно настроим делители, формирующие глобальные частоты, следующим образом: VC1=SYSCLK/16, VC2=VC1/15, VC3=VC2/12. При системной частоте, по умолчанию равной 24 МГц, период ШИМ получается равным примерно 32,5 Гц.

Выход внутреннего компаратора, сравнивающего значение внутреннего счетчика ШИМ и значение ширины импульса, соединим с линией RO0[0] (это будет начальным значением, то есть когда выбран светодиод на контакте P20).

Для счетчика выберем период, равный 100 импульсам частоты VC3. Вход разрешения работы соединим со входной линией RI0[0], которую в свою очередь соединим с контактом, связанным с микрокнопкой (рис. 12). В качестве источника прерывания от счетчика выберем факт переполнения (Terminal Count). В обработчике прерывания будем производить изменение ширины импульса ШИМ, что и даст эффект плавного изменения яркости.

Рис. 12. Подсоединение линии RI0[0] к микрокнопке
Рис. 12. Подсоединение линии RI0[0] к микрокнопке

После задания всех настроек и подключений генерируем проект (кнопкой Generate Application,

) и переходим в режим редактора программы (Application Editor,

).

После генерации проекта в структуре проекта появятся автоматически сгенерированные файлы, содержащие функции программного интерфейса (API) для наших модулей (рис. 13).

Рис. 13. Программная структура проекта
Рис. 13. Программная структура проекта

В нашем проекте это файлы, имя которых начинается на counter8_1 и pwm8_1. Файлы counter8_1int.asm и pwm8_1int.asm представляют собой шаблоны обработчиков прерываний от соответствующего модуля. Сгенерированный файл boot.asm уже содержит переходы на соответствующие функции обработчиков для данных векторов прерываний, поэтому нет необходимости его редактировать. Так как мы будем использовать только прерывание от счетчика, то редактировать необходимо только файл counter8_1int.asm. Добавим в этот файл необходимую нам обработку — обновление ширины импульса ШИМ, смену направления изменения яркости (зажигание или гашение), а также переключение ШИМ на следующий светодиод. Текст программы, реализующей эти действия, приведен в листинге файла counter8_1int.asm. Обратите внимание, что добавляемый пользователем текст должен находиться между специальными маркерами «;@PSoC_UserCode_INIT@» или « ; @ P S o C _ U s e r C o d e _ B O D Y @ » и «;@PSoC_UserCode_END@». В противном случае текст будет удален, например, при изменении параметров проекта и его повторной генерации.

Листинг файла counter8_1int.asm:

Имя регистра PWM8_1_OUTPUT_REG в данном случае — всего лишь переопределенное имя регистра DxBxxOU, который управляет подключением выходов цифрового блока. Два младших бита этого регистра определяют линию RO, к которой подключен блок.

И, наконец, необходимо добавить несколько вызовов функций API наших модулей для разрешения их работы и разрешения генерации прерывания от счетчика (листинг файла main.asm).

Листинг файла main.asm:

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

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

Литература

  1. PSoC Mixed Signal Array Technical Reference Manual. Version 2.10.
  2. PSoC Designer IDE User Guide.
  3. Assembly Language User Guide.
  4. 8-, 16-, 24- and 32-Bit Counters. CY8C29/27/24/22/21xxx and CYWUSB6953 Data Sheet.
  5. 8- and 16-Bit Pulse Width Modulators. CY8C29/27/24/22/21xxx, CY7C6xxxx, and CYWUSB Data Sheet.

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

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