62800

[i] Создаем проект в среде CM-LYNX

Дата последнего изменения: 16.01.2026 13:43:35

Интегрированная среда разработки CodeMaster-Lynx (CM-LYNX) предназначена для отладки и работы с процессорами серии К1967ВНхх. CM-LYNX базируется на функциональности, предоставляемой Eclipse CDT, с собственным программным комплексом для компиляции и генерации исполняемого машинного кода (toolchain). CM-LYNX также имеет набор программных библиотек для процессоров К1967ВНхх - HAL, DSPlib, Clib. Информацию о доступной актуальной версии можно получить на официальном сайте компании.

Эта статья посвящена тому, как начать работать с процессорами ЦОС Миландр в среде CM-LYNX. В статье показано создание проекта, его настройка, а также запуск программы "HelloWorld", мигающей светодиодами.

Содержание

1. Установка среды CM-LYNX
2. Создание и настройка проекта на примере К1967ВН044 (К1967ВН04BG)
3. Программа "HelloWorld"
    3.1. Код программы для микросхем К1967ВН02BG
    3.2. Разбор кода программы
4. Добавление библиотек HAL в проект
    4.1. Добавление библиотек копированием в папку проекта
    4.2. Добавление библиотек по ссылке
5. Сборка проекта и запуск отладки

1. Установка среды CM-LYNX

Среда CM-LYNX поставляется на диске в составе комплекса разработки и отладки для процессоров серии К1967ВНхх. В состав этого комплекса также входят программатор JEM LYNX и электронный ключ, поэтому, помимо установки самой среды, необходимо выполнить установку драйверов, находящихся на диске.

По умолчанию установщик среды устанавливает IDE в папку C:\Milandr\CM-LYNX.2.xx.xx в зависимости от номера версии.

2. Создание и настройка проекта на примере К1967ВН044 (К1967ВН04BG)

В проекте будет использован отладочный комплект для процессоров цифровой обработки сигналов К1967ВН044 (К1967ВН04BG). Для процессора К1967ВН02BG создание и настройка проекта будут такими же. Пример HelloWorld для К1967ВН02BG приведен отдельно.

Первым делом необходимо вставить ключ в USB-порт и подключить программатор. Подключение программатора показано на рисунке 1: красный провод шлейфа - к выводу 1.

Рисунок 1 - Правильное подключение программатора к отладочной плате

При запуске среды предлагается выбрать путь для рабочего пространства (рисунок 2).

Рисунок 2 - Создание рабочего пространства в среде CM-LYNX

Нажимаем OK и попадаем в среду CM-LYNX. Для создания проекта необходимо (см. рисунок 3):

1. Перейти по пути: вкладка File → New → Other...

2. В открывшемся окне выбрать C/C++ → C/C++ Project и нажать Next>.

3. В следующем окне выбрать шаблон Milandr C/C++ Project и нажать Next>.

4. В следующем окне ввести в поле Project name название проекта. Поля Project type и Toolchain остаются без изменений. Нажать Next>.

5. В следующем окне оставить обе конфигурации активированными, нажать Next>.

6. Выбор процессора, подключение библиотек HAL и опциональная генерация файла main. После выбора требуемых вариантов нажать Finish.

    - Процессор выбран 1967VN044 Rev.3 (поскольку проект настраивается для К1967ВН044 (К1967ВН04BG)). Если используется другой процессор, нужно выбрать соответствующую опцию.

    - Библиотеки подключаются по ссылке (то есть сами исходные файлы расположены по пути установки среды, а в проекте только ссылка на них - при необходимости можно или не подключать HAL, или скопировать все исходные файлы HAL в проект).

    - Для удобства генерируется пустой main.c.


Рисунок 3 - Создание нового проекта

В результате будет создан проект, который доступен в окне Project Explorer (рисунок 4).

Рисунок 4 - Проект в Project Explorer

Если на этапе 6 файл main не создавался, его можно создать вручную. Для этого нужно (см. рисунок 5): нажать правой кнопкой мыши (ПКМ) по проекту, далее New → Source File. В открывшемся окне ввести название файла (обязательно с расширением), выбрать шаблон и нажать Finish.

Рисунок 5 - Создание main.c

Далее можно перейти к коду программы "HelloWorld".

3. Программа "HelloWorld"

Задача конфигурации светодиодов на отладочной плате К1967ВН044 сводится к тому, чтобы для бит с 0-го по 3-й порта PC задать альтернативную функцию. Сделать переопределение первых 4 бит порта PC можно двумя способами.

Первый способ - переопределение порта PC в функции флагов FLAG0-FLAG3 и управление состоянием на выводах через флаги. Это можно сделать с помощью библиотечной функции HAL_SYS_FlagEnable(). Функция активирует FLAG3-0, путем включения альтернативных функций (установка в единицу соответствующих бит регистра GPx_ALT) в регистре GPC для 0-3 бит. Итоговый код примера приведен в фрагменте кода 1. Более подробно разбор итогового кода программы приведен ниже.

#include <sysreg.h>
#include <hal_1967VN044.h>
// Прототип функции задержки, реализованной ниже.
void Delay(int waitTicks);
int main(void)
{
    HAL_SYS_FlagEnable();
    // Основной цикл.
    while(1) {
         __builtin_sysreg_write(__FLAGREGST, 0x01); // Зажигаем светодиод FLAG0.
         Delay (500000);
         __builtin_sysreg_write(__FLAGREGCL, 0x00); // Гасим светодиод FLAG0.
         __builtin_sysreg_write(__FLAGREGST, 0x02); // Зажигаем светодиод FLAG1.
         Delay (500000);
         __builtin_sysreg_write(__FLAGREGCL, 0x00);
         __builtin_sysreg_write(__FLAGREGST, 0x04); // Зажигаем светодиод FLAG2.
         Delay (500000);
         __builtin_sysreg_write(__FLAGREGCL, 0x00);
         __builtin_sysreg_write(__FLAGREGST, 0x08); // Зажигаем светодиод FLAG3.
         Delay (500000);
         __builtin_sysreg_write(__FLAGREGCL, 0x00);
    }
}
//Функция программной задержки.
void Delay(int waitTicks)
{
    int i;
    for (i = 0; i < waitTicks; i++) {}
}

Фрагмент кода 1 - Код программы HelloWorld с использованием функции HAL_SYS_FlagEnable()

Второй способ - управление выводами через функции GPIO. Настройка выводов PC[3:0] в альтернативную функцию с помощью HAL осуществляется функцией void HAL_GPIO_Init(GPIO_PortPi * const GPIO_Pi, const uint Pins, const GPIO_PinMode Mode). Для всех выводов порта, соответствующих битам аргумента Pins (маска перечисления GPIO_PIN), установленных в «1», будет назначен режим работы, заданный входным аргументом const GPIO_PinMode Mode. Входной аргумент const GPIO_PinMode Mode может принимать следующие значения:

- GPIO_PinMode_In - вход;

- GPIO_PinMode_InPU - вход с подтяжкой к высокому уровню (лог «1»);

- GPIO_PinMode_Out - выход;

- GPIO_PinMode_OutPU - выход с подтяжкой к высокому уровню (лог «1»);

- GPIO_PinMode_Alt - альтернативная функция.

Итоговый код программы будет таким же, как и в фрагменте кода 1, только вместо HAL_SYS_FlagEnable(); будет строка HAL_GPIO_Init(LX_GPIO_PC, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_PinMode_Alt);

3.1. Код программы для микросхем К1967ВН02BG

Для микросхем К1967ВН02BG код будет таким же, как в фрагменте кода 1, только без строк #include <hal_1967VN044.h> и HAL_SYS_FlagEnable();. В процессоре К1967ВН02BG выводы FLAG0-FLAG3 являются отдельными выводами процессора.

3.2. Разбор кода программы

На отладочной плате К1967ВН044 (К1967ВН04BG) светодиоды подключены к выводам FLAG0-FLAG3 (они же PC0-PC3), как это приведено на рисунке 6.

Рисунок 6 - Подключение светодиодов на плате

Светодиод подключен к питанию 2.5 В. Чтобы его зажечь, необходимо замкнуть цепь, нажав на кнопку и соединив светодиод с землей. То же самое происходит, когда FLAG0 настраивается на выход и подается логический "0", то есть соединяется выход вывода с землей. Чтобы погасить светодиод, нужно переключить вывод FLAG0 на вход. Управление состоянием FLAG0-FLAG3 осуществляется через системный регистр FLAGREG.

Регистр FLAGREG – 32-битный регистр, который контролирует направление выводов FLAG0-FLAG3 (вход - логический "0", выход - логическая "1") и обеспечивает логический уровень, когда выводы сконфигурированы как выход. Направление выводов FLAG0-FLAG3 задается в первых 4 битах регистра [3:0], за значение флагов при выдаче отвечают биты [7:4]. Таким образом, чтобы настроить FLAG0 на выход, при этом чтобы он выдавал логическую "1", в регистр FLAGREG необходимо прописать значение 0x11 (8'b0001_0001). Однако непосредственно в регистр FLAGREG записывать значения нельзя! Для этого существуют два отдельных регистра FLAGREGST и FLAGREGCL. FLAGREGST позволяет записывать логическую "1" (установка бит) в регистр FLAGREG. FLAGREGCL позволяет записывать логический "0" (сброс бит) в регистр FLAGREG. Чтобы зажечь светодиод, необходимо установить вывод FLAG0 на выход (FLAGREG[3:0] = 4'b0001) и при этом вывести на вывод значение логического "0" (FLAGREG[7:4] = 4'b0000).

В коде программы в начале подключается заголовочный файл sysreg.h, в котором определены все системные регистры процессоров К1967ВНхх. Этот файл идет в составе стандартной библиотеки для К1967ВНхх, и поэтому путь к нему уже прописан в настройках проекта. Далее, приведенная функция Delay() - простейшая реализация функции задержки на цикле. Значение задержки в этом случае необходимо подбирать экспериментально. Работа со светодиодами осуществляется согласно описанной выше логике. В CM-LYNX доступ к системным регистрам осуществляется с помощью специальных функций:

__builtin_sysreg_read(int reg); // Чтение значений из регистра reg.
__builtin_sysreg_write(int reg, unsigned int value); // Запись значения value в регистр reg.

Фрагмент кода 2 - Функции для доступа к системным регистрам

В этом коде значение int reg берется из библиотеки sysreg.h. unsigned int value, как следует из названия, - беззнаковое целое число, записываемое в выбранный регистр.

4. Добавление библиотек HAL в проект

Если на этапе создания проекта библиотека HAL не добавлялась, ее можно подключить вручную. Если при создании проекта библиотека добавлена с помощью опции копирования файлов HAL в проект, следует перейти к "4.1. Добавление библиотек копированием в папку проекта".

4.1. Добавление библиотек копированием в папку проекта

Один из вариантов - скопировать файлы библиотеки HAL в проект. В таком случае библиотека будет расположена локально и ее при необходимости можно будет редактировать (или фиксировать в системе контроля версий).

Файлы можно скопировать самостоятельно. Файлы библиотеки HAL лежат по пути установки среды. Например, для К1967ВН044 (К1967ВН04BG) при установленной среде CM-LYNX версии 2.09.00 в папку по умолчанию путь к библиотекам HAL будет C:\Milandr\CM-LYNX.2.09.00\toolchain\1967VN044\HAL, а для микросхем К1967ВН02BG - C:\Milandr\CM-LYNX.2.09.00\toolchain\1967VN028\HAL. После копирования библиотек в проект нужно обновить файлы проекта (нажать ПКМ по проекту и далее выбрать Refresh в контекстном меню).

Нужно открыть папку HAL в Project Explorer в среде и переименовать файл 1967VN044_HAL_config_sample.h в 1967VN044_HAL_config.h - для этого нужно нажать на файл ПКМ и выбрать опцию Rename...

Также файлы можно скопировать через настройки проекта. В дереве проекта необходимо нажать ПКМ на названии проекта и выбрать пункт "Properties". В открывшемся окне следует перейти в C/C++ Build→Settings→Hardware и установить опции Attach and configure HAL library и USE custom HAL library, как показано на рисунке 7. В поле Custom HAL library location можно выбрать папку, в которую будет скопирован HAL - можно оставить значение по умолчанию.

Рисунок 7 - Копирование HAL через настройки проекта

После добавления файлов HAL в проект для тулчейна необходимо указать пути к заголовочным файлам. В дереве проекта необходимо нажать ПКМ на названии проекта и выбрать пункт "Properties". В открывшемся окне следует перейти в C/C++ Build→Settings→Clang C→Includes и в поле "Include paths" нажать на кнопку "Add" (значок "плюсика"), как показано на рисунке 8. Далее добавить пути HAL и HAL/inc. В результате компилятор C тулчейна при сборке данной конфигурации будет искать заголовочные файлы по этим папкам. В случае, если HAL добавлен при создании проекта, папка HAL называется custom_hal и путь custom_hal/inc уже добавлен, нужно добавить только путь к custom_hal. В случае, если HAL добавлен через настройки, папка с HAL называется в соответствии с указанными при добавлении настройками.

Рисунок 8 - Настройки компилятора, добавление путей к заголовочным файлам HAL

4.2. Добавление библиотек по ссылке

Библиотеки HAL можно добавить ссылкой на папку, в таком случае файлы библиотеки не будут находиться непосредственно в директории проекта, но при этом берутся из папки по пути установки среды CM-LYNX. Для этого в дереве проекта необходимо нажать ПКМ на названии проекта и выбрать пункт "Properties". В открывшемся окне следует перейти в C/C++ Build→Settings→Hardware и установить опцию Attach and configure HAL library. При этом настройки, которые приводятся в файле конфигурации 1967VN044_HAL_config.h, будут взяты из C/C++ Build→Settings→Hardware→Generic hardware settings (рисунок 9).

Рисунок 9 - Добавление HAL в проект по ссылке

5. Сборка проекта и запуск отладки

Чтобы посмотреть, как исполняется приведенная выше программа, нужно запустить проект в режиме отладки (debug). Но для начала необходимо выполнить компиляцию проекта. Перед рассмотрением режима отладки нужно убедиться, что выбран именно этот режим сборки. Это можно сделать, перейдя во вкладку Project→Build Configurations→Set Active→Debug. Также это можно проверить, нажав на стрелку у значка часов (выделен красным на рисунке 10) или, нажав на сам значок, и проверить, что режим Debug активен (выбран Active). Значок молотка (выделен зеленым на рисунке 10) выполняет компиляцию. Нажав на стрелку рядом, можно выбрать, что будет выполняться именно компиляция. Значок документа (выделен синим на рисунке 10) скомпилирует все конфигурации (Ctrl+B).

Рисунок 10 - Вкладка для проверки активности режима Debug

Перед тем, как собирать проект, необходимо его сохранить File→Save All.

После нажатия на значок "молотка", проект начнет собираться. После компиляции в окне Project Explorer можно наблюдать, что в проект добавилась папка Debug с выходными файлами.

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

Для создания отладочной конфигурации нужно нажать на стрелку у значка "жука" и перейти в Debug configurations, как это показано на рисунке 11.

Рисунок 11 - Расположение кнопки Debug Configurations

В открывшемся окне слева необходимо выбрать параметр "Milandr VN1967 LLDB" и нажать на кнопку "New". Показано на рисунке 12.

Рисунок 12 - Настройки окна Debug Configurations

Будет создана конфигурация с именем HelloWorld Debug. В поле "DSP cores" указывается количество процессоров, объединенных в JTAG цепочку. На отладочной плате один процессор К1967ВН044, поэтому выбираем "DSP cores = 1". Настройка параметров приведена на рисунке 13.

Можно также воспользоваться автоматическим определением процессоров в JTAG цепочке с помощью кнопки "Autodetect", однако перед ее нажатием к плате необходимо подключить отладчик, после чего подать на плату питание.

Рисунок 13 - Конфигурация отладки в окне Create, manage, and run configurations

Следующим шагом нужно перейти во вкладку "Debugger". Здесь в поле "Debugger" мы можем выбрать как будет осуществляться отладка: с помощью отладчика на процессоре, либо с помощью симулятора. При работе с отладочной платой необходимо выбрать "JEM", а остальные параметры оставить по умолчанию. Настройка вкладки "Debugger" приведена на рисунке 14.

Рисунок 14 - Настройка вкладки Debugger

Далее перейдем во вкладку "Control". Здесь можно настроить действия, выполняемые при запуске и завершении режима отладки. Вид вкладки представлен на рисунке 15.

Подробное описание всех режимов отладочной конфигурации приводится в документе "ML_ЦППО_GUI_Руководство_пользователя_R_Vx.x.x", пункт "Настройка конфигурации и запуск отладки" (x.x.x - номер версии документа).

Рисунок 15 - Конфигурация вкладки Control

На этом настройка конфигурации и запуска отладки завершена. Производим подключение к плате отладчика, подаем питание на плату и нажимаем кнопку "Debug".

Среда предложит открыть перспективу Debug режима, как это показано на рисунке 16. Необходимо согласиться. В режиме отладки можно выставлять точки останова (Breakpoints), открывать окно Disassembly, смотреть значения различных регистров.

Рисунок 16 - Окно с соглашением об открытии перспективы Debug режима

Запустить исполнение программы можно, если нажать на кнопку "Play". На рисунке 17 кнопка выделена синим цветом.

Рисунок 17 - Кнопка Play для запуска программы в режиме отладки

Приостановить выполнение программы можно с помощью кнопки "Suspend". Она показана на рисунке 18, выделена фиолетовым цветом.

Рисунок 18 - Кнопка Suspend для остановки выполнения программы в режиме отладки

Завершение процесса отладки осуществляется нажатием на кнопку "Stop". Кнопка показана на рисунке 19 и выделена зеленым цветом.

Рисунок 19 - Кнопка Stop для прекращения процесса отладки программы в режиме отладки

Сохранить статью в PDF

Теги

Была ли статья полезной?