Информационный портал технической поддержки Центра проектирования интегральных микросхем |
Ранее, в статье "Проект “Hello, World” для МК К1986ВК01GI ("Электросила”). Запуск из ОЗУ и внутренней памяти", уже рассматривалcя пример работы с микроконтроллером К1986ВК01GI или "Электросила". В этой статье будет представлено ознакомление с отдельным блоком сопроцессора для тригонометрических преобразований.
Работа будет вестись с отладочной платой на базе микроконтроллера "Электросила". Проект, рассмотренный в статье, предназначен для того, чтобы продемонстрировать работу блока тригонометрических преобразований, проводя вычисления sin, cos для разных форматов данных (integer, float 32, float 16) и atan формата float 32.
Проект, рассмотренный в статье, входит в состав установочного пака для IDE Keil с названием "cordic", начиная с версии 1.4, тем не менее, в качестве справки проект также доступен для скачивания после статьи, в подразделе "Файлы для скачивания".
Блок осуществляет конвейерную обработку входящих данных.
Структурная схема блока представлена на рисунке 1:
Рисунок 1 - Структурная схема блока цифрового расчёта поворота координат CORDIC
При появлении на входе всех 3 значений (x, y, α), модуль загружает данные и начинает их обработку, через 35 тактов модуль выдаст результат обработки. Модуль имеет следующие стадии работы:
Как и в проекте “Hello, World”, ссылка на статью с рассмотрением которого есть в начале статьи, в проекте "cordic" из состава установочного пака для IDE Keil есть два набора настроек: для запуска из оперативной памяти и из внутренней. Выбор нужных настроек для запуска осуществляется при помощи меню Select Target.
Для корректного запуска из Flash-памяти необходимо проверить, настроена ли трассировка в блоке ITM, чтобы функция printf() смогла выводить данные в консоль при выполнении режима отладки. Сделать это можно в соответствии со статьей "Printf через ITM". Частоту при настройке "Core Clock" установить равную 8 МГц. Важно дополнительно отметить, что интерфейс ITM работает строго в режиме SWD.
Все оставшиеся настройки не отличаются от проекта “Hello, World”, поэтому в качестве справки рекомендуем с ним ознакомиться.
Для корректного запуска проекта из оперативной памяти (RAM) необходимо убедиться, что файл 0x02000000.ini, находящийся в папке с проектом, подключен к проекту в виде файла инициализации (вкладка "Debug" настроек проекта), как показано на рисунке 2:
Рисунок 2 - Подключение файла инициализации к проекту при запуске из оперативной памяти
Основные настройки блока задаются в регистре управления модулем CRD_CTRL. Таблица с описанием битов регистра представлена на рисунке 3 и взята из спецификации на микроконтроллер.
Рисунок 3 - Таблица описания регистра CRD_CTRL
Если ознакомиться с кодом проекта, то можно увидеть, что для расчёта синусов и косинусов используется IN_MODE = 0, а так же все три формата входных данных, задающихся изменением поля IN_FORMAT.
Арктангенс считается для режима IN_MODE = 1 и IN_FORMAT = 0 (32 бита, плавающая точка).
Перед расчётом функций блоком сопроцессора считается эталонное значение в соответствии с заголовочным файлом стандартной библиотеки math.h. Далее идёт вычисление тригонометрических функций методом CORDIC с помощью поворота входного вектора.
В конечном счёте после запуска проекта из ОЗУ или ПЗУ, через функцию printf() выводиться посчитанное методом CORDIC значение для определенной итерации (радиана), а так же эталонное значение, после которого следует подсчёт отклонения полученной величины от эталона.
По результатам работы блока можно видеть, что отклонение очень маленькое, что указывает на высокую точность преобразования. Наглядно на рисунке 4.
Рисунок 4 - Результат работы блока цифрового расчёта поворота координат CORDIC
Находясь в режиме отладки, помимо просмотра посчитанных значений в printf(), имеется также возможность просматривать все значения из регистров микроконтроллера. За это отвечает файл .SFR, привязка которого ранее рассматривалась в статье при настройке проекта. Вывести окошко со значениями регистра CORDIC (CRD) можно по следующей инструкции, которая представлена на рисунке 5.
Рисунок 5 - Алгоритм вывода значений регистра CORDIC (CRD) в режиме отладке IDE Keil
В этом окне можно просматривать значения полей регистра микроконтроллера после первоначальной настройки блока. По рисунку 6 можно видеть, что программа, которая дошла до точки останова, правильно отображает состояние регистров микроконтроллера, которые были выставлены программой. Аналогичным способом можно отслеживать ход выполнения преобразований.
Рисунок 8 - Сопоставление значений из окна регистра CRD_CTRL с тем, что было выставлено в коде программы. Режим отладки в IDE Keil
Сайт: | https://support.milandr.ru |
E-mail: | support@milandr.ru |
Телефон: | +7 495 221-13-55 |