Ранее, в одной из статей, мы уже рассматривали пример работы с микроконтроллером для управления электроприводами “Электросила”. Теперь мы ознакомимся с отдельным блоком сопроцессора для тригонометрических преобразований.
Работать будем с отладочной платой на базе Электросилы. Проект, рассмотренный в статье, предназначен для того, чтобы продемонстрировать работу этого блока, проводя вычисления sin, cos для разных форматов данных (integer, float 32, float 16) и atan формата float 32.
Проект из статьи всегда доступен для скачивания на GitHub
Блок осуществляет конвейерную обработку входящих данных
Структурная схема блока представлена на рисунке ниже
При появлении на входе всех 3 значений (x, y, α), модуль загружает данные и начинает их обработку, через 35 тактов модуль выдаст результат обработки. Модуль имеет следующие стадии работы:
Как и в проекте “Hello, World”, ссылка на статью с рассмотрением которого есть в начале статьи, в проекте есть два набора настроек: для запуска из оперативной памяти и из внутренней. Выбор нужных настроек для запуска осуществляется в Select Target.
Из особенностей можно выделить то, что для рассмотрения правильности работы примера нужно указать путь к файлу MLDR124.SFR. Данный файл используется для отображения регистров периферии в IDE Keil в режиме отладки. Его можно найти в папке со скачанным проектом. Файл нужно указывать в настройках Target, выставив галочку “Use Custom File” и указав путь, где он располагается (при распаковке проекта в любую директорию укажите путь к папке проекта с названием файла). На картинке ниже показана настройка файла.
И важно, что для запуска из FLASH и корректной работы вывода посчитанных значений с помощью интерфейса ITM, помимо его настройки, требуется указать файл инициализации для FLASH-памяти. Вспомним, что в проекте "Hello, World" работоспособность не страдала от отсутствия данного файла. Настройка показана на рисунке ниже.
Все остальные настройки не отличаются от проекта “Hello, World”, поэтому обязательно ссылайтесь на статью с рассмотрением данного примера.
Все расчёты тригонометрических функций будут так же выводиться в отладочную консоль с помощью ITM интерфейса. Поэтому уделите настройке интерфейса особое внимание.
Основные настройки блока задаются в регистре управления модулем CRD_CTRL. Таблица на рисунке ниже. Она так же доступна в спецификации на микроконтроллер.
Обратите внимание на код, где для расчёта синусов и косинусов используется IN_MODE = 0, а так же все три формата входных данных, задающихся занесением в регистр CTRL IN_FORMAT значения.
Арктангенс считается для режима IN_MODE = 1 и IN_FORMAT = 0 (32 бита, плавающая точка).
Перед расчётом функций блоком сопроцессора считается эталонное значение в соответствии с заголовочным файлом стандартной библиотеки math.h. Далее идёт вычисление тригонометрических функций методом CORDIC с помощью поворота входного вектора.
В конечном счёте через функцию printf() должно выводиться посчитанное методом CORDIC значение для определенной итерации (радиана), а так же эталонное значение, после которого следует подсчёт отклонения полученной величины от эталона.
После запуска проекта из ОЗУ или ПЗУ с настроенным интерфейсом ITM и окном printf() в отладке, мы сможем наблюдать вывод посчитанных тригонометрических функций с отклонением от посчитанного калькулятором значения.
По результатам можно видеть, что отклонение очень маленькое, что указывает на высокую точность преобразования. Наглядно на рисунке ниже.
Находясь в режиме отладки, помимо просмотра посчитанных значений в printf(), у нас так же есть возможность просматривать все значения из регистров микроконтроллера. За это отвечает файл .SFR, который мы привязали при настройке проекта. Давайте выведем окошко со значениями регистра CORDIC (CRD). Наглядно на рисунке ниже.
Теперь посмотрим регистры микроконтроллера после первоначальной настройки блока. По картинке можно видеть, что программа, которая дошла до точки останова, правильно отображает состояние регистров микроконтроллера, которые были выставлены программой. Таким образом можно отследить ход выполнения всей программы.