Съдържание:
- Стъпка 1: Да влезем направо
- Стъпка 2: Подобрете кода - Добавете функция
- Стъпка 3: Добавете закъснение при зает цикъл
- Стъпка 4: Стандарт за извикване на процедура за архитектура на ARM (AAPCS)
- Стъпка 5: Функция с параметър - вложени функции
- Стъпка 6: GPIO вход - Добавяне на превключватели
Видео: ЧАСТ 2 - МОНТАЖ НА GPIO ARM - RGB - ФУНКЦИОНИРАНИ ОБИВКИ - Превключватели: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
В част 1 научихме как да превключваме един червен светодиод на платката за разработка на MSP432 LaunchPad от Texas Instruments, използвайки монтаж вместо C / C ++.
В тази инструкция ще направим нещо подобно - ще контролираме RGB LED, който също е на същата дъска.
По пътя се надяваме да разширим познанията си за сглобяването на ARM, а не просто да се забавляваме, като запалим някои светодиоди.
Стъпка 1: Да влезем направо
Наистина, първото видео казва всичко. Не много повече за добавяне.
Основната му идея е да донесе идеята, че всеки I/O порт на MSP432 се състои от блок от "регистърни" адреси, които от своя страна се състоят от няколко бита всеки.
Освен това битовете са групирани по ортогонален начин. Тоест, бит 0 от всеки регистър адрес се отнася до един и същ външен I/O пин.
Повторихме идеята, че са необходими няколко регистърни адреса за този порт, за да се направи нещо дори само с един бит или щифт.
Но че в този случай, тъй като имаме работа с RGB LED, трябва да се справим с три бита за всеки адрес на регистър.
Подкрепихме, че се нуждаем от няколко регистри: регистър DIR, регистър SEL0, регистър SEL1 и регистър OUTPUT. И всеки път по три бита.
Стъпка 2: Подобрете кода - Добавете функция
Както видяхте в горната стъпка, основният програмен цикъл имаше много повтарящ се код, а именно, когато изключим светодиодите.
Така че можем да добавим функция към програмата. Все още трябва да извикваме тази функция всеки път, когато искаме да изключим светодиодите, но това води до срив на част от кода до едно изявление.
Ако нашият код за изключване на LED беше по-ангажиран с много повече инструкции, това би било истинско спестяване на памет.
Част от вграденото програмиране и микроконтролерите са много по-наясно с размера на програмата.
Видеото обяснява.
По същество ние добавяме изявление за разклоняване към нашия основен код и имаме друг блок код, който е функцията, към която се разклоняваме. И след като приключим, или в края на функцията, се връщаме към следващото изявление в основната програма.
Стъпка 3: Добавете закъснение при зает цикъл
В раздела Декларации на кода добавете константа, за да улесните настройването за желаното време:
; всяка дума след точка и запетая (';') започва коментар.
; кодът в тази част присвоява име на стойност.; можете също да използвате „.equ“, но те са малко по -различни.; '.equ' (мисля) не може да бъде променен, докато '.set' означава, че можете; променете стойността на „DLYCNT“по -късно в кода, ако желаете.; 'DLYCNT' ще се използва като стойност за обратно броене в подпрограмата за забавяне. DLYCNT. Набор 0x30000
Добавете нова функция за забавяне:
забавяне:.asmfunc; началото на подпрограмата или функцията „забавяне“.
MOV R5, #DLYCNT; зареждане на ядрото на процесора R5 със стойност, присвоена на „DLYCNT“. dlyloop; това означава начало на закъснение. асемблерът определя адреса. SUB R5, #0x1; извадете 1 от текущата стойност в основния регистър на процесора R5. CMP R5, #0x0; сравнете текущата стойност в R5 с 0. BGT dlyloop; разклонение, ако стойността в R5 е по -голяма от 0, за да обозначите (адрес) „dlyloop“. BX LR; ако стигнем до тук, стойността на R5 е 0. връщане от подпрограмата..endasmfunc; маркира края на подпрограмата.
След това в основното тяло, в основния цикъл, извикайте или извикайте тази функция за забавяне:
; това е фрагмент от код, от основното тяло или основната функция (вижте файла 'main.asm').
; това е цикъл в "main" и показва как наричаме или използваме тази нова функция "delay".; "#REDON" и "#GRNON" също са декларации (константи) (вижте горната част на "main.asm").; те са просто лесен начин да зададете определения цвят на RGB LED. цикъл MOV R0, #REDON; Червен - задава регистър на процесора на ядрото R0 със стойност, присвоена на „REDON“. STRB R0, [R4]; ядрен регистър R4 е предварително настроен с GPIO изходен адрес.; напишете това, което е в R0, на адрес, посочен от R4. BL забавяне; разклонете се към новата функция „забавяне“. BL ledsoff; разклонение към съществуващата вече функция „ledsoff“. BL забавяне; също MOV R0, #GRNON; Зелено - също STRB R0, [R4]; и така нататък. BL забавяне BL ledsoff BL забавяне
Видеото влиза в детайли.
Стъпка 4: Стандарт за извикване на процедура за архитектура на ARM (AAPCS)
Вероятно е подходящ момент да представите нещо. Това е конвенция на асемблерен език. Известен също като Стандарт за извикване на процедури за ARM архитектурата.
Има много неща в това, но това е просто стандарт. Това не ни пречи да научим програмирането на сглобяване и можем да приемем части от този стандарт, докато се чувстваме комфортно с някои концепции, които изучаваме.
В противен случай може да имаме чувството, че пием от огромен маркуч за вода. Твърде много информация.
Основни регистри
Тъй като се запознахме с основните регистри на MSP432, нека се опитаме да приемем някои от тези стандарти. Ще се съобразим с това, когато напишем следващата функция (включване / изключване на светодиод).
1) Трябва да използваме R0 като параметър на функцията. Ако искаме да предадем стойност във функцията (подпрограма), трябва да използваме R0, за да го направим.
2) Трябва да използваме регистъра на връзките по предназначение - той съдържа адреса, който показва къде да се върнем, след като подпрограмата приключи.
Ще видите как ще ги приложим.
Стъпка 5: Функция с параметър - вложени функции
Можем да изчистим кода си и да намалим обема на паметта, която заема, като комбинираме повтарящи се секции в една функция. Единствената разлика в тялото на основния контур е, че се нуждаем от параметър, за да можем да предаваме различните различни цветове, които искаме да видим на RGB LED.
Вижте видеото за подробности. (съжалявам за дължината)
Стъпка 6: GPIO вход - Добавяне на превключватели
Нека го направим по -интересно. Време е да добавим малко превключване към нашата програма за сглобяване.
Този Instructable има изображения, показващи как двата бордови превключвателя са свързани към MSP432.
По същество: превключвател 1 (SW1 или S1) е свързан към P1.1, а превключвател 2 (SW2 или S2) е свързан към P1.4.
Това прави нещата малко интересни не само защото се занимаваме с входове вместо с изходи, но и защото тези два превключвателя заемат или заемат два бита от един и същ регистър на адресен блок, както и единственият червен светодиод, който е изход.
Занимавахме се с превключване на единствения червен светодиод в тази инструкция, така че просто трябва да добавим код, за да се справим с превключвателите.
Блок за адрес на регистър на порт 1
Не забравяйте, че ние обхванахме това в предишния Instructable, но трябва да включим нов:
- Порт 1 Адрес на входящия регистър = 0x40004C00
- Порт 1 Изходен регистър адрес = 0x40004C02
- Порт 1 Адрес регистър на посоката = 0x40004C04
- Порт 1 Резистор Активиране Регистър адрес = 0x40004C06
- Порт 1 Изберете 0 Адрес на регистрация = 0x40004C0A
- Порт 1 Изберете 1 Регистрирайте адреса = 0x40004C0C
Когато използвате портовете като входове, е добре да използвате вътрешните резистори за издърпване или изтегляне.
Тъй като платката за разработка на Launchpad е свързала двата превключвателя към земята (LOW при натискане), това означава, че трябва да използваме резистори за изтегляне, за да сме сигурни, че имаме стабилна HIGH, когато не са натиснати.
Издърпайте нагоре / издърпайте резистори
Необходими са два различни адреса на регистър на порт 1, за да се свържат тези входове на превключвателя с издърпващи се резистори.
1) Използвайте регистъра за разрешаване на резистори на порт 1 (0x40004C06), за да посочите, че искате резистори (за тези два бита), 2) и след това използвайте изходния регистър на порт 1 (0x40004C02), за да настроите резисторите като издърпващи или падащи. Може да изглежда объркващо, че използваме изходен регистър на входовете. Изходният регистър има почти двойно предназначение.
Така че, за да се посочи по друг начин, изходният регистър може или да изпрати HIGH или LOW към изход (като например единствения червен светодиод), и / или да се използва за настройване на издърпващи или падащи резистори за входове, НО САМО ако тази функция е активирана чрез регистъра за разрешаване на резистори.
Важно в горното-когато изпращате/настройвате LOW или HIGH към всеки изходен бит, ще трябва да поддържате едновременно издърпващото/падащото състояние на входните битове.
(видеото се опитва да обясни)
Четене на входен бит за порт
- Задайте SEL0 / SEL1 за GPIO функционалност
- Задайте регистъра DIR като вход за битовете за превключване, но като изход за светодиода (едновременно в същия байт)
- Активиране на резистори
- Задайте ги като издърпващи се резистори
- Прочетете порта
- Може да искате да филтрирате прочетената стойност, за да изолирате само необходимите битове (превключвател 1 и 2)
Препоръчано:
Каска за безопасност Covid, част 1: Въведение в схемите на Tinkercad !: 20 стъпки (със снимки)
Covid Safety Helmet Част 1: Въведение в схемите на Tinkercad !: Здравей, приятелю! В тази поредица от две части, ние ще се научим как да използваме схемите на Tinkercad - забавен, мощен и образователен инструмент за научаване как работят схемите! Един от най -добрите начини да се научите е да го правите. Така че, първо ще проектираме нашия собствен проект:
Raspberry PI 3 - Активирайте серийни комуникации към TtyAMA0 до BCM GPIO 14 и GPIO 15: 9 стъпки
Raspberry PI 3 - Разрешаване на серийни комуникации към TtyAMA0 до BCM GPIO 14 и GPIO 15: Наскоро имах интерес да активирам UART0 на моя Raspberry Pi (3b), така че да мога да го свържа директно към устройство с ниво на сигнал RS -232, използвайки стандарт 9 -pin d-sub конектор, без да се налага да преминавате през USB към RS-232 адаптер. Част от моите интереси
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 стъпки
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
ROS MoveIt Robotic Arm Част 2: Робот контролер: 6 стъпки
ROS MoveIt Robotic Arm Част 2: Робот контролер: https://github.com/AIWintermuteAI/ros-moveit-arm.git В предишната част на статията създадохме URDF и XACRO файлове за нашата роботизирана ръка и стартирахме RVIZ за контрол на нашите роботизирана ръка в симулирана среда. Този път ще го направим с реа
GPIO ARM ASSEMBLY - T.I. КОМПЛЕКТ ЗА УЧЕБНА СИСТЕМА НА РОБОТИКИТЕ - ЛАБОРИРАНЕ 6: 3 стъпки
GPIO ARM ASSEMBLY - T.I. КОМПЛЕКТ ЗА УЧЕБНА СИСТЕМА НА РОБОТИКИ - ЛАБОРАТОРИЯ 6: Здравейте, В предишна инструкция за изучаване на ARM сглобяване с помощта на Texas Instruments TI -RSLK (използва микроконтролера MSP432), известен още като Lab 3, ако правите T.I. Разбира се, прегледахме някои много основни инструкции като писане в регистър