Продолжение серии статей о редакторе сборок микроконтроллеров 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:
- поместите курсор на запись DISABLE для выбранного GPIO
- нажмите кнопку «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 проекта
Этот регистр, согласно Справочному руководству 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
-
Как Обстоят Дела С Веб-Каталогами
19 Oct, 24 -
Загляните В Будущее, Чтобы Понять Прошлое
19 Oct, 24 -
Научитесь Командовать
19 Oct, 24 -
Дум 2014
19 Oct, 24