Kazalo:

DEL 2 - SKLOP GPIO ARM - RGB - FUNKCIJSKI KLICI - Stikala: 6 korakov
DEL 2 - SKLOP GPIO ARM - RGB - FUNKCIJSKI KLICI - Stikala: 6 korakov

Video: DEL 2 - SKLOP GPIO ARM - RGB - FUNKCIJSKI KLICI - Stikala: 6 korakov

Video: DEL 2 - SKLOP GPIO ARM - RGB - FUNKCIJSKI KLICI - Stikala: 6 korakov
Video: Удивительный карманный компьютер «сделай сам» geeekpi raspberry pi 4 алюминиевый чехол для NAS 2024, November
Anonim
DEL 2 - SKLOP GPIO ARM - RGB - FUNKCIJSKI KLICI - Stikala
DEL 2 - SKLOP GPIO ARM - RGB - FUNKCIJSKI KLICI - Stikala

V prvem delu smo se naučili, kako preklopiti eno samo rdečo LED na razvojni plošči MSP432 LaunchPad iz Texas Instruments, z uporabo montaže namesto C / C ++.

V tem navodilu bomo naredili nekaj podobnega - upravljali bomo LED RGB, ki je tudi na isti plošči.

Med potjo upamo, da bomo še izboljšali svoje znanje o sestavljanju ARM -a in se ne bomo le zabavali ob prižiganju nekaterih LED.

1. korak: Skočimo takoj

Res, prvi video pove vse. Nič več za dodati.

Njegova glavna poanta je odgnati idejo, da so vsa V/I vrata na MSP432 sestavljena iz bloka "registrskih" naslovov, ki so sestavljeni iz več bitov.

Poleg tega so bitovi združeni pravokotno. To pomeni, da se bit 0 vsakega naslova registra nanaša na isti zunanji V/I pin.

Ponovili smo idejo, da za ta vrata potrebuje več registrskih naslovov, da naredi nekaj samo z enim samim bitom ali pin -om.

Toda v tem primeru, ker imamo opravka z RGB LED, moramo obravnavati tri bite za vsak naslov registra.

Okrepili smo, da potrebujemo več registrov: register DIR, register SEL0, register SEL1 in register OUTPUT. In vsakič po tri koščke.

2. korak: Izboljšajte kodo - dodajte funkcijo

Image
Image

Kot ste videli v zgornjem koraku, je imela glavna programska zanka veliko ponavljajoče se kode, in sicer, ko ugasnemo LED.

Tako lahko programu dodamo funkcijo. To funkcijo moramo še vedno klicati vsakič, ko želimo izklopiti LED, vendar povzroči, da se neka koda sesede v en sam stavek.

Če bi bila naša koda za izklop LED vključena v veliko več navodil, bi to resnično prihranilo spomin.

Del vgrajenega programiranja in mikrokrmilnikov se veliko bolj zaveda velikosti programa.

Video razlaga.

V bistvu svoji glavni kodi dodamo izjavo o razvejanju in imamo še en blok kode, ki je funkcija, na katero vejemo. In potem, ko končamo ali na koncu funkcije, se vrnemo na naslednjo izjavo v glavnem programu.

3. korak: Dodajte zamudo pri zasedeni zanki

V razdelku Izjave kode dodajte konstanto, da olajšate spreminjanje želenega časa:

; vse besede za podpičjem (';') začnejo komentar.

; koda v tem delu dodeli ime vrednosti.; lahko bi uporabili tudi '.equ', vendar so nekoliko drugačni.; '.equ' (mislim) ni mogoče spremeniti, medtem ko '.set' pomeni, da lahko; pozneje v kodi spremenite vrednost 'DLYCNT', če želite.; 'DLYCNT' bo uporabljen kot vrednost odštevanja v podprogramu zakasnitve. DLYCNT. Nastavite 0x30000

Dodajte novo funkcijo zakasnitve:

zakasnitev:.asmfunc; začetek podprograma ali funkcije 'zakasnitev'.

MOV R5, #DLYCNT; obremenitveni register procesorja R5 z vrednostjo, dodeljeno 'DLYCNT'. dlyloop; to označuje začetek zakasnitvene zanke. sestavljalec določi naslov. SUB R5, #0x1; od trenutne vrednosti odštejte 1 v registru jedra procesorja R5. CMP R5, #0x0; primerjajte trenutno vrednost v R5 z 0. BGT dlyloop; če je vrednost v R5 večja 0, označite (naslov) 'dlyloop'. BX LR; če smo prišli sem, pomeni, da je bila vrednost R5 0. vrnitev iz podprograma..endasmfunc; označuje konec podprograma.

Nato v glavnem telesu znotraj glavne zanke prikličite ali pokličite to funkcijo zakasnitve:

; to je fragment kode, glavnega telesa ali glavne funkcije (glej datoteko 'main.asm').

; to je zanka v "main" in prikazuje, kako kličemo ali uporabljamo to novo funkcijo "delay".; "#REDON" in "#GRNON" sta tudi deklaraciji (konstanti) (glej vrh "main.asm").; so le enostaven način za nastavitev določene barve LED RGB. zanka MOV R0, #REDON; Rdeča - nastavite jedrski procesorski register R0 z vrednostjo, dodeljeno 'REDON'. STRB R0, [R4]; jedrni register R4 je bil prej nastavljen z izhodnim naslovom GPIO.; napišite, kar je v R0, na naslov, ki ga določa R4. BL zamuda; preklopite na novo funkcijo "delay". BL ledsoff; veja na že obstoječo funkcijo 'ledsoff'. Zakasnitev BL; enako MOV R0, #GRNON; zelena - enako STRB R0, [R4]; in tako naprej. BL zamuda BL ledsoff BL zamuda

Video gre v podrobnosti.

4. korak: Standard za klic postopka arhitekture ARM (AAPCS)

Verjetno je pravi čas, da nekaj predstavite. To je konvencija o skupščinskem jeziku. Znan tudi kot standard za klic postopkov za arhitekturo ARM.

To je veliko, vendar je to le standard. To nas ne ovira pri učenju programiranja montaže in del tega standarda lahko sprejmemo, ko se počutimo prijetno pri nekaterih konceptih, ki se jih učimo.

V nasprotnem primeru se lahko počutimo, kot da pijemo iz velike cevi za vodo. Preveč informacij.

Temeljni registri

Ker smo se seznanili z osnovnimi registri MSP432, poskusimo zdaj sprejeti nekatere od teh standardov. Temu se bomo prilagodili, ko zapišemo naslednjo funkcijo (vklop / izklop LED).

1) R0 bi morali uporabiti kot parameter funkcije. Če želimo v funkcijo (podprogram) posredovati vrednost, moramo za to uporabiti R0.

2) Register povezav bomo uporabili za predvideni namen - vsebuje naslov, ki označuje, kam se vrniti po končani podprogramu.

Boste videli, kako jih uporabljamo.

5. korak: Funkcija s parametrom - ugnezdene funkcije

Svojo kodo lahko očistimo in količino pomnilnika, ki jo zavzame, zmanjšamo tako, da ponovljene odseke združimo v eno samo funkcijo. Edina razlika v telesu glavne zanke je, da potrebujemo parameter, da lahko podamo različne barve, ki jih želimo videti LED RGB.

Za podrobnosti si oglejte video. (se opravičujem za dolžino)

Korak 6: Vhod GPIO - Dodajte stikala

Naj bo zanimivo. Čas je, da v naš montažni program dodamo nekaj stikal.

Ta Instructable ima slike, ki prikazujejo, kako sta stikala na vozilu povezana z MSP432.

V bistvu: Stikalo 1 (SW1 ali S1) je priključeno na P1.1, stikalo 2 (SW2 ali S2) pa na P1.4.

Zaradi tega so stvari nekoliko zanimive ne le zato, ker imamo opravka z vhodi namesto z izhodi, ampak tudi zato, ker ti dve stikali zasedata ali zavzemata dva bita istega bloka naslova registra, kot ena sama rdeča LED, ki je izhod.

V tem navodilu smo obravnavali preklapljanje posamezne rdeče LED, zato moramo samo dodati kodo za upravljanje stikal.

Blok naslova registra za vrata 1

Ne pozabite, da smo to obravnavali v prejšnjem Instructable, vendar moramo vključiti novo:

  • Naslov vhodnega registra porta 1 = 0x40004C00
  • Vrata 1 Izhodni naslov registra = 0x40004C02
  • Naslov registra smeri vrat 1 = 0x40004C04
  • Vhod 1 Upor omogoči register naslov = 0x40004C06
  • Vrata 1 Izberite 0 Naslov registra = 0x40004C0A
  • Vrata 1 Izberite 1 Naslov registra = 0x40004C0C

Pri uporabi vrat kot vhodov je dobro uporabiti notranje vlečne ali spustne upore MSP432.

Ker je razvojna plošča Launchpad priključila dve stikali na ozemljitev (NIZKA ob pritisku), to pomeni, da moramo uporabiti uporovne upore, da zagotovimo trdno HIGH, ko nista pritisnjena.

Potegnite navzgor / navzdol uporov

Za povezavo teh vhodov stikala z vlečnimi upori potrebujete dva različna naslova registra porta 1.

1) Z registrom za omogočanje upora 1 priključka (0x40004C06) samo označite, da želite upore (za ta dva bita), 2) in nato z izhodnim registrom vrat 1 (0x40004C02) nastavite upore kot vlečne ali navzdol. Morda se zdi zmedeno, da uporabljamo izhodni register na vhodih. Izhodni register ima skoraj dvojni namen.

Torej, če želite znova prikazati drug način, lahko izhodni register pošlje HIGH ali LOW na izhod (na primer eno rdečo LED) in / ali se uporablja za nastavitev vlečnih ali spustnih uporov za vhode, Ampak SAMO, če je bila ta funkcija omogočena prek registra za omogočanje uporov.

Pomembno pri zgornjem-pri pošiljanju/nastavljanju LOW ali HIGH na kateri koli izhodni bit morate istočasno vzdrževati stanje vlečenja/spuščanja vhodnih bitov.

(video poskuša razložiti)

Branje vhodnega bita vrat

  • Nastavite SEL0 / SEL1 za funkcionalnost GPIO
  • Register DIR nastavite kot vhod za stikalne bite, vendar kot izhod za LED (hkrati v istem bajtu)
  • Omogočite upore
  • Nastavite jih kot vlečne upore
  • Preberite vrata
  • Morda boste želeli filtrirati prebrano vrednost, da izolirate le potrebne bite (stikalo 1 in 2)

Priporočena: