Mundarija:
- 1 -qadam: Keling, darhol kiraylik
- 2 -qadam: Kodni yaxshilang - funktsiyani qo'shing
- 3-qadam: "Band-Loop Delay" ni qo'shing
- 4 -qadam: ARM arxitekturasini chaqirish standarti (AAPCS)
- 5 -qadam: Parametr bilan biriktirilgan funksiya
- 6 -qadam: GPIO kiritish - kalitlarni qo'shing
Video: 2 -QISM - GPIO ARM YIG'ILISHI - RGB - FUNKSIY QO'NG'IROQLAR - Kommutatorlar: 6 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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.
Bu yo'riqnomada biz shunga o'xshash narsani qilamiz - xuddi shu taxtada joylashgan RGB LEDini boshqarish.
Yo'l davomida, biz faqat LEDlarni yoqibgina qolmay, ARMni yig'ish haqidagi bilimlarimizni yanada oshirishga umid qilamiz.
1 -qadam: Keling, darhol kiraylik
Haqiqatan ham, birinchi videoda hamma narsa aytilgan. Qo'shish uchun ko'proq narsa yo'q.
Uning asosiy maqsadi, MSP432 -dagi har bir kirish -chiqish porti "registr" manzillar blokidan iborat degan fikrni uyga olib kelishdir, ular o'z navbatida har biri bir nechta bitlardan iborat.
Bundan tashqari, bitlar ortogonal tarzda guruhlangan. Ya'ni, har bir registr manzilining 0 biti bir xil tashqi kirish -chiqish piniga ishora qiladi.
Biz bitta port yoki pin yordamida biror narsa qilish uchun port uchun bir nechta registr manzillari kerak degan fikrni takrorladik.
Ammo bu holda, biz RGB LED bilan ishlayotganimiz uchun, har bir registr manzili uchun uchta bit bilan ishlashimiz kerak.
Bizga bir nechta registrlar kerakligini tasdiqladik: DIR registri, SEL0 registri, SEL1 registri va OUTPUT reestri. Va har safar uchta bit.
2 -qadam: Kodni yaxshilang - funktsiyani qo'shing
Yuqoridagi qadamda ko'rganingizdek, asosiy dastur tsiklida juda ko'p takrorlangan kod bor edi, ya'ni biz LEDlarni o'chirganimizda.
Shunday qilib, biz dasturga funktsiyani qo'shishimiz mumkin. Biz har doim LEDni o'chirishni xohlaganimizda ham bu funktsiyani chaqirishimiz kerak, lekin bu ba'zi kodlarning bitta bayonotga qulab tushishiga olib keladi.
Agar bizning LED-o'chirish kodimiz ko'proq ko'rsatmalarga ega bo'lganida edi, bu haqiqiy xotirani tejovchi bo'lardi.
O'rnatilgan dasturlash va mikro-kontrollerlarning bir qismi dastur hajmini ancha yaxshi biladi.
Video tushuntiradi.
Asosan, biz asosiy kodimizga dallanma bayonotini qo'shamiz va bizda boshqa tarmoq bloki mavjud, bu biz tarmoqlangan. Va keyin, biz tugagandan so'ng yoki funktsiyani tugatgandan so'ng, biz asosiy dasturdagi keyingi bayonotga qaytamiz.
3-qadam: "Band-Loop Delay" ni qo'shing
Kodning "Deklaratsiyalar" bo'limida kerakli vaqtni sozlashni osonlashtirish uchun doimiy qo'shing:
; nuqta-nuqta (';') dan keyingi har qanday so'z izohni boshlaydi.
; bu qismdagi kod qiymatga nom beradi.; Siz ham ".equ" dan foydalanishingiz mumkin edi, lekin ular biroz boshqacha.; '.equ' (menimcha) o'zgartirilishi mumkin emas, '.set' siz qila olasiz degan ma'noni anglatadi; agar xohlasangiz, keyinchalik "DLYCNT" qiymatini o'zgartiring.; "DLYCNT" kechikish kichik dasturida sanash qiymati sifatida ishlatiladi. 0x30000. DLYCNT
Yangi kechiktirish funktsiyasini qo'shing:
kechikish:.asmfunc; "kechiktirish" kichik dasturining yoki funktsiyasining boshlanishi.
MOV R5, #DLYCNT; "DLYCNT" ga tayinlangan R5 yadroli CPU registrini yuklang. dlyloop; bu kechikish davrining boshlanishini ko'rsatadi. montajchi manzilni aniqlaydi. YUBUB R5, #0x1; yadroli protsessor R5 -dagi joriy qiymatdan 1 -ni olib tashlang. CMP R5, #0x0; R5 dagi joriy qiymatni 0 ga solishtiring. BGT dlyloop; filial, agar R5 qiymati 0 dan katta bo'lsa, "dlyloop" yorlig'i (manzili) uchun. BX LR; Agar biz bu erga etib borsak, R5 qiymati 0. subroutine -dan qaytish degan ma'noni anglatadi..endasmfunc; subroutine tugashini belgilaydi.
Keyin asosiy tanada, asosiy pastadir ichida, kechiktirish funktsiyasini chaqiring yoki chaqiring:
; bu asosiy qism yoki asosiy funktsiyadan iborat kod parchasi ("main.asm" faylini ko'ring).
; Bu "asosiy" dagi pastadir va bu yangi "kechiktirish" funktsiyasini qanday chaqirishimiz yoki ishlatishimizni ko'rsatadi.; "#REDON" va "#GRNON" ham deklaratsiyalar (doimiylar) ("main.asm" ning yuqori qismiga qarang).; bu RGB LED -ning belgilangan rangini o'rnatishning oddiy usuli. halqa MOV R0, #REDON; Qizil - "REDON" qiymatiga ega bo'lgan R0 yadroli CPU registrini o'rnating. STRB R0, [R4]; R4 yadro registri ilgari GPIO chiqish manzili bilan o'rnatilgan edi.; R0da nima borligini R4 tomonidan ko'rsatilgan manzilga yozing. BL kechikishi; yangi "kechiktirish" funktsiyasiga o'tish. BL ledsoff; oldindan mavjud bo'lgan "ledsoff" funktsiyasiga o'tish. BL kechikishi; shu bilan MOV R0, #GRNON; Yashil - shu bilan STRB R0, [R4]; va hokazo. BL kechikishi BL ledsoff BL kechikishi
Video batafsil tasvirlangan.
4 -qadam: ARM arxitekturasini chaqirish standarti (AAPCS)
Ehtimol, biror narsani tanishtirish uchun yaxshi vaqt. Bu yig'ilish tilidagi konventsiya. ARM arxitekturasi uchun protsedura chaqiruvi standarti sifatida ham tanilgan.
Bu erda ko'p narsa bor, lekin bu standart. Bu bizni montaj dasturlarini o'rganishga to'sqinlik qilmaydi va biz o'zimiz o'rganayotgan ba'zi tushunchalarga o'zimizni qulay his qilgandan so'ng, biz ushbu standartni qabul qila olamiz.
Aks holda, biz o'zimizni ulkan suv quvuridan ichayotgandek his qilishimiz mumkin. Juda ko'p ma'lumot.
Asosiy registrlar
Biz MSP432 -ning asosiy registrlari bilan tanish bo'lganimiz uchun, keling, ushbu standartlarning ayrimlarini qabul qilishga harakat qilaylik. Keyingi funktsiyani yozganda biz bunga mos kelamiz (LEDni yoqish / o'chirish).
1) Biz funktsiya parametri sifatida R0 dan foydalanishimiz kerak. Agar biz qiymatni funktsiyaga (subroutine) o'tkazmoqchi bo'lsak, buni amalga oshirish uchun R0 dan foydalanishimiz kerak.
2) Biz havolalar reestridan maqsadli foydalanishimiz kerak - u dasturni to'ldirgandan so'ng qayerga qaytish kerakligini ko'rsatadigan manzilni o'z ichiga oladi.
Siz buni qanday qo'llayotganimizni ko'rasiz.
5 -qadam: Parametr bilan biriktirilgan funksiya
Takrorlangan bo'limlarni bitta funktsiyaga birlashtirish orqali biz kodimizni tozalashimiz va uning xotirasi hajmini kamaytirishimiz mumkin. Asosiy halqa korpusidagi yagona farq shundaki, biz parametrga muhtojmiz, shuning uchun biz RGB LED -ni ko'rishni istagan turli xil ranglardan o'tamiz.
Tafsilotlar uchun videoni ko'ring. (uzr uchun uzr)
6 -qadam: GPIO kiritish - kalitlarni qo'shing
Keling, buni yanada qiziqarli qilaylik. O'rnatish dasturimizga kalitlarni boshqarish vaqtini qo'shish vaqti keldi.
Ushbu yo'riqnomada ikkita bortli kalit MSP432-ga qanday ulanganligi tasvirlangan.
Asosan: 1 -kalit (SW1 yoki S1) P1.1 ga, 2 -kalit (SW2 yoki S2) esa P1.4 ga ulangan.
Bu narsa bizni chiqishlar o'rniga kirishlar bilan ishlayotganimiz uchun emas, balki bu ikkita kalit bitta qizil LEDli bitta registrli manzillar blokining ikkita bitini egallaganligi yoki egallaganligi uchun ham ishni biroz qiziqarli qiladi.
Biz bu yo'riqnomada bitta qizil LEDni almashtirish bilan shug'ullanganmiz, shuning uchun biz kalitlarga ishlov berish uchun kod qo'shishimiz kerak.
Port 1 Ro'yxatdan o'tish manzili bloki
Esda tutingki, biz bu ko'rsatmalarni oldingi yo'riqnomada ko'rib chiqdik, lekin biz yangisini qo'shishimiz kerak:
- 1 -port kirish registrining manzili = 0x40004C00
- Port 1 Chiqish registrining manzili = 0x40004C02
- Port 1 Yo'nalish Ro'yxatdan o'tish manzili = 0x40004C04
- Port 1 rezistori Ro'yxatdan o'tish manzilini yoqish = 0x40004C06
- Port 1 0 Ro'yxatdan o'tish manzili = 0x40004C0A ni tanlang
- Port 1 1 Ro'yxatdan o'tish manzilini tanlang = 0x40004C0C
Portlarni kirish sifatida ishlatganda, MSP432-ning ichki tortish yoki tushirish rezistorlaridan foydalanish yaxshidir.
Launchpad -ni ishlab chiqish paneli ikkita kalitni erga ulaganligi uchun (bosilganda LOW), demak biz bosilmaganda qattiq YUQORI borligiga ishonch hosil qilish uchun tortish UP rezistorlaridan foydalanishimiz kerak.
Rezistorlarni yuqoriga / pastga torting
Ushbu kalitlarni kirish rezistorlariga ulash uchun Port 1 Registrining ikki xil manzili kerak.
1) Port 1 rezistor-yoqish registridan (0x40004C06) foydalanib, rezistorlar kerakligini bildiring (bu ikkita bit uchun), 2) va keyin rezistorlarni tortish yoki tushirish sifatida o'rnatish uchun Port 1 Chiqish registrini (0x40004C02) ishlating. Chiqish registri deyarli ikki maqsadli.
Boshqacha qilib aytganda, chiqish registri chiqishga yuqori yoki pastni yuborishi mumkin (masalan, bitta qizil LED) va / yoki kirish uchun tortish yoki tushirish qarshiligini o'rnatish uchun ishlatiladi., BIR FAQAT, agar bu xususiyat rezistorni yoqish reestri orqali yoqilgan bo'lsa.
Yuqoridagilarda muhim-har qanday chiqish bitiga LOW yoki HIGH ni yuborish/sozlashda siz bir vaqtning o'zida kirish bitlarining tortish/tushirish holatini saqlab turishingiz kerak bo'ladi.
(video tushuntirishga harakat qiladi)
Port kirish bitini o'qish
- GPIO funksiyasi uchun SEL0 / SEL1 ni o'rnating
- DIR registrini kalit bitlari uchun kirish sifatida, lekin LED uchun chiqish sifatida o'rnating (bir vaqtning o'zida bir xil baytda)
- Rezistorlarni yoqish
- Ularni tortishish qarshiligi sifatida o'rnating
- Portni o'qing
- Siz kerakli bitlarni ajratish uchun o'qilgan qiymatni filtrlashni xohlashingiz mumkin (1 va 2 -tugma).
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
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/
IOT123 - D1M BLOCK - ACAM2 kamera yig'ilishi: 8 qadam (rasmlar bilan)
IOT123 - D1M BLOCK - ACAM2 kamera yig'ilishi: D1M BLOCKS taniqli Wemos D1 Mini SOC/Shields/Clones uchun sezgir qutilar, teglar, qutbli qo'llanmalar va uzilishlarni qo'shadi. ArduCam 2MP kamerasi ESP8266 chipi (D1M BLOCKS asosidagi) yordamida moslashuvchan tasvir/video yozib olish imkonini beradi
Karbon tolali telefon qutisi yig'ilishi: 10 qadam
Uglerod tolali telefon qutilarini yig'ish: Maqsad: Ushbu ko'rsatmaning maqsadi uglerod tolasidan foydalanish mumkin bo'lgan telefon qutisini yaratishdir. Uglerod tolasi telefon qutisi uchun ajoyib materialdir, chunki u nafaqat engil, balki mustahkam materialdir. Stni kuzatib boring