[Assembler, Программирование микроконтроллеров] Assembler Editor Plus: Использование модулей

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
19-Фев-2021 13:33

Продолжение цикла статей про редактор ассемблера для ARM микроконтроллеров под компилятор GNU ASпредыдущая статья Assembler Editor Plus: Первый проектпод катом будет скорее всего много картинок! Итак, у нас есть вчерашний проект с настройкой тактирования и глухим циклом, теперь давайте попробуем дописать его таким образом чтобы увидеть результаты работы на светодиодахВспоминаем, что для того чтобы использовать какую либо периферию микроконтроллера нам ее нужно включить, для этого используются регистры RCCПоэтому нам нужно добавить модуль работы RCC в наш проект, для этого запускаем добавление модуля в проект (см. предыдущую статью если не знаете как)
RCC находится в блоке PERIPH микроконтроллера, поэтому идем по дереву "PERIPH" - "Reset and clock control (RCC)" и тут появляются варианты:
  • можно добавить просто файл определений RCC где будут описаны все регистры RCC и их возможные значения
  • можно добавить уже готовый модуль настройки тактирования GPIO, который нам добавит модуль RCC и одновременно предоставит интерфейс включения/выключения GPIO

При нажатии установить у вас будет запрошен путь и имя для сохранения файла модуля настройки тактирования, поскольку это периферия, то для того чтобы избежать неизбежной энтропии вселенной, лучше этот файл настройки сохранить по какому нить осмысленному пути, я выбрал путь src\periph\rcc
в модуле видим строки включения и выключения периферии портов ввода выводатеперь самое время взглянуть в документацию нашей отладочной платы для того чтобы определить к какому GPIO подключены светодиодыу меня это сегодня отладочная плата Open407I-C, как уже писал в предыдущих статьях, в варианте Easy пакета редактора, посмотреть даташиты на различные отладочные платы можно в каталоге ArmAsmEdit\Add\MCUDoc\DevBoards или скачать с сайта производителя вашей платы
у меня 2 варианта: GPIOH и GPIOIбуду использовать светодиоды подключенные к GPIOHДля этого ищем в добавленном модуле строку включения GPIOH:
  • встаем курсором на запись DISABLE для выбранного GPIO
  • нажимаем кнопку "F4 Изменить"

И получаем диалоговое окно с возможными вариантами настройки, в котором нам надо просто выбрать нужное значение
Настройка будет исправлена на выбранную
Теперь нужно задействовать этот модуль настройки в нашей программе, прочитав описание модуля понимаем, что все что нужно сделать это добавить .include с именем нашего файла модуля-настройки в нужном месте программыИдем в main.asm и после инициализации тактирования микроконтроллера пишем .include (без пробела после него)У меня в редакторе включен режим автоформатирования текста, поэтому директива после набора будет распознана, переведена в ВЕРХНИЙ регистр и помещена с начала строки
и осталось только ввести путь и имя файла в кавычках, но поскольку мне как и всем нормальным людям лень набирать путь относительно папки проекта (придется по заглядывать в навигатор файлов проекта), то я опять нажимаю кнопку "F4 Изменить" и указываю имя файла в диалоге. При вставке путь к файлу сразу будет преобразован в нужный формат, так что вам не придется ломать голову как написать путь правильно
Можно "будущим поколениям" оставить примечание о том что же все таки мы здесь вставилиТеперь вторая часть рутины программиста микроконтроллеров на архитектуре ARM - настройка пинов микроконтроллера, и здесь нам опять помогут готовые шаблоны модулей - в этот раз нам понадобятся модули из группы GPIO
Как видно из списка, можно добавить как просто определения GPIO, так и уже готовые модули настройки, причем для некоторых GPIO (А, B, C) существуют индивидуальные модули настройки так как они имеют свои значения по умолчанию, в которые и устанавливаются после сброса микроконтроллера.Мой GPIOH в списке индивидуальных не числится поэтому выбираем "Модуль конфигурирования одного порта GPIO", и как и в случае с RCC при установке модуля указываем путь и имя файла настройки, про опасность энтропии я уже писал, поэтому я сохраню этот файл в папке src\periph\gpio
И теперь самые догадливые наверное уже тянут руки к клавише "F4" на клавиатуре, или двигают указатель мыши к кнопке "F4 Изменить", и правильно ! только не забудьте сначала встать на значение настройки :-)
  • первое, нужно указать какой порт настраиваем

И далее, вспомнив к каким именно пинам у нас подключены светодиоды (см. свой даташит, у меня это пины 2 и 3), обратив внимание что они подключены катодом на землю - значит управляться будут выходным сигналом с пина GPIO без инверсии, настраиваем их, так же через нажатие кнопки "F4"MODER пинов выставляем на "Выход", в нашем случае вам даже не надо особо запоминать как называется это значение, все есть в описании
АFR и OTYPER не трогаем (ну если особо интересно, можно через F4 посмотреть какие там варианты есть)Скорость нам здесь особо не важна, но если очень желается можем задать максимально возможную
Вот в общем то и все по настройке GPIO, согласитесь это было хоть и не так как в привычном всем Кубе, но тем не менее тоже не особо сложноТеперь нужно использовать этот модуль, для этого в файле main.asm после настройки тактирования добавим .include на измененный нами файл настройки
Осталось зажечь нужный нам светодиодДля этого, в духе статьи, использовать бы еще какой нить модуль, но этот случай я приберег на потом, так что предлагаю сейчас начать хардкорить на ассемблере, в конце концов статья то о редакторе ассемблера, а мы еще ни строчки собственно ассемблерного кода и не написали !Пины портов управляются различными регистрами, давайте используем один из вариантов:
  • нужно в один из регистров микроконтроллера загрузить адрес регистра, для этого будем использовать команду загрузки значения LDR, регистр пусть будет R0, введем с клавиатуры, [LDR R0,=] регистр вводимых символов не важен, компилятор их поймет в любом виде (еще раз обращаю внимание, если включено автоформатирование то команда ассемблера автоматически будет преобразована к верхнему регистру (если в настройках это выбрано), и позиционирована в строке, имена регистров у меня тоже преобразовываются к верхнему регистру)

Теперь нужно указать адрес регистра, я их не особо запоминаю, просто нажмем кнопку "F5 Символы" и в открывшемся окне выберем вкладку "Дерево символов" (можно нажатием на клавиатуре комбинации Ctrl+3)
Нам показаны символы и метки доступные из текущего местоположения (файла программы), для удобства они сгруппированы:
  • .GLOBAL - глобальные символы, видимые из любого файла проекта
  • MODULE - символы определенные в текущем местоположении (файле), ту да же попадают определения и метки вложенных директивой .include файлов
  • SWITCH - или любые другие группы настроек без определенной привязки, у нас это настройки одного из вложенных файлов (настройки тактирования GPIO)
  • STM32F4 - доступные определения по микроконтроллеру, они зависят от видимых из текущего положения инклудов обычно размещаемых в папке src\inc проекта
Раскроем ветку STM32F4, в ней найдем узел AHB1PERIPHBASE (это устройства подключенные к шине), там нам интересен GPIO, и наконец наш GPIOH, и регистр настройки GPIO_ODR
Этот регистр, согласно Reference Manual RM0090 и отвечает за выдаваемое значение на пин
Базовый адрес GPIOH содержится в определенном символе GPIOH, его и загрузим в R0, для это просто выбрав его в дереве сделаем двойной клик или нажмем кнопку "Выбрать"
Определим записываемое значение в регистре R1 командой MOV и запишем значение в регистр GPIOODR, определенный как базовый адрес GPIOH, в регистре R0, и смещение GPIO_ODR (последние опять таки можно вставлять по F5)
Теперь можно откомпилировать проект (про настройки компиляции, и сам процесс было описано в предыдущей статье)
Пора сходить за отладочной платой, подключить ее программатор к компьютеру и записать прошивку в устройство
по итогу мы должны увидеть горящий светодиод после программирования и сброса
Теперь нам бы вспомнить что хотели делать именно мигающий светодиод, а значит нужно озадачиться написанием какой нить задержки, чтобы не "давить клаву" можно просто задействовать такое устройство ядра микроконтроллера как SysTick, тем более что он уже описан и доступен в модулях микроконтроллера
Модуль установится в папку src\core\stk
в описании к модулю есть порядок его инициализации и использования:
  • добавить инициализацию можно в файле main.asm после инициализации тактирования, набираем команду BL, и дальше жмем F5 чтобы там выбрать нужный нам глобальный символ, или можно набрать после BL первые буквы SYS чтобы после нажатия F5 сразу увидеть подходящие по имени метки и символы
  • добавить запись значения в регистр R0 - который, согласно описанию на модуль и определяет задержку в мс и вызвать ожидание командой BL SYSTICK_DELAY. Дополнительно, помните я использовал R0 для определения адреса GPIOH ? - теперь мы наверное поменяем регистр на R2 чтобы не присваивать значение заново, и напишем простой индуский код нашей мигалки:

Дальше как всегда, компиляция, прошивка, сброс микроконтроллераВидео мигания снимать не буду, по-моему мне итак предупреждение вынесут за использование такого количества картинок в статье...Пожалуй это все на сегодня, в следующей статье рассмотрим еще несколько доступных и очень нужных функций редактора которые призваны облегчить вам жизнь при написании программ на языке ассемблераСледующая статья Assembler Editor Plus: Использование модулей
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_assembler, #_programmirovanie_mikrokontrollerov (Программирование микроконтроллеров), #_arm, #_asm, #_asm_edit, #_stm32, #_assembler, #_programmirovanie_mikrokontrollerov (
Программирование микроконтроллеров
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 22-Ноя 10:29
Часовой пояс: UTC + 5