Редактор Ассемблера Плюс: Использование Модулей

Продолжение серии статей о редакторе сборок микроконтроллеров ARM для компилятора GNU AS. предыдущая статья Редактор ассемблера плюс: первый проект Под катом скорее всего будет много фотографий! Итак, у нас есть вчерашний проект с настройками часов и мертвым циклом, теперь попробуем добавить его так, чтобы можно было увидеть результаты работы над светодиодами.

Помним, что для использования любой периферии микроконтроллера нам необходимо ее включить, для этого мы используем регистры RCC Поэтому нам необходимо добавить в наш проект модуль работы RCC; для этого запускаем добавление модуля в проект (если не знаете как, смотрите предыдущую статью)

Редактор ассемблера плюс: использование модулей

RCC находится в блоке ПЕРИФ микроконтроллера, поэтому идем по дереву «ПЕРИФ» — «Сброс и управление тактовой частотой (RCC)» и здесь появляются опции:

  • можно просто добавить файл определения RCC, где будут описаны все регистры RCC и их возможные значения
  • вы можете добавить готовый модуль настройки часов GPIO, который добавит нам модуль RCC и одновременно предоставит интерфейс для включения/выключения GPIO


Редактор ассемблера плюс: использование модулей

Когда вы нажмете «Установить», вам будет предложено указать путь и имя для сохранения файла модуля настроек часов, поскольку это периферия, во избежание неизбежной энтропии вселенной, лучше сохранить этот файл настроек по какому-то осмысленному пути.

путь, я выбрал путь src\periph\rcc

Редактор ассемблера плюс: использование модулей

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

Сегодня у меня есть эта отладочная плата Open407I-C, как я уже писал в предыдущих статьях, в Easy-версии пакета редактора.

Просмотреть даташиты на различные отладочные платы можно в каталоге ArmAsmEdit\Add\MCUDoc\DevBoards или скачать с сайта производителя вашей платы.



Редактор ассемблера плюс: использование модулей

У меня есть 2 варианта: GPIOH и GPIOI. Я буду использовать светодиоды, подключенные к GPIOH. Для этого ищем в добавленном модуле строку включения GPIOH:

  1. поместите курсор на запись DISABLE для выбранного GPIO
  2. нажмите кнопку «F4 Изменить»


Редактор ассемблера плюс: использование модулей

И получаем диалоговое окно с возможными вариантами настроек, в котором нам просто нужно выбрать нужное значение.



Редактор ассемблера плюс: использование модулей

Настройка будет скорректирована в соответствии с выбранным

Редактор ассемблера плюс: использование модулей

Теперь нам нужно использовать этот модуль конфигурации в нашей программе.

Прочитав описание модуля мы понимаем, что все, что нам нужно сделать, это добавить .

include с именем нашего файла конфигурации модуля в нужное место программы.

Заходим в main.asm и после инициализации часов микроконтроллера пишем .

include (без пробела после него) У меня в редакторе включен режим автоформатирования текста, поэтому директива после набора будет распознана, преобразована в ВЕРХНИЙ регистр и размещена с начала строки.



Редактор ассемблера плюс: использование модулей

и остается только ввести путь и имя файла в кавычках, но так как мне, как и всем нормальным людям, лень набирать путь относительно папки проекта (придется искать в файловом навигаторе проекта), Я снова нажимаю кнопку «F4 Edit» и указываю в диалоге имя файла.

При вставке путь к файлу будет сразу преобразован в нужный формат, поэтому вам не придется беспокоиться о том, как правильно прописать путь.



Редактор ассемблера плюс: использование модулей

Вы можете оставить заметку для «будущих поколений» о том, что мы здесь вставили.

Теперь вторая часть рутины программиста микроконтроллеров на архитектуре ARM — это настройка выводов микроконтроллера, и здесь нам снова помогут готовые шаблоны модулей — на этот раз нам понадобятся модули из группы GPIO.

Редактор ассемблера плюс: использование модулей

Как видно из списка, вы можете добавлять как простые определения GPIO, так и готовые модули конфигурации, а для некоторых GPIO (A, B, C) существуют отдельные модули конфигурации, так как они имеют свои собственные значения по умолчанию, которые установлены на после перезагрузки микроконтроллера.

Мой GPIOH не указан в списке индивидуальных, поэтому выбираем «Модуль конфигурации одного порта GPIO» и как и в случае с RCC, при установке модуля указываем путь и имя файла конфигурации, о чем я уже писал опасность энтропии, поэтому я сохраню этот файл в папке src\perph\gpio

Редактор ассемблера плюс: использование модулей

А сейчас самые умные люди наверняка уже тянутся к клавише «F4» на клавиатуре или подводят указатель мыши к кнопке «F4 Изменить», и это правильно! только не забудьте сначала установить значение настройки :-)

  • для начала нужно указать какой порт мы настраиваем


Редактор ассемблера плюс: использование модулей

А затем, запомнив, к каким именно контактам у нас подключены светодиоды (см.

ваш даташит, у меня это контакты 2 и 3), отметив, что они соединены катодом с землей - а значит, будут управляться выходным сигналом с вывод GPIO без инверсии, настраиваем их, также нажатием кнопки «F4» На выводах MODER установлено значение «Выход», в нашем случае даже не нужно запоминать, как называется это значение, все есть в описании

Редактор ассемблера плюс: использование модулей

AFR и OTYPER не трогаем (ну а если особенно интересно, то можно нажать F4, чтобы посмотреть, какие есть варианты) Скорость нам здесь не особо важна, но если очень захотеть, то можно поставить максимально возможную

Редактор ассемблера плюс: использование модулей

Вот в принципе и всё по настройке GPIO, согласитесь, хоть и было не так, как в обычном Кубе, но всё равно не особо сложно Теперь нам нужно использовать этот модуль; для этого в файле main.asm после настройки часов добавляем .

include в изменённый нами файл конфигурации

Редактор ассемблера плюс: использование модулей

Осталось зажечь нужный нам светодиод Для этого я бы в духе статьи использовал еще один модуль резьбы, но это дело я отложил на потом, поэтому предлагаю уже сейчас начать хардкорить в ассемблере, ведь статья про редактор ассемблера, а у нас его нет еще написал хоть строчку ассемблерного кода или написал! Выводы порта управляются разными регистрами, воспользуемся одним из вариантов:

  • нужно загрузить адрес регистра в один из регистров микроконтроллера, для этого воспользуемся командой загрузки значения LDR, пусть регистр будет R0, вводим с клавиатуры, [LDR R0,=] случай вводимых символов не имеет значения, компилятор поймет их в любом виде (еще раз обратите внимание: если включено автоформатирование, команда ассемблера автоматически преобразуется в верхний регистр (если это выбрано в настройках), и при расположении в строке имена регистров также преобразуются в верхний регистр)


Редактор ассемблера плюс: использование модулей

Теперь нужно указать адрес регистра, я их толком не помню, просто нажмите кнопку «Символы F5» и в открывшемся окне выберите вкладку «Дерево символов» (можно нажать комбинацию Ctrl+3 на клавиатуре)

Редактор ассемблера плюс: использование модулей

Нам показаны символы и метки, доступные из текущего местоположения (файла программы), для удобства они сгруппированы:
  • .

    GLOBAL — глобальные символы, видимые из любого файла проекта.

  • МОДУЛЬ — символы, определенные в текущем местоположении (файле), сюда также входят определения и метки файлов, вложенных директивой .

    include.

  • ПЕРЕКЛЮЧАТЕЛЬ - или любые другие группы настроек без конкретной привязки, в нашем случае это настройки одного из прикрепленных файлов (настройки часов GPIO)
  • STM32F4 — доступные определения для микроконтроллера, они зависят от видимых из текущей позиции включений, обычно находятся в папке src\inc проекта
Откроем ветку STM32F4, в ней найдем узел AHB1PERIPH_BASE (это устройства, подключенные к шине), там нас интересует GPIO, и наконец наш GPIOH, и регистр конфигурации GPIO_ODR.

Редактор ассемблера плюс: использование модулей

Этот регистр, согласно Справочному руководству RM0090, отвечает за выходное значение на вывод.

Редактор ассемблера плюс: использование модулей

Базовый адрес GPIOH содержится в определенном символе GPIOH, мы загрузим его в R0, для этого просто выделите его в дереве, дважды щелкните мышью или нажмите кнопку «Выбрать».



Редактор ассемблера плюс: использование модулей

Мы определяем значение, которое будет записано в регистр R1, с помощью команды MOV и записываем значение в регистр GPIO. ОДР, определяется как базовый адрес всех регистров GPIOH в регистре R0 и смещение GPIO_ODR (последнее снова можно вставить через F5)

Редактор ассемблера плюс: использование модулей

Теперь можно скомпилировать проект (о настройках компиляции и самом процессе было рассказано в предыдущей статье)

Редактор ассемблера плюс: использование модулей

Пришло время взять отладочную плату, подключить ее программатор к компьютеру и записать прошивку в устройство

Редактор ассемблера плюс: использование модулей

в результате после программирования и сброса настроек мы должны увидеть горящий светодиод

Редактор ассемблера плюс: использование модулей

Теперь нам хотелось бы вспомнить, что именно хотел сделать мигающий светодиод, а значит нам нужно озадачиться написанием какого потока задержки, чтобы не «давить на клавиатуру» можно просто использовать устройство ядра микроконтроллера типа SysTick, особенно так как он уже описан и доступен в модулях микроконтроллера

Редактор ассемблера плюс: использование модулей

Модуль будет установлен в папку src\core\stk.

Редактор ассемблера плюс: использование модулей

В описании модуля указан порядок его инициализации и использования:

  • Можно добавить инициализацию в файл main.asm после инициализации часов, набрать команду BL, а затем нажать F5, чтобы выбрать там нужный нам глобальный символ, или можно набрать первые буквы SYS после BL, чтобы после нажатия F5 можно было сразу увидеть метки и символы, соответствующие названию


Редактор ассемблера плюс: использование модулей

  • добавить в регистр R0 запись значения — которая, согласно описанию модуля, определяет задержку в мс и вызывает ожидание командой BL SYSTICK_DELAY. Кроме того, помните, я использовал R0 для определения адреса GPIOH? — теперь наверное поменяем регистр на R2, чтобы не переназначать значение, и напишем простой индийский код для нашего прошивальщика:


Редактор ассемблера плюс: использование модулей

Далее как всегда компиляция, прошивка, сброс микроконтроллера Видео моргания снимать не буду, по моему получу предупреждение за использование такого количества картинок в статье.

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

Теги: #Программирование микроконтроллеров #stm32 #arm #Assembler #asm #asm edit #asm edit

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.