Sadržaj:

DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka

Video: DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka

Video: DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka
Video: P1 ESP01 4CH Relay Module (Subtittled) 2024, Juli
Anonim
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači

U prvom dijelu naučili smo kako prebaciti jednu crvenu LED diodu na razvojnoj ploči MSP432 LaunchPad iz Texas Instruments, koristeći sklop umjesto C / C ++.

U ovom Instructableu ćemo učiniti nešto slično - kontrolirati RGB LED koji se nalazi i na istoj ploči.

Usput se nadamo da ćemo proširiti naše znanje o ARM montaži, a ne samo se zabaviti paljenjem nekih LED dioda.

Korak 1: Hajdemo odmah

Zaista, prvi video govori sve. Nema se šta više dodati.

Njegova glavna svrha je prenijeti ideju da se svaki I/O port na MSP432 sastoji od bloka adresa "registra", koje se zauzvrat sastoje od nekoliko bitova.

Nadalje, bitovi su grupirani na ortogonalni način. To jest, bit 0 svake adrese registra odnosi se na isti vanjski I/O pin.

Ponovili smo ideju da je potrebno nekoliko adresa registra za taj port, da bi se učinilo nešto sa samo jednim bitom ili pin -om.

Ali u ovom slučaju, budući da se radi o RGB LED, moramo se baviti s tri bita za svaku adresu registra.

Ojačali smo da nam je potrebno nekoliko registara: DIR registar, SEL0 registar, SEL1 registar i OUTPUT registar. I svaki put po tri bita.

Korak 2: Poboljšajte kôd - dodajte funkciju

Image
Image

Kao što ste vidjeli u prethodnom koraku, glavna programska petlja imala je mnogo ponavljanog koda, naime, kada isključimo LED diode.

Tako da programu možemo dodati funkciju. I dalje moramo pozivati tu funkciju svaki put kada želimo isključiti LED diode, ali to uzrokuje da se dio koda sruši u jednu izjavu.

Da je naš LED-off kod bio više uključen u mnogo više uputa, ovo bi zaista uštedjelo memoriju.

Dio ugrađenog programiranja i mikrokontrolera sve je svjesniji veličine programa.

Video objašnjava.

U suštini, našem glavnom kodu dodajemo naredbu o grananju i imamo još jedan blok koda koji je funkcija na koju se granamo. I onda kada završimo ili na kraju funkcije, vraćamo se na sljedeću naredbu unutar glavnog programa.

Korak 3: Dodajte kašnjenje zauzetosti

U odjeljku Deklaracije koda dodajte konstantu kako biste olakšali tweek za željeno vrijeme:

; sve riječi iza tačke sa zarezom (';') započinju komentar.

; kôd u ovom dijelu dodjeljuje ime vrijednosti.; mogli ste koristiti i '.equ', ali oni se malo razlikuju.; '.equ' (mislim) se ne može promijeniti, dok '.set' znači da možete; promijenite vrijednost 'DLYCNT' kasnije u kodu ako želite.; 'DLYCNT' će se koristiti kao vrijednost odbrojavanja u potprogramu kašnjenja. DLYCNT.set 0x30000

Dodajte novu funkciju odgode:

kašnjenje:.asmfunc; početak potprograma ili funkcije 'odgode'.

MOV R5, #DLYCNT; učitati jezgru procesora učitavanja jezgre R5 s vrijednošću dodijeljenom 'DLYCNT'. dlyloop; ovo označava početak petlje kašnjenja. asembler određuje adresu. SUB R5, #0x1; oduzeti 1 od trenutne vrijednosti u registru jezgre procesora R5. CMP R5, #0x0; uporedite trenutnu vrijednost u R5 sa 0. BGT dlyloop; granati ako je vrijednost u R5 veća 0, za označavanje (adresu) 'dlyloop'. BX LR; ako smo došli ovdje, znači da je vrijednost R5 bila 0. povratak iz potprograma..endasmfunc; označava kraj potprograma.

Zatim u glavnom tijelu, unutar glavne petlje, pozovite ili pozovite tu funkciju kašnjenja:

; ovo je fragment koda, glavnog tijela ili glavne funkcije (vidi datoteku 'main.asm').

; ovo je petlja u 'main' i pokazuje kako zovemo ili koristimo tu novu 'delay' funkciju.; '#REDON' i '#GRNON' su takođe deklaracije (konstante) (vidi vrh 'main.asm').; oni su samo jednostavan način za postavljanje određene boje RGB LED diode. petlja MOV R0, #REDON; Crveno - postavlja registar procesora jezgre R0 sa vrijednošću dodijeljenom 'REDON'. STRB R0, [R4]; registar jezgre R4 je prethodno postavljen sa izlaznom adresom GPIO.; upišite ono što je u R0, na adresu navedenu u R4. BL kašnjenje; pređite na novu funkciju 'odgode'. BL ledsoff; grana na već postojeću 'ledsoff' funkciju. BL kašnjenje; isto MOV R0, #GRNON; zeleno - isto tako STRB R0, [R4]; i tako dalje. BL kašnjenje BL LEDsoff BL kašnjenje

Videozapis ulazi u detalje.

Korak 4: Standard poziva procedure arhitekture ARM -a (AAPCS)

Vjerovatno je dobro vrijeme da nešto predstavite. To je konvencija na asemblerskom jeziku. Takođe poznat kao Standard poziva procedura za ARM arhitekturu.

Ima tu puno toga, ali to je samo standard. To nas ne sprječava u učenju programiranja montaže i možemo usvojiti dijelove tog standarda u hodu, nakon što se osjećamo ugodno s nekim konceptima koje učimo.

U suprotnom bismo se mogli osjećati kao da pijemo iz ogromnog crijeva za vodu. Previše informacija.

Osnovni registri

Pošto smo se upoznali sa osnovnim registrima MSP432, pokušajmo sada usvojiti neke od ovih standarda. Tome ćemo se prilagoditi kada napišemo sljedeću funkciju (uključivanje / isključivanje LED diode).

1) Trebali bismo koristiti R0 kao parametar funkcije. Ako želimo prenijeti vrijednost u funkciju (potprogram), za to bismo trebali koristiti R0.

2) Koristit ćemo Link Register za predviđenu svrhu - on sadrži adresu koja označava kamo se vratiti nakon što se potprogram dovrši.

Vidjet ćete kako ih primjenjujemo.

Korak 5: Funkcija s parametrom - ugniježđene funkcije

Naš kôd možemo očistiti i smanjiti količinu memorije koju zauzima kombiniranjem ponovljenih odjeljaka u jednu funkciju. Jedina razlika u tijelu glavne petlje je ta što nam je potreban parametar kako bismo mogli proslijediti različite boje koje želimo vidjeti RGB LED.

Za detalje pogledajte video. (izvini na dužini)

Korak 6: GPIO ulaz - Dodajte prekidače

Učinimo to zanimljivijim. Vrijeme je da u naš montažni program dodamo kontrolu prekidača.

Ovaj Instructable ima slike koje pokazuju kako su dva ugrađena prekidača spojena na MSP432.

U osnovi: Prekidač 1 (SW1 ili S1) spojen je na P1.1, a Prekidač 2 (SW2 ili S2) spojen je na P1.4.

Ovo čini stvari pomalo zanimljivima ne samo zato što se bavimo ulazima umjesto izlazima, već i zato što ova dva prekidača zauzimaju ili zauzimaju dva bita istog bloka adrese registra, kao i jedna crvena LED dioda koja je izlaz.

Bavili smo se prebacivanjem jedne crvene LED diode u ovom Instructable -u, pa samo trebamo dodati kôd za rukovanje prekidačima.

Blok adresa porta 1 registra

Upamtite da smo ovo pokrili u prethodnom Instructable, ali moramo uključiti novi:

  • Port 1 Ulazna adresa registra = 0x40004C00
  • Port 1 Izlazna adresa registra = 0x40004C02
  • Port 1 Smjer Adresa registra = 0x40004C04
  • Omogući otpornik priključka 1 Adresa registra = 0x40004C06
  • Port 1 Odaberite 0 Adresa registra = 0x40004C0A
  • Port 1 Odaberite 1 Adresa registra = 0x40004C0C

Kada koristite portove kao ulaze, dobro je koristiti unutrašnje pull-up ili pull-down otpornike MSP432.

Budući da je razvojna ploča Launchpada ožičila dva prekidača na masu (LOW kada se pritisne), to znači da bismo trebali koristiti pull UP otpornike kako bismo bili sigurni da imamo čvrstu HIGH kad nisu pritisnuti.

Povucite / povucite otpornike

Potrebne su dvije različite adrese registra 1 porta za povezivanje tih ulaza prekidača sa otpornicima.

1) Koristite Port 1 Resistor-Enable register (0x40004C06) da samo naznačite da želite otpornike (za ta dva bita), 2), a zatim pomoću izlaznog registra porta 1 (0x40004C02) postavite otpornike na povlačenje ili na povlačenje. Može izgledati zbunjujuće da koristimo izlazni registar na ulazima. Izlazni registar ima gotovo dvostruku namjenu.

Dakle, za ponovno postavljanje na drugi način, izlazni registar može ili poslati HIGH ili LOW na izlaz (poput jedne crvene LED diode), i / ili se koristi za postavljanje pull-up ili pull-down otpornika za ulaze, ALI SAMO ako je ta funkcija omogućena preko registra za omogućavanje otpornika.

Važno u gore navedenom-prilikom slanja/postavljanja LOW ili HIGH na bilo koji izlazni bit, morat ćete istovremeno održavati pull-up/pull-down stanje ulaznih bitova.

(video pokušava objasniti)

Očitavanje ulaznog bita porta

  • Postavite SEL0 / SEL1 za GPIO funkcionalnost
  • Postavite DIR registar kao ulaz za bitove prekidača, ali kao izlaz za LED (istovremeno u istom bajtu)
  • Omogućite otpornike
  • Postavite ih kao pull-up otpornike
  • Pročitajte port
  • Možda ćete htjeti filtrirati očitanu vrijednost kako biste izolirali samo potrebne bitove (prekidač 1 i 2)

Preporučuje se: