Obsah:

ČASŤ 2 - MONTÁŽ GPIO ARM - RGB - FUNKČNÉ HOVORY - Prepínače: 6 krokov
ČASŤ 2 - MONTÁŽ GPIO ARM - RGB - FUNKČNÉ HOVORY - Prepínače: 6 krokov

Video: ČASŤ 2 - MONTÁŽ GPIO ARM - RGB - FUNKČNÉ HOVORY - Prepínače: 6 krokov

Video: ČASŤ 2 - MONTÁŽ GPIO ARM - RGB - FUNKČNÉ HOVORY - Prepínače: 6 krokov
Video: BTT Manta M8P v2 - Basics with CB1 v2.2 2024, Júl
Anonim
ČASŤ 2 - MONTÁŽ GPIO ARM - RGB - FUNKČNÉ HOVORY - Prepínače
ČASŤ 2 - MONTÁŽ GPIO ARM - RGB - FUNKČNÉ HOVORY - Prepínače

V časti 1 sme sa dozvedeli, ako prepnúť jednu červenú diódu LED na vývojovej doske MSP432 LaunchPad od spoločnosti Texas Instruments pomocou zostavy namiesto C / C ++.

V tomto návode urobíme niečo podobné - ovládame RGB LED, ktorá je tiež na tej istej doske.

Dúfame, že na tejto ceste budeme rozširovať svoje znalosti o montáži ARM, a nielen sa zabávať pri rozsvietení niektorých LED diód.

Krok 1: Skočme rovno dovnútra

Skutočne, prvé video hovorí za všetko. Nie je viac čo dodať.

Hlavným bodom je priniesť domov myšlienku, že každý I/O port na MSP432 pozostáva z bloku „registračných“adries, ktoré zase pozostávajú z niekoľkých bitov.

Ďalej sú bity zoskupené ortogonálne. To znamená, že bit 0 každej adresy registra sa vzťahuje na rovnaký externý vstupno -výstupný pin.

Zopakovali sme myšlienku, že na to, aby ste urobili niečo čo len s jedným bitom alebo pinom, potrebuje tento port niekoľko registračných adries.

Ale že v tomto prípade, pretože máme do činenia s RGB LED, musíme sa zaoberať tromi bitmi pre každú adresu registra.

Zdôraznili sme, že potrebujeme niekoľko registrov: register DIR, register SEL0, register SEL1 a register VÝSTUP. A zakaždým tri bity.

Krok 2: Vylepšenie kódu - pridanie funkcie

Image
Image

Ako ste videli vo vyššie uvedenom kroku, hlavná programová slučka mala veľa opakovaného kódu, konkrétne keď vypneme LED diódy.

Môžeme teda do programu pridať funkciu. Stále musíme túto funkciu volať vždy, keď chceme vypnúť LED diódy, ale spôsobí to zrútenie časti kódu do jedného príkazu.

Keby bol náš kód vypnutia LED viac zapojený do mnohých ďalších pokynov, bolo by to skutočne šetrič pamäte.

Súčasťou vstavaného programovania a mikrořadičov je oveľa lepšie si uvedomiť veľkosť programu.

Video vysvetľuje.

V zásade do nášho hlavného kódu pridáme vetviaci príkaz a máme ďalší blok kódu, ktorým je funkcia, do ktorej sa vetvíme. A potom, keď sme hotoví, alebo na konci funkcie, vetvíme sa späť k ďalšiemu príkazu v hlavnom programe.

Krok 3: Pridajte oneskorenie zaneprázdnenej slučky

V časti Deklarácie kódu pridajte konštantu, aby bolo ľahké twekovať pre požadované načasovanie:

; akékoľvek slová za bodkočiarkou (';') začínajú komentár.

; kód v tejto časti priradí hodnote hodnotu.; mohli ste použiť aj „.equ“, ale sú mierne odlišné.; „.equ“(myslím) nemožno zmeniť, zatiaľ čo „.set“znamená, že môžete; ak chcete, zmeňte hodnotu „DLYCNT“neskôr v kóde.; „DLYCNT“sa použije ako hodnota odpočítavania v podprograme oneskorenia. DLYCNT.set 0x30000

Pridajte novú funkciu oneskorenia:

oneskorenie:.asmfunc; začiatok podprogramu alebo funkcie „oneskorenie“.

MOV R5, #DLYCNT; načítajte register procesora jadra R5 s hodnotou priradenou k „DLYCNT“. dlyloop; to znamená začiatok oneskorovacej slučky. assembler určuje adresu. SUB R5, #0x1; odpočítajte 1 od aktuálnej hodnoty v registri jadra CPU R5. CMP R5, #0x0; porovnajte aktuálnu hodnotu v R5 s 0. BGT dlyloop; pobočka, ak je hodnota v R5 väčšia 0, na označenie (adresa) „dlyloop“. BX LR; ak sme sa dostali sem, znamená to, že hodnota R5 bola 0. návrat z podprogramu..endasmfunc; označuje koniec podprogramu.

Potom v hlavnom tele v rámci hlavnej slučky vyvolajte alebo zavolajte funkciu oneskorenia:

; toto je fragment kódu hlavného tela alebo hlavnej funkcie (pozri súbor 'main.asm').

; toto je slučka v „hlavnom“a ukazuje, ako túto novú funkciu „oneskorenia“nazývame alebo používame.; '#REDON' a '#GRNON' sú tiež deklarácie (konštanty) (pozri začiatok 'main.asm').; predstavujú jednoduchý spôsob nastavenia určenej farby RGB LED. slučka MOV R0, #REDON; Červená - nastavený register jadra CPU R0 s hodnotou priradenou k „REDON“. STRB R0, [R4]; register jadra R4 bol predtým nastavený s výstupnou adresou GPIO.; napíšte, čo je v R0, na adresu uvedenú v R4. BL oneskorenie; vetva na novú funkciu „oneskorenie“. BL ledsoff; vetva k už existujúcej funkcii „ledsoff“. Oneskorenie BL; rovnako MOV R0, #GRNON; Zelená - rovnako STRB R0, [R4]; a tak ďalej. BL oneskorenie BL ledsoff BL oneskorenie

Video ide do detailov.

Krok 4: ARM Architecture Call Call Standard (AAPCS)

Pravdepodobne je vhodný čas niečo predstaviť. Je to konvencia v montážnom jazyku. Tiež známy ako štandard volania procedúr pre architektúru ARM.

Je toho veľa, ale je to len štandard. Nezabráni nám to naučiť sa programovať zostavy a časti tohto štandardu si môžeme osvojiť za pochodu, akonáhle sa budeme cítiť príjemne s niektorými konceptmi, ktoré sa učíme.

V opačnom prípade by sme mohli mať pocit, že pijeme z obrovskej vodnej hadice. Príliš veľa informácií.

Základné registre

Keď sme sa oboznámili s hlavnými registrami MSP432, skúsme teraz prijať niektoré z týchto štandardov. Tomu sa prispôsobíme, keď napíšeme nasledujúcu funkciu (zapnutie / vypnutie LED).

1) Predpokladá sa, že ako parameter funkcie použijeme R0. Ak chceme do funkcie (podprogram) preniesť hodnotu, mali by sme na to použiť R0.

2) Register odkazov máme používať na určený účel - obsahuje adresu, ktorá naznačuje, kam sa vrátiť po dokončení podprogramu.

Uvidíte, ako ich uplatníme.

Krok 5: Funkcia s parametrom - vnorené funkcie

Náš kód môžeme vyčistiť a znížiť množstvo pamäte, ktorú zaberá, kombinovaním opakovaných sekcií do jednej funkcie. Jediným rozdielom v tele hlavnej slučky je to, že potrebujeme parameter, aby sme mohli odovzdať rôzne rôzne farby RGB LED, ktoré chceme vidieť.

Podrobnosti nájdete vo videu. (ospravedlňujem sa za dĺžku)

Krok 6: Vstup GPIO - pridajte prepínače

Urobme to zaujímavejším. Je načase pridať do nášho programu montáže nejaké prepínače.

Tento návod obsahuje obrázky, ktoré ukazujú, ako sú dva integrované prepínače pripojené k MSP432.

V zásade: Prepínač 1 (SW1 alebo S1) je pripojený k P1.1 a spínač 2 (SW2 alebo S2) je pripojený k P1.4.

Vďaka tomu sú veci trochu zaujímavé nielen preto, že sa zaoberáme vstupmi namiesto výstupov, ale aj tým, že tieto dva prepínače zaberajú alebo zaberajú dva bity rovnakého bloku adries registrov, ako aj jedna červená LED dióda, ktorá je výstupom.

V tomto návode sme sa zaoberali prepínaním jednej červenej LED, takže stačí pridať kód na ovládanie prepínačov.

Port 1 Register Address Block

Nezabudnite, že sme sa nimi zaoberali v predchádzajúcom Instructable, ale musíme zahrnúť nový:

  • Port 1 Vstupná registračná adresa = 0x40004C00
  • Adresa registra výstupu 1 portu = 0x40004C02
  • Port 1 Smer registrácie Adresa = 0x40004C04
  • Port 1 Resistor Enable Register address = 0x40004C06
  • Port 1 Vyberte 0 Register address = 0x40004C0A
  • Port 1 Vyberte 1 Registračná adresa = 0x40004C0C

Pri použití portov ako vstupov je dobré použiť interné výsuvné alebo sťahovacie odpory MSP432.

Pretože vývojová doska Launchpadu zapojila dva prepínače do zeme (LOW pri stlačení), znamená to, že by sme mali používať vyťahovacie odpory, aby sme sa uistili, že máme pevný VYSOKÝ, keď nie sú stlačené.

Vyťahovacie / sťahovacie odpory

Na prepojenie týchto prepínacích vstupov s výsuvnými odpormi sú potrebné dve rôzne adresy registra 1.

1) Pomocou registra umožňujúceho odpor 1 (0x40004C06) portu 1 označte, že chcete rezistory (pre tieto dva bity), 2) a potom pomocou výstupného registra Port 1 (0x40004C02) nastavte odpory buď ako pull-up alebo pull-down. Mohlo by sa zdať mätúce, že na vstupoch používame výstupný register. Výstupný register má takmer dvojaký účel.

Aby sme to mohli znova uviesť iným spôsobom, výstupný register môže buď poslať na výstup HIGH alebo LOW (napríklad jednu červenú diódu LED) a / alebo sa používa na nastavenie zdvíhacích alebo sťahovacích odporov pre vstupy., ALE IBA vtedy, ak bola táto funkcia povolená prostredníctvom registra povolení odporu.

Dôležité vo vyššie uvedenom-pri odosielaní/nastavovaní NÍZKEHO alebo VYSOKÉHO na akýkoľvek výstupný bit budete musieť súčasne udržiavať stav vyťahovania/sťahovania vstupných bitov.

(video sa pokúša vysvetliť)

Načítanie vstupného bitu portu

  • Nastavte SEL0 / SEL1 na funkčnosť GPIO
  • Nastavte register DIR ako vstup pre prepínacie bity, ale ako výstup pre LED (súčasne v rovnakom bajte)
  • Povoliť odpory
  • Nastavte ich ako výsuvné odpory
  • Prečítajte si prístav
  • Možno budete chcieť filtrovať prečítanú hodnotu, aby ste izolovali iba požadované bity (prepínač 1 a 2)

Odporúča: