Mundarija:
- 1 -qadam: Keling, RAMdan yozishni / o'qishni sinab ko'ramiz
- 2 -qadam: Ba'zi asosiy port ma'lumotlari
- 3 -qadam: Videodagi bitta kamchilikni payqadingizmi?
Video: GPIO ARM Yig'ilishi - T.I. ROBOTIKA TIZIMINI O'RGANISH TO'PLAMI - LAB 6: 3 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Salom, Texas Instruments TI-RSLK (MSP432 mikrokontroleridan foydalanadi) yordamida ARM yig'ilishini o'rganish bo'yicha oldingi yo'riqnomada, agar siz T. I. Albatta, biz registrga yozish va shartli tsikl qilish kabi juda oddiy ko'rsatmalarni ko'rib chiqdik. Biz Eclipse IDE yordamida ijro etishga o'tdik.
Biz bajargan kichik dasturlar tashqi dunyo bilan hech qanday aloqada bo'lmadi.
Zerikarli.
Keling, kirish/chiqish portlari, xususan, raqamli GPIO pinlari haqida bilib, buni biroz o'zgartirishga harakat qilaylik.
Shunday qilib, MSP432 ishlab chiqarish panelida ikkita GPIO portiga ulangan ikkita tugmachali kalit, RGB LED va qizil LED mavjud.
Bu shuni anglatadiki, biz bu pinlarni yig'ish orqali o'rnatish va boshqarishni o'rganganimizda, biz bu effektlarni vizual tarzda ko'ra olamiz.
Nosozliklarni tuzatuvchidan o'tishdan ko'ra ancha qiziqroq.
(Biz hali qadam tashlamoqchimiz - bu bizning "kechiktirish" funksiyamiz bo'ladi):-D
1 -qadam: Keling, RAMdan yozishni / o'qishni sinab ko'ramiz
GPIO -ga kirish va boshqarishga o'tishdan oldin, biz kichik bir qadam tashlashimiz kerak.
Oddiy xotira manziliga o'qish va yozishdan boshlaylik. Biz oldingi Instructable -dan bilamiz (u erdagi rasmlarga qarang) RAM 0x2000 0000 dan boshlanadi, shuning uchun bu manzilni ishlataylik.
Biz ma'lumotlarni asosiy registr (R0) va 0x2000 0000 o'rtasida o'tkazamiz.
Biz asosiy fayl tuzilishi yoki yig'ish dasturining mazmunidan boshlaymiz. Iltimos, TI Code Composer Studio (CCS) yordamida montaj loyihasini va ba'zi namunaviy loyihalarni yaratish uchun ushbu yo'riqnomaga qarang.
.barmoq
.text.hizlam 2. global asosiy.thumbfunc asosiy asosiy:.asmfunc; ---------------------------------- -----------------------------------------------; (bizning kodimiz bu erga o'tadi); ------------------------------------------ ---------------------------------------.endasmfunc.end
Men yuqori bo'limga yangi narsalarni qo'shmoqchiman, agar ba'zi deklaratsiyalar (ko'rsatmalar) bo'lsa. Bu keyinroq aniqroq bo'ladi.
ACONST.set 0x20000000; biz bundan pastda foydalanamiz (bu doimiy)
; Shubhasiz, "0x" keyingi oltilik qiymatini bildiradi.
Shunday qilib, bizning boshlang'ich fayllarimiz endi shunday ko'rinadi:
.barmoq
.text.hizlama 2 ACONST.set 0x20000000; biz bundan pastroqda foydalanamiz (bu doimiy); Shubhasiz, "0x" keyingi oltilik qiymatini bildiradi..global asosiy.thumbfunc asosiy asosiy:.asmfunc; --------------------------------------- ------------------------------------------; (bizning kodimiz bu erga o'tadi); ------------------------------------------ ---------------------------------------.endasmfunc.end
Endi bizda yuqoridagilar bor ekan, chiziqlar orasiga kod qo'shamiz.
Biz RAM joyiga yozishni boshlaymiz. Birinchidan, biz operativ xotiraga yoziladigan ma'lumotlar modelini, qiymatini o'rnatamiz. Bu qiymat yoki ma'lumotlarni aniqlash uchun biz asosiy registrdan foydalanamiz.
Eslatma: esda tutingki, kodda nuqta-nuqta (';') bo'lgan har qanday satr bu nuqta-verguldan keyingi izohdir.
;-----------------------------------------------------------------------------------------------
; YOZISH; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; yadro registri R0 biz RAM manziliga yozmoqchi bo'lgan ma'lumotlarni o'z ichiga oladi.; Shubhasiz, "0x" keyingi oltilik qiymatini bildiradi.
Keling, DONT ishlamaydigan bayonotlarni ko'rib chiqaylik.
; MOV MOV ma'lumotlarini RAM joyiga yozib bo'lmaydi.
; MOV faqat ro'yxatga olish ma'lumotlari uchun mo'ljallangan; yoki bir registrdan boshqasiga; ya'ni, MOV R1, R0.; STR STR dan foydalanishi kerak.; STR R0, = ACONST; Ifodadagi yomon atama ('='); STR R0, 0x20000000; Do'konda ko'rsatma berish uchun noqonuniy manzil rejimi; STR R0, ACONST; Do'konda ko'rsatma berish uchun noqonuniy manzil rejimi
Ko'p narsani tushuntirmasdan, biz yuqoridagi "ACONST" dan foydalanishga harakat qildik. Aslida, bu 0x20000000 kabi oddiy qiymatni ishlatish o'rniga, doimiy yoki doimiy.
Biz RAM manziliga yuqoridagilardan foydalanib yozishni yozolmadik. Keling, boshqa narsani sinab ko'raylik.
; RAM joyini o'z ichiga olgan boshqa registrni ishlatishimiz kerak
; MOV R1, #0x20000000 operativ xotira joyiga saqlash uchun buyurtma; RAM o'rnini (uning tarkibini emas, balki joylashuvini) R1 ga o'rnating.; Shubhasiz, "0x" keyingi oltilik qiymatini bildiradi. STR R0, [R1]; R1 (0x55) da nima borligini R1 yordamida RAMga (0x20000000) yozing.; biz RAM joylashuvi manziliga ega bo'lgan boshqa registrni (R1) ishlatamiz; RAM manziliga yozish uchun.
Yuqorida aytilganlarni bajarishning yana bir usuli, lekin "ACONST" dan foydalanib, oddiy manzil qiymati:
; Keling, yuqorida aytilganlarni takrorlaylik, lekin keling, RAMning haqiqiy joylashuvi qiymati o'rniga ramzdan foydalanaylik.
; biz "ACONST" ni 0x20000000 uchun stend sifatida ishlatmoqchimiz.; biz darhol qiymatni bildirish uchun '#' qilishimiz kerak; shuning uchun (yuqoriga qarang), biz ".set" direktivasidan foydalanishimiz kerak edi.; Buni isbotlash uchun R0 da ma'lumotlar modelini o'zgartiraylik. MOV R0, #0xAA; OK, biz RAMga MOV R1, #ACONST STR R0, [R1] manzil manzili o'rniga belgidan foydalanib yozishga tayyormiz.
Videoda batafsilroq ma'lumot berilgan, shuningdek, xotiradan o'qish bosqichlari.
Bundan tashqari, biriktirilgan manba.asm faylini ko'rishingiz mumkin.
2 -qadam: Ba'zi asosiy port ma'lumotlari
Endi biz RAM joyidan qanday yozish / o'qish haqida yaxshi tasavvurga ega bo'lsak, bu GPIO pinini boshqarish va undan foydalanishni yaxshiroq tushunishga yordam beradi.
Xo'sh, GPIO pinlari bilan qanday aloqa o'rnatamiz? Bu mikrokontroller va uning ARM yo'riqnomalariga oldingi qarashimizdan biz uning ichki registrlari bilan qanday ishlashni bilamiz va xotira (RAM) manzillari bilan qanday ishlashni bilamiz. Ammo GPIO pinlari?
Shunday qilib, bu pinlar xotira xaritasida bo'ladi, shuning uchun biz ularni xotira manzillari bilan bir xil davolashimiz mumkin.
Bu shuni anglatadiki, biz bu manzillar nima ekanligini bilishimiz kerak.
Quyida portning boshlanish manzillari ko'rsatilgan. Aytgancha, MSP432 uchun "port" - bu bitta pin emas, balki pinlar to'plami. Agar siz Raspberry Pi bilan tanish bo'lsangiz, menimcha, bu bu erdagi vaziyatdan farq qiladi.
Yuqoridagi rasmdagi ko'k doiralar doskadagi ikkita kalit va LED uchun yozuvni ko'rsatadi. Moviy chiziqlar haqiqiy LEDlarni ko'rsatadi. Sarlavhali o'tish moslamalariga tegishimiz shart emas.
Men qiziqtirgan portlarni quyida qalin qilib yozdim.
- GPIO P1: 0x4000 4C00 + 0 (hatto manzillar)
- GPIO P2: 0x4000 4C00 + 1 (toq manzillar)
- GPIO P3: 0x4000 4C00 + 20 (hatto manzillar)
- GPIO P4: 0x4000 4C00 + 21 (toq manzillar)
- GPIO P5: 0x4000 4C00 + 40 (hatto manzillar)
- GPIO P6: 0x4000 4C00 + 41 (toq manzillar)
- GPIO P7: 0x4000 4C00 + 60 (hatto manzillar)
- GPIO P8: 0x4000 4C00 + 61 (toq manzillar)
- GPIO P9: 0x4000 4C00 + 80 (hatto manzillar)
- GPIO P10: 0x4000 4C00 + 81 (toq manzillar)
Biz hali tugatmadik. Bizga qo'shimcha ma'lumot kerak.
Portni boshqarish uchun bizga bir nechta manzil kerak. Shuning uchun yuqoridagi ro'yxatda biz "juft manzillar" yoki "toq manzillar" ni ko'ramiz.
I/U manzil bloklarini ro'yxatdan o'tkazish
Bizga boshqa manzillar kerak bo'ladi, masalan:
- 1 -port kirish registrining manzili = 0x40004C00
- Port 1 Chiqish registrining manzili = 0x40004C02
- Port 1 Yo'nalish Ro'yxatdan o'tish manzili = 0x40004C04
- Port 1 0 Ro'yxatdan o'tish manzili = 0x40004C0A ni tanlang
- Port 1 1 Ro'yxatdan o'tish manzilini tanlang = 0x40004C0C
Va biz boshqalarga muhtoj bo'lishimiz mumkin.
OK, endi biz bitta qizil LEDni boshqarish uchun GPIO registr manzillari diapazonini bilamiz.
Juda muhim eslatma: MSP432 LaunchPad platasidagi har bir kirish -chiqish porti bir nechta (odatda 8) pin yoki chiziqlar yig'indisidir va har birini alohida kirish yoki chiqish sifatida sozlash mumkin.
Bu, masalan, agar siz "Port 1 yo'nalishidagi ro'yxatdan o'tish manzili" uchun qiymatlarni o'rnatayotgan bo'lsangiz, siz qaysi bitni (yoki bitlarni) o'sha manzilga o'rnatayotganingiz yoki o'zgartirayotganingiz haqida qayg'urishingiz kerak. Bu haqda keyinroq.
GPIO port dasturlash ketma -ketligi
Bizga kerak bo'lgan oxirgi qism - bu LEDni boshqarish uchun ishlatiladigan jarayon yoki algoritm.
Bir martalik ishga tushirish:
- Oddiy GPIO ishlashi uchun P1.0 (P1SEL1REG: P1SEL0REG Ro'yxatdan o'tish) <--- 0x00, 0x00 ni sozlang.
- P1DIRREG yo'nalish registrining 1 bitini chiqish yoki YUQOR sifatida o'rnating.
Loop:
Qizil LEDni yoqish uchun P1OUTREG registrining 0 bitiga HIGH yozing
- Kechiktirish funktsiyasini chaqiring
- Qizil LEDni o'chirish uchun P1OUTREG registrining 0 bitiga LOW yozing
- Kechiktirish funktsiyasini chaqiring
- Loopni takrorlang
Qaysi kirish / chiqish funktsiyasi (SEL0 va SEL1 ni sozlash)
LaunchPad -dagi ko'p pinlar bir nechta maqsadlarda ishlatiladi. Misol uchun, xuddi shu pin standart raqamli GPIO bo'lishi mumkin yoki UART yoki I2C ketma -ket aloqasida ham ishlatilishi mumkin.
Ushbu pin uchun biron bir funktsiyani ishlatish uchun siz ushbu funktsiyani tanlashingiz kerak. Siz pin funktsiyasini sozlashingiz kerak.
Yuqorida bu kontseptsiyani vizual shaklda tushuntirishga harakat qiladigan tasvir bor.
SEL0 va SEL1 manzillari qandaydir funktsiya / xususiyat tanlash vazifasini bajaradigan juftlik kombinatsiyasini hosil qiladi.
Bizning maqsadimiz uchun biz standart bitli raqamli GPIOni 0 bit uchun olishni xohlaymiz. Bu shuni anglatadiki, SEL0 va SEL1 LOW bo'lishi uchun bizga 0 bit kerak.
Port dasturlash ketma -ketligi (yana)
1. 0x00 ni P1 SEL 0 Register ga yozing (manzil 0x40004C0A). Bu LOW ni bit 0 ga o'rnatadi
2. 0x00 ni P1 SEL 1 Register ga yozing (manzil 0x40004C0C). Bu 0 -bit uchun LOW, GPIO -ni o'rnatadi.
3. P1 DIR Register ga 0x01 yozing (manzil 0x40004C04). Bu 0 -bit uchun "HIGH" ni belgilaydi, ya'ni OUTPUT.
4. P1 OUTPUT Registriga 0x01 yozish orqali LEDni yoqing (manzil 0x40004C02).
5. Qandaydir kechiktirishni bajaring (yoki disk raskadrovka paytida faqat bir qadam)
6. LEDni o'chiring, 0x00 dan P1 OUTPUT Registriga yozing (manzil 0x40004C02).
7. Har xil kechiktirishlarni bajaring (yoki disk raskadrovka paytida faqat bir qadam)
8. 4-7 bosqichlarni takrorlang.
Bu qadam bilan bog'liq video bizni butun jarayon davomida jonli demo orqali olib boradi, chunki biz har bir yig'ilish yo'riqnomasida bir qadam bosamiz va gaplashamiz va LED harakatini ko'rsatamiz. Iltimos videoning uzunligini uzr.
3 -qadam: Videodagi bitta kamchilikni payqadingizmi?
LEDni dasturlash va yoritishning butun jarayonini o'tayotgan videoda asosiy tsiklda qo'shimcha qadam bor edi, uni bir martalik ishga tushirishga o'tkazish mumkin edi.
Vaqt ajratganingiz uchun tashakkur.
Keyingisi biz bu erda boshlagan narsalarni kengaytiradi.
Tavsiya:
Rainbow Glow sitrus yig'ilishi: 4 qadam
Rainbow Glow sitrus yig'ilishi: Siz bir marta emas, balki har xil rangda yonib turadigan nurni ko'rganmisiz? Ishonamanki, sizda yo'q. Bu sizning sherigingiz, do'stlaringiz yoki yoshlaringiz uchun sotib olishingiz yoki sotib olishingiz mumkin bo'lgan eng yaxshi tungi yorug'lik. Men bu komponentni " Tinkercad.com " da yaratganman
3-qism: GPIO: ARM yig'ilishi: chiziq izdoshi: TI-RSLK: 6 qadam
3-qism: GPIO: ARM yig'ilishi: chiziq izdoshi: TI-RSLK: Salom. Bu keyingi qism, biz ARM montajini ishlatishni davom ettiramiz (yuqori darajali til o'rniga). Bu ko'rsatma uchun ilhom Texas Instruments Robotics System Learning Kit 6-laboratoriyasi yoki TI-RSLKdir. Biz mikrofondan foydalanamiz
IOT123 - D1M BLOCK - 2xAMUX yig'ilishi: 7 qadam (rasmlar bilan)
IOT123 - D1M BLOCK - 2xAMUX yig'ilishi: D1M BLOCKS mashhur Wemos D1 Mini SOC/Shields/Clones uchun sezgir qutilar, teglar, qutbli yo'riqnomalar va uzilishlarni qo'shadi. ESP8266 chipining muammolaridan biri shundaki, u faqat bitta analog IO piniga ega. Bu ko'rsatma 2xA ni qanday yig'ishni ko'rsatadi
IOT123 - D1M BLOCK - RFTXRX yig'ilishi: 8 qadam
IOT123 - D1M BLOCK - RFTXRX Assambleyasi: D1M BLOCKS mashhur Wemos D1 Mini SOC/Shields/Clones uchun sezgir qutilar, teglar, qutbli yo'riqnomalar va uzilishlarni qo'shadi. RF uzatgichlari/qabul qiluvchilari ESP8266 -ga mavjud uy/sanoat avtomatizatsiyasiga kirishga imkon beradi. Ushbu korpus 433/
2 -QISM - GPIO ARM YIG'ILISHI - RGB - FUNKSIY QO'NG'IROQLAR - Kommutatorlar: 6 qadam
2 -QISM - GPIO ARM ASSEMBLY - RGB - FUNCTION CALLS - Kalitlar: 1 -bo'limda biz C / C ++ o'rniga montaj yordamida Texas Instruments -dan MSP432 LaunchPad ishlab chiqish platasida bitta qizil LEDni qanday almashtirishni o'rgandik. shunga o'xshash narsani qiladi - RGB LED -ni boshqaring, u ham shu samolyotda