PSoC 1. Первое знакомство.

Есть така замечательная фирма Cypress, она выпускает много чего. Мне понравились их микроконтроллеры (хотя так называть не совсем правильно).PSoC — система на кристале — тоесть, у вас есть набор ячеек, и набор разной переферии, ядро микроконтроллера (PSoC 1 и PSoC 3 — 8 битное, в PSoC 5 — Cortex M3), и можно собрать что нужно. Сначала работал с серией PSoC 1, тепер больше с PSoC 1 и PSoC 5.
Когда был только сайт bsvi.me и не было сообщества, написал статюю по работе с микроконтроллером PSoC1 (система на кристале): PSoC 1. Быстрый старт. Так что статья не плагиат, а просто решил поделиться и тут, так сказать внести свой вклад в сообщество :)
Дня начала работы нам нужно:
Микроконтроллер, у меня cy8c27443
Программатор Cypress ICE-Cube, Cypress MiniProg или самодельный (видел в интернете, но точных ссылок дать не могу).
Среда разработки PSoC Designer, скачиваем на официальном сайте:Cypress.
Хорошо если есть борд, но можно и без него, просто распаять на макетке или при большом желании сделать свой. У меня CY3210-MiniEval1, и все примеры сделаны на ней.
По старинной традиции, первая программа будет мигать светодиодом :)Чтобы не было совсем скучно, используем для мигания светодиода модуль — даже об этом позаботились:) (конечно можно мигать светодиодом классическим способом — настроили порт, и кидаем туда 0 и 1 через задержки) и поработаем с DAC.
Запускаем среду PSoC Disigner 5.3 заходим в File -> New Project:

Задаем имя проекта, папку в которой будем сохранять, выбираем микроконтроллер из списка и язык С.
Кратко опишу среду разработки:

- Настройка глобальных параметров, таких как тактовая частота,3 разних частоты полученных с тактовой,PLL(умножение тактовой частоты на 2), опорное напряжение для АЦП, и другие. Подробно о каждом параметре можно почитать тут
- Цифровые блоки и порты I/O. В каждой цифровой блок можно вставлять модуль переферии, и подключать к выводам портов.
- Настройка параметров модуля.
- Настройка выводов I/O.
- Аналоговые блоки и порты I/O.
- Структура проекта и сгенерированные библиотечные файлы.
- Модули переферии, которые вставляються в цифровые или аналоговые блоки.
*Не все модули занимают цифровой или аналоговой блок. Есть ограничение — не каждый модуль можно подключить к выводу порта который нужный.
Очень интересной и удобной особенностью IDE, есть то что при установке также загружуються даташиты. И посмотреть как работать с каждым модулем можно очень просто. Покажу на примере. Мы будем использовать модуль LED, но допустим, как с ним работать еще не знаем:

Открываем даташит, смотрим в самом верху страницы:

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

С модулем познакомились, теперь добавим его к проекту, кликаем по нему два раза и он добавляеться:

Переходим в окно просмотра и редактирования параметра модуля:

тут все просто: для удобства редактируем имя модуля, выбираем порт, вывод к которому подключен светодиод, и схему включение с ОА или ОК.
Аналогическим образом добавляем модуль DAC. Модуль установился в ячейки ASC10, ASC20, но при желании можно переместить в другие ячейки. Чтобы посмотреть до которого вывода можно подключить выход DAC — нажимаем «Shift» и кнопкой мыши нажымаем на вывод модуля «AnalogBus», линия показывает нам что в этих ячейках, мы можем подключиться только до вывода Port_0_3 (порт 0, вывод 3):

чтобы соединить выход модуля с выводом порта, удерживаем «Shift» и кликаем на выходе модуля, и на выводе:

настраиваем параметры модуля:

Когда все модули будут настроены и соединены с выводами портов(если нужно). Заходим в Build — > Generate/Build project или нажимаем иконку:

Начнеться генерирование проекта и API функций.
Как настроены выводы, или их настроить можно здесь:

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

открываем файл, видим список функций, и копируем нужные в main.c:

напишем небольшую программу для мигания светодиодом, и выводом значений на DAC:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
unsigned char DAC_Counter = 0;
void Delay(unsigned int value)
{
unsigned int i = 0;
for (i = 0; i < value; i++);
}
void main(void)
{
LED_TEST_Start();
DAC8_1_Start(DAC8_1_HIGHPOWER);
//M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
// Insert your main routine code here.
while(1)
{
LED_TEST_Invert();
DAC8_1_WriteStall(DAC_Counter);
DAC_Counter += 10;
if (DAC_Counter == 250) DAC_Counter = 0;
Delay(50000);
}
}
Прошиваем проект — заходим в Program -> Program Part. Идет процесс прошивки:

Осцилограмма сигнала на выходе DAC:

А теперь можно посмотреть сколько ресурсов занимает конфигурация и код. Заходим в View -> Resource Meter:

Всем спасибо за внимание!
20 комментариев
Случайно с ПАИС не имел дело?
например: цена.
2. Путь, найти или самому написать модуль на Verilog
Буду очень рад всем публикациям на эту тему!
Блок фильтр представляет цифровой фильтр, где можно менять параметры. Может использоваться в цепочке ADC -> Digital Filter -> DAC. Кратко можно увидеть на картинке:
Будет немного больше времени закончу публикацию по работе с PSoC3 PSoC 5, и как создавать свои модули на Verilog.