Obsah:

MONTÁŽ GPIO ARM - T.I. SADA NA UČENIE ROBOTICKÉHO SYSTÉMU - LAB 6: 3 kroky
MONTÁŽ GPIO ARM - T.I. SADA NA UČENIE ROBOTICKÉHO SYSTÉMU - LAB 6: 3 kroky

Video: MONTÁŽ GPIO ARM - T.I. SADA NA UČENIE ROBOTICKÉHO SYSTÉMU - LAB 6: 3 kroky

Video: MONTÁŽ GPIO ARM - T.I. SADA NA UČENIE ROBOTICKÉHO SYSTÉMU - LAB 6: 3 kroky
Video: BTT Manta M8P v2 - Basics with CB1 v2.2 2024, Júl
Anonim
MONTÁŽ GPIO ARM - T. I. SADA NA UČENIE ROBOTICKÉHO SYSTÉMU - LAB 6
MONTÁŽ GPIO ARM - T. I. SADA NA UČENIE ROBOTICKÉHO SYSTÉMU - LAB 6

Ahoj, V predchádzajúcom návode na naučenie montáže ARM pomocou Texas Instruments TI-RSLK (používa mikrokontrolér MSP432), alias Lab 3, ak robíte T. I. Samozrejme, prešli sme niekoľko veľmi základných pokynov, ako je zápis do registra a podmienené opakovanie. Krok sme vykonali pomocou Eclipse IDE.

Malé programy, ktoré sme vykonali, nerobili interakciu s vonkajším svetom.

Nejaká nuda.

Pokúsme sa to dnes trochu zmeniť tým, že sa naučíme niečo o vstupných/výstupných portoch, konkrétne o digitálnych kolíkoch GPIO.

Stáva sa, že tento MSP432 prichádza na vývojovej doske už má dva tlačidlové prepínače, RGB LED a červenú LED, všetky sú prepojené s niektorými portami GPIO.

To znamená, že keď sa naučíme nastavovať a manipulovať s týmito kolíkmi pomocou zostavy, môžeme tieto efekty vizuálne vidieť.

Oveľa zaujímavejšie, ako len vykročiť cez debugger.

(Stále ideme na krok - toto bude naša funkcia „oneskorenia“):-D

Krok 1: Skúsme písať do / čítať z pamäte RAM

Predtým, ako skočíme na prístup k GPIO a jeho ovládanie, by sme mali urobiť malý krok.

Začnime tým, že budeme čítať a písať na štandardnú adresu pamäte. Z predchádzajúceho Instructable (pozri obrázky tam) vieme, že RAM začína na 0x2000 0000, takže použime túto adresu.

Presunieme údaje medzi jadrovým registrom (R0) a 0x2000 0000.

Začneme základnou štruktúrou súborov alebo obsahom montážneho programu. Pozrite si tento návod na vytvorenie montážneho projektu pomocou TI's Code Composer Studio (CCS) a niektorých ukážkových projektov.

. palec

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (náš kód pôjde sem); ------------------------------------------ ---------------------------------------.endasmfunc.end

Chcem pridať niečo nové do hornej časti, ak existujú nejaké vyhlásenia (smernice). Neskôr to bude jasnejšie.

ACONST.sada 0x20000000; použijeme to ďalej (je to konštanta)

; „0x“samozrejme označuje hexadecimálnu hodnotu.

Takže náš počiatočný obsah súboru teraz vyzerá takto:

. palec

.text.align 2 ACONST.set 0x20000000; použijeme to ďalej (je to konštanta); „0x“samozrejme označuje hexadecimálnu hodnotu..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (náš kód pôjde sem); ------------------------------------------ ---------------------------------------.endasmfunc.end

Teraz, keď máme vyššie uvedené, pridajme kód medzi prerušované čiary.

Začneme zápisom do pamäte RAM. Najprv vytvoríme dátový vzor, hodnotu, ktorú budeme zapisovať do pamäte RAM. Na stanovenie tejto hodnoty alebo údajov používame kmeňový register.

Poznámka: pamätajte na to, že v kóde každý riadok s bodkočiarkou (';') znamená, že je to iba komentár za bodkočiarkou.

;-----------------------------------------------------------------------------------------------

; PÍSANIE; ------------------------------------------------ ---------------------------------------------- MOV R0, #0x55; register jadra R0 bude obsahovať údaje, ktoré chceme zapísať do umiestnenia RAM.; „0x“samozrejme označuje hexadecimálnu hodnotu.

Ďalej sa pozrime na vyhlásenia, ktoré NEPRACUJÚ.

; MOV MOV nie je možné použiť na zápis údajov do pamäte RAM.

; MOV je len pre okamžité údaje do registra; alebo z jedného registra do druhého; tj. MOV R1, R0.; STR musí používať STR.; STR R0, = ACONST; Zlý výraz vo výraze („=“); STR R0, 0x20000000; Nelegálny režim adresovania pre inštrukcie v obchode; STR R0, ACONST; Nelegálny režim adresovania pre inštrukcie z obchodu

Bez prílišného vysvetľovania sme sa pokúsili použiť vyššie uvedenú „ACONST“. V zásade je to záložný alebo konštantný namiesto použitia doslovnej hodnoty, ako je 0x20000000.

Pomocou vyššie uvedeného sa nám nepodarilo zapisovať na zápis do pamäte RAM. Skúsme niečo iné.

; zdá sa, že musíme použiť iný register obsahujúci umiestnenie RAM v

; aby bolo možné uložiť do tohto umiestnenia RAM MOV R1, #0x20000000; nastavte umiestnenie RAM (nie jeho obsah, ale umiestnenie) do R1.; „0x“samozrejme označuje hexadecimálnu hodnotu. STR R0, [R1]; pomocou R1 napíšte, čo je v R0 (0x55) do RAM (0x20000000).; používame ďalší register (R1), ktorý má adresu umiestnenia RAM; aby ste mohli zapisovať DO TOHO umiestnenia RAM.

Ďalší spôsob, ako vykonať vyššie uvedené, ale namiesto hodnoty doslovnej adresy použiť „ACONST“:

; zopakujme vyššie, ale namiesto doslovnej hodnoty umiestnenia pamäte RAM použijeme symbol.

; chceme použiť „ACONST“ako záložný zdroj pre 0x20000000.; stále musíme urobiť '#' na označenie bezprostrednej hodnoty; takže (pozri hore) sme museli použiť smernicu '.set'.; aby sme to dokázali, zmeňme dátový vzor v R0. MOV R0, #0xAA; ok, sme pripravení zapisovať do RAM pomocou symbolu namiesto hodnoty literálnej adresy MOV R1, #ACONST STR R0, [R1]

Video ide do ďalších podrobností a taktiež prechádza čítaním z pamäte.

Môžete si tiež pozrieť priložený zdrojový súbor.asm.

Krok 2: Niektoré základné informácie o porte

Image
Image
Niektoré základné informácie o porte
Niektoré základné informácie o porte
Niektoré základné informácie o porte
Niektoré základné informácie o porte

Teraz, keď máme dobrý nápad, ako písať / čítať z pamäte RAM, nám to pomôže lepšie porozumieť tomu, ako ovládať a používať kolík GPIO

Ako teda interagujeme s kolíkmi GPIO? Z nášho predchádzajúceho pohľadu na tento mikrokontrolér a jeho pokyny pre ARM vieme, ako sa vysporiadať s jeho vnútornými registrami a vieme, ako interagovať s adresami pamäte (RAM). Ale GPIO piny?

Stáva sa, že tieto piny sú mapované do pamäte, takže s nimi môžeme zaobchádzať podobne ako s pamäťovými adresami.

To znamená, že musíme vedieť, aké sú tieto adresy.

Nasledujú počiatočné adresy portov. Mimochodom, pre MSP432 je „port“zbierka pinov, a nie iba jeden pin. Ak poznáte Raspberry Pi, verím, že je to iné ako tu.

Modré kruhy na obrázku vyššie ukazujú nápis na doske pre dva prepínače a diódy LED. Modré čiary ukazujú na skutočné LED diódy. Nebudeme sa musieť dotýkať prepojok hlavičky.

Porty, ktorými sa zaoberáme, som nižšie urobil tučným písmom.

  • GPIO P1: 0x4000 4C00 + 0 (párne adresy)
  • GPIO P2: 0x4000 4C00 + 1 (nepárne adresy)
  • GPIO P3: 0x4000 4C00 + 20 (párne adresy)
  • GPIO P4: 0x4000 4C00 + 21 (nepárne adresy)
  • GPIO P5: 0x4000 4C00 + 40 (párne adresy)
  • GPIO P6: 0x4000 4C00 + 41 (nepárne adresy)
  • GPIO P7: 0x4000 4C00 + 60 (párne adresy)
  • GPIO P8: 0x4000 4C00 + 61 (nepárne adresy)
  • GPIO P9: 0x4000 4C00 + 80 (párne adresy)
  • GPIO P10: 0x4000 4C00 + 81 (nepárne adresy)

Ešte sme neskončili. Potrebujeme viac informácií.

Na ovládanie portu potrebujeme niekoľko adries. Preto vo vyššie uvedenom zozname vidíme „párne adresy“alebo „nepárne adresy“.

Bloky adries I/O registrácie

Budeme potrebovať ďalšie adresy, ako napríklad:

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

A možno budeme potrebovať ďalších.

Ok, teraz poznáme rozsah adries registrov GPIO na ovládanie jednej červenej LED.

Veľmi dôležitá poznámka: Každý I/O port na doske MSP432 LaunchPad je súborom niekoľkých (spravidla 8) pinov alebo liniek a každý je možné individuálne nastaviť ako vstup alebo výstup.

To napríklad znamená, že ak nastavujete hodnoty pre „adresu smerového registra portu 1“, musíte sa zaoberať tým, ktoré bity (alebo bity) na danej adrese nastavujete alebo meníte. Viac o tom neskôr.

Sekvencia programovania portov GPIO

Nakoniec kus, ktorý potrebujeme, je postup alebo algoritmus na ovládanie LED diódy.

Jednorazová inicializácia:

  • Nakonfigurujte P1.0 (P1SEL1REG: Register P1SEL0REG) <--- 0x00, 0x00 pre normálnu funkciu GPIO.
  • Nastavte bit smerového registra 1 P1DIRREG ako výstup alebo HIGH.

Slučka:

Zapíšte červenú diódu zapisovaním HIGH do bitu 0 registra P1OUTREG

  • Zavolajte funkciu oneskorenia
  • Zapísaním LOW do bitu 0 registra P1OUTREG vypnete červenú diódu LED
  • Zavolajte funkciu oneskorenia
  • Opakujte slučku

Ktorá vstupno -výstupná funkcia (nakonfigurujte SEL0 a SEL1)

Mnoho pinov na LaunchPade má viacnásobné použitie. Ten istý pin môže byť napríklad štandardný digitálny GPIO alebo môže byť použitý aj v sériovej komunikácii UART alebo I2C.

Aby ste pre tento pin mohli používať akúkoľvek konkrétnu funkciu, musíte ju vybrať. Musíte nakonfigurovať funkciu kolíka.

K tomuto kroku je obrázok vyššie, ktorý sa pokúša vysvetliť tento koncept vo vizuálnej forme.

Adresy SEL0 a SEL1 tvoria kombináciu párov, ktorá slúži ako nejaký druh výberu funkcie / vlastnosti.

Na naše účely chceme štandardné digitálne GPIO pre bit 0. To znamená, že potrebujeme, aby bit 0 bol SEL0 a SEL1 LOW.

Sekvencia programovania portov (opäť)

1. Napíšte 0x00 do registra P1 SEL 0 (adresa 0x40004C0A). Tým sa nastaví LOW pre bit 0

2. Napíšte 0x00 do registra P1 SEL 1 (adresa 0x40004C0C). Toto nastaví LOW pre bit 0, nastavenie pre GPIO.

3. Napíšte 0x01 do registra P1 DIR (adresa 0x40004C04). Tým sa nastaví HIGH pre bit 0, čo znamená VÝSTUP.

4. Zapnite diódu LED zapísaním registra výstupov 0x01 až P1 (adresa 0x40004C02)

5. Vykonajte určité oneskorenie (alebo ho pri ladení urobte iba jedným krokom)

6. Vypnite LED zapisovaním registra 0x00 do P1 VÝSTUPU (adresa 0x40004C02)

7. Vykonajte určité oneskorenie (alebo ho pri ladení urobte iba jedným krokom)

8. Zopakujte kroky 4 až 7.

Súvisiace video k tomuto kroku nás prevedie celým procesom v živom ukážkovom programe, v ktorom krok za krokom prejdeme všetky montážne pokyny a predvedieme ich a ukážeme činnosť LED. Ospravedlňte prosím dĺžku videa.

Krok 3: Zachytili ste jednu chybu vo videu?

Vo videu, ktoré prechádza celým procesom programovania a rozsvietenia diódy LED, bol v hlavnej slučke ďalší krok, ktorý bolo možné presunúť až na jednorazovú inicializáciu.

Ďakujeme, že ste si našli čas na prečítanie tohto Pokynu.

Ďalší rozvedie o to, čo sme tu začali.

Odporúča: