Оглавление:
- Шаг 1. Попробуем записать / прочитать из ОЗУ
- Шаг 2: некоторая основная информация о портах
- Шаг 3. Заметили ли вы один недостаток в видео?
Видео: СБОРКА РУКОЯТКИ GPIO - T.I. НАБОР ДЛЯ ОБУЧЕНИЯ СИСТЕМАМ РОБОТИКИ - ЛАБОРАТОРИЯ 6: 3 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Привет, В предыдущем руководстве по изучению сборки ARM с использованием TI-RSLK Texas Instruments (использует микроконтроллер MSP432), также известного как Lab 3, если вы выполняете T. I. Конечно, мы рассмотрели некоторые очень простые инструкции, такие как запись в регистр и условный цикл. Мы пошагово выполнили выполнение с помощью Eclipse IDE.
Крошечные программы, которые мы выполняли, никак не взаимодействовали с внешним миром.
Как-то скучно.
Давайте попробуем немного изменить это сегодня, узнав немного о портах ввода / вывода, в частности, о цифровых контактах GPIO.
Так получилось, что этот MSP432 поставляется на плате разработки, уже имеющей два кнопочных переключателя, светодиод RGB и красный светодиод, которые привязаны к некоторым портам GPIO.
Это означает, что по мере того, как мы учимся настраивать эти булавки и манипулировать ими посредством сборки, мы можем визуально видеть эти эффекты.
Намного интереснее, чем просто пройти через отладчик.
(Мы все еще идем по шагу - это будет наша функция задержки):-D
Шаг 1. Попробуем записать / прочитать из ОЗУ
Прежде чем перейти к доступу к GPIO и управлению им, мы должны сделать небольшой шаг.
Начнем с чтения и записи по стандартному адресу памяти. Из предыдущего руководства мы знаем (см. Изображения), что ОЗУ начинается с 0x2000 0000, поэтому давайте воспользуемся этим адресом.
Мы собираемся перемещать данные между регистром ядра (R0) и 0x2000 0000.
Начнем с базовой файловой структуры или содержимого программы сборки. Пожалуйста, обратитесь к этому Руководству, чтобы создать проект сборки с использованием TI Code Composer Studio (CCS), а также некоторые примеры проектов.
.большой палец
.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (наш код будет здесь); ------------------------------------------ ---------------------------------------.endasmfunc.end
Хочу добавить что-то новое в верхний раздел, где есть какие-то объявления (директивы). Позже станет понятнее.
ACONST.set 0x20000000; мы будем использовать это дальше (это константа)
; очевидно, что «0x» означает шестнадцатеричное значение.
Итак, содержимое нашего начального файла теперь выглядит так:
.большой палец
.text.align 2 ACONST.set 0x20000000; мы будем использовать это в дальнейшем (это константа); очевидно, что «0x» означает шестнадцатеричное значение..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (наш код будет здесь); ------------------------------------------ ---------------------------------------.endasmfunc.end
Теперь, когда у нас есть вышеуказанное, давайте добавим код между пунктирными линиями.
Начнем с записи в ОЗУ. Сначала мы установим шаблон данных, значение, которое мы будем записывать в ОЗУ. Мы используем основной регистр, чтобы установить это значение или данные.
Примечание: помните, что в коде любая строка с точкой с запятой (';') означает, что это все комментарии после этой точки с запятой.
;-----------------------------------------------------------------------------------------------
; ПИШУ;------------------------------------------------ ----------------------------------------------- MOV R0, # 0x55; Основной регистр R0 будет содержать данные, которые мы хотим записать в место ОЗУ.; очевидно, что «0x» означает шестнадцатеричное значение.
Затем давайте посмотрим на утверждения, которые НЕ работают.
; MOV MOV не может использоваться для записи данных в область RAM.
; MOV предназначен только для немедленных данных в регистре; или из одного регистра в другой; то есть MOV R1, R0.; STR должен использовать STR.; STR R0, = ACONST; Плохой термин в выражении ('='); STR R0, 0x20000000; Неверный режим адресации для инструкции магазина; STR R0, ACONST; Недопустимый режим адресации для инструкции магазина
Не вдаваясь в подробности, мы попытались использовать указанное выше «ACONST». По сути, это подстановка или константа вместо использования буквального значения, такого как 0x20000000.
Мы не могли писать для записи в ОЗУ, используя вышеизложенное. Попробуем еще что-нибудь.
; кажется, мы должны использовать другой регистр, содержащий расположение RAM в
; приказ сохранить в этом месте ОЗУ MOV R1, # 0x20000000; установить расположение ОЗУ (не его содержимое, а расположение) в R1.; очевидно, что «0x» означает шестнадцатеричное значение. STR R0, [R1]; записать то, что находится в R0 (0x55) в RAM (0x20000000), используя R1.; мы используем другой регистр (R1), который имеет адрес расположения RAM; для записи в это место ОЗУ.
Другой способ сделать то же самое, но с использованием «ACONST» вместо буквального значения адреса:
; давайте сделаем то же самое снова, но давайте использовать символ вместо буквального значения местоположения RAM.
; мы хотим использовать «ACONST» в качестве замены для 0x20000000.; нам по-прежнему нужно использовать знак «#», чтобы обозначить немедленное значение; поэтому (см. вверху) нам пришлось использовать директиву.set.; чтобы доказать это, давайте изменим шаблон данных в R0. MOV R0, # 0xAA; хорошо, мы готовы записать в ОЗУ, используя символ вместо буквального значения адреса MOV R1, #ACONST STR R0, [R1]
В видео представлены некоторые более подробные сведения, а также пошаговое чтение из области памяти.
Вы также можете просмотреть прикрепленный исходный файл.asm.
Шаг 2: некоторая основная информация о портах
Теперь, когда у нас есть хорошее представление о том, как писать в / читать из места в ОЗУ, это поможет нам лучше понять, как контролировать и использовать вывод GPIO.
Итак, как мы взаимодействуем с контактами GPIO? Из нашего предыдущего взгляда на этот микроконтроллер и его инструкции ARM мы знаем, как работать с его внутренними регистрами, и мы знаем, как взаимодействовать с адресами памяти (RAM). Но контакты GPIO?
Так получилось, что эти контакты отображены в памяти, поэтому мы можем обращаться с ними почти так же, как с адресами памяти.
Это означает, что нам нужно знать, что это за адреса.
Ниже приведены начальные адреса портов. Кстати, для MSP432 «порт» - это совокупность контактов, а не только один контакт. Если вы знакомы с Raspberry Pi, я считаю, что это отличается от ситуации здесь.
Синие круги на изображении выше показывают надписи на плате для двух переключателей и светодиодов. Синие линии указывают на настоящие светодиоды. Перемычки заголовка трогать не придется.
Ниже я выделил порты, которые нас интересуют, жирным шрифтом.
- GPIO P1: 0x4000 4C00 + 0 (четные адреса)
- GPIO P2: 0x4000 4C00 + 1 (нечетные адреса)
- GPIO P3: 0x4000 4C00 + 20 (четные адреса)
- GPIO P4: 0x4000 4C00 + 21 (нечетные адреса)
- GPIO P5: 0x4000 4C00 + 40 (четные адреса)
- GPIO P6: 0x4000 4C00 + 41 (нечетные адреса)
- GPIO P7: 0x4000 4C00 + 60 (четные адреса)
- GPIO P8: 0x4000 4C00 + 61 (нечетные адреса)
- GPIO P9: 0x4000 4C00 + 80 (четные адреса)
- GPIO P10: 0x4000 4C00 + 81 (нечетные адреса)
Мы еще не закончили. Нам нужна дополнительная информация.
Для управления портом нам понадобится несколько адресов. Поэтому в приведенном выше списке мы видим «четные адреса» или «нечетные адреса».
Блоки адресов регистров ввода / вывода
Нам потребуются другие адреса, например:
- Адрес входного регистра порта 1 = 0x40004C00
- Адрес выходного регистра порта 1 = 0x40004C02
- Адрес регистра направления порта 1 = 0x40004C04
- Порт 1 Выберите 0 Адрес регистра = 0x40004C0A
- Порт 1 Выберите 1 Адрес регистра = 0x40004C0C
И нам могут понадобиться другие.
Хорошо, теперь мы знаем диапазон адресов регистров GPIO для управления одним красным светодиодом.
Очень важное замечание: каждый порт ввода-вывода на плате MSP432 LaunchPad представляет собой набор из нескольких (обычно 8) контактов или линий, и каждый может быть индивидуально настроен как вход или выход.
Это означает, например, что если вы устанавливаете значения для «Адрес регистра направления порта 1», вам нужно заботиться о том, какой бит (или биты) вы устанавливаете или изменяете по этому адресу. Подробнее об этом позже.
Последовательность программирования порта GPIO
Наконец, нам нужен процесс или алгоритм для управления светодиодом.
Одноразовая инициализация:
- Настройте P1.0 (P1SEL1REG: P1SEL0REG Register) <--- 0x00, 0x00 для нормальной работы GPIO.
- Установите бит 1 регистра направления P1DIRREG как выходной или HIGH.
Петля:
Запишите HIGH в бит 0 регистра P1OUTREG, чтобы загорелся красный светодиод.
- Вызов функции задержки
- Запишите LOW в бит 0 регистра P1OUTREG, чтобы выключить красный светодиод.
- Вызов функции задержки
- Повторить цикл
Какая функция ввода / вывода (настройка SEL0 и SEL1)
Многие контакты на LaunchPad можно использовать по-разному. Например, тот же вывод может быть стандартным цифровым GPIO, или он также может использоваться в последовательной связи UART или I2C.
Чтобы использовать какую-либо конкретную функцию для этого контакта, вам необходимо выбрать эту функцию. Вам необходимо настроить функцию вывода.
Это изображение выше для этого шага, которое пытается объяснить эту концепцию в визуальной форме.
Адреса SEL0 и SEL1 образуют комбинацию пар, которые действуют как своего рода выбор функции / функции.
Для наших целей нам нужен стандартный цифровой GPIO для бита 0. Это означает, что нам нужно, чтобы бит 0 для SEL0 и SEL1 был LOW.
Последовательность программирования порта (снова)
1. Запишите 0x00 в регистр P1 SEL 0 (адрес 0x40004C0A). Это устанавливает LOW для бита 0
2. Запишите 0x00 в регистр P1 SEL 1 (адрес 0x40004C0C). Это устанавливает LOW для бита 0, установку для GPIO.
3. Запишите 0x01 в регистр DIR P1 (адрес 0x40004C04). Это устанавливает HIGH для бита 0, что означает ВЫХОД.
4. Включите светодиод, записав 0x01 в выходной регистр P1 (адрес 0x40004C02).
5. Сделайте какую-то задержку (или просто выполните пошаговую отладку)
6. Выключите светодиод, записав 0x00 в выходной регистр P1 (адрес 0x40004C02).
7. Сделайте какую-то задержку (или просто пошагово выполняйте отладку)
8. Повторите шаги с 4 по 7.
Связанное видео для этого шага проведет нас через весь процесс в живой демонстрации, поскольку мы пошагово рассмотрим каждую инструкцию по сборке и покажем действие светодиода. Извините, пожалуйста, за длину видео.
Шаг 3. Заметили ли вы один недостаток в видео?
В видео, которое описывает весь процесс программирования и зажигания светодиода, был дополнительный шаг в основном цикле, который можно было перенести на одноразовую инициализацию.
Спасибо, что нашли время ознакомиться с этим руководством.
Следующий расширяет то, что мы начали здесь.
Рекомендуемые:
Часы RGB для обучения детей времени: 4 шага
Часы с RGB-подсветкой для обучения детей времени: прошлой ночью я придумал, как помочь моему пятилетнему почувствовать время. Ясно, что дети ориентируются на повседневные события, чтобы понять, что будет дальше. обычно немного беспорядок и почти никогда не в порядке
Электронный значок LED мигающий значок робота - набор для пайки: 11 шагов
Электронный значок LED мигающий значок робота - набор для пайки: эта статья спонсируется PCBWAY. Компания PCBWAY производит высококачественные прототипы печатных плат для людей во всем мире. Попробуйте сами и получите 10 печатных плат всего за 5 долларов на PCBWAY с очень высоким качеством, спасибо PCBWAY. Робадж №1, который я разработал для
Робот-следящий за линией для обучения алгоритмам управления: 3 шага
Робот-следящий за линией для обучения алгоритмам управления: я разработал этого робота-следящего за линией несколько лет назад, когда был учителем робототехники. Целью этого проекта было научить моих студентов программировать робота, следующего за линией, для соревнований, а также сравнивать If / Else и ПИД-регулирование. И не
Zzzzap! Набор для пайки 3D: 4 шага
Zzzzap! Комплект для пайки 3D: Благодарим за покупку одного из комплектов для пайки 3D компании Great Big Factory. Пришло время собрать все вместе! Подождите … вы уже купили комплект? Если нет, вы можете получить его здесь! В комплект входят все необходимые компоненты, включая батареи! Это ст
Fwoosh! Набор для пайки 3D: 4 шага
Fwoosh! Комплект для пайки 3D: Благодарим за покупку одного из комплектов для пайки 3D компании Great Big Factory. Пришло время собрать все вместе! Подожди … ты уже купил комплект? Если нет, вы можете получить его здесь! В комплект входят все необходимые компоненты, включая батареи! Это st