Kazalo:

SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SISTEMA ROBOTIK - LAB 6: 3 koraki
SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SISTEMA ROBOTIK - LAB 6: 3 koraki

Video: SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SISTEMA ROBOTIK - LAB 6: 3 koraki

Video: SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SISTEMA ROBOTIK - LAB 6: 3 koraki
Video: ESP32 Turorial 1 - Introduction to SunFounder's ESP32 IoT Learnig kit Software and Arduino IDE 2024, November
Anonim
SKLOP GPIO ARM - T. I. KOMPLET ZA UČENJE SISTEMA ROBOTIK - LAB 6
SKLOP GPIO ARM - T. I. KOMPLET ZA UČENJE SISTEMA ROBOTIK - LAB 6

Zdravo, V prejšnjem navodilu o učenju sklopa ARM z uporabo Texas Instruments TI-RSLK (uporablja mikrokrmilnik MSP432), imenovano Lab 3, če izvajate T. I. seveda smo preučili nekaj zelo osnovnih navodil, na primer pisanje v register in pogojno zanko. Z izvedbo Eclipse IDE smo stopili skozi izvedbo.

Najstniški programi, ki smo jih izvajali, niso vplivali na zunanji svet.

Nekako dolgočasno.

Poskusimo to danes nekoliko spremeniti tako, da se malo naučimo o vhodno/izhodnih vratih, natančneje o digitalnih zatičih GPIO.

Zgodi se, da ima ta MSP432 na razvojni plošči že dve stikalni tipki, RGB LED in rdečo LED, ki sta povezani z nekaterimi vrati GPIO.

To pomeni, da lahko te učinke vizualno vidimo, ko se naučimo nastavljati in upravljati te zatiče prek montaže.

Veliko bolj zanimivo, kot če bi le stopili skozi iskalnik napak.

(Še vedno bomo korak - to bo naša funkcija "zamude"):-D

1. korak: Poskusimo pisati v / brati iz RAM -a

Preden se lotimo dostopa in nadzora GPIO, bi morali narediti majhen korak.

Začnimo s samo branjem in pisanjem na standardni pomnilniški naslov. Iz prejšnjih Instructable (glej slike tam) vemo, da se RAM začne pri 0x2000 0000, zato uporabimo ta naslov.

Podatke bomo premikali med osnovnim registrom (R0) in 0x2000 0000.

Začnemo z osnovno datotečno strukturo ali vsebino montažnega programa. Za ustvarjanje montažnega projekta s pomočjo TI Code Composer Studio (CCS) in nekaterih vzorčnih projektov si oglejte ta Instructable.

.palec

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (naša koda bo tukaj); ------------------------------------------ ---------------------------------------.endasmfunc.end

V zgornji razdelek želim dodati nekaj novega, če obstaja nekaj deklaracij (direktiv). Kasneje bo postalo bolj jasno.

ACONST.nabor 0x20000000; to bomo uporabili še navzdol (to je konstanta)

; očitno '0x' pomeni, da sledi šestnajstiška vrednost.

Naša vsebina začetne datoteke je zdaj videti tako:

.palec

.text.align 2 ACONST.set 0x20000000; to bomo uporabili še navzdol (to je konstanta); očitno '0x' pomeni, da sledi šestnajstiška vrednost..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (naša koda bo tukaj); ------------------------------------------ ---------------------------------------.endasmfunc.end

Zdaj, ko imamo zgoraj navedeno, dodajmo kodo med črtkane vrstice.

Začnemo s pisanjem na mesto RAM. Najprej bomo določili podatkovni vzorec, vrednost, ki jo bomo zapisali v RAM. Za določitev te vrednosti ali podatkov uporabljamo osnovni register.

Opomba: ne pozabite, da v kodi vsaka vrstica s podpičjem (';') pomeni, da je vse komentar po tem podpičju.

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

; PISANJE; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; jedrni register R0 bo vseboval podatke, ki jih želimo zapisati na lokacijo RAM -a.; očitno '0x' pomeni, da sledi šestnajstiška vrednost.

Nato si oglejmo izjave, da DONT deluje.

; MOV MOV ni uporaben za zapisovanje podatkov v lokacijo RAM.

; MOV je samo za takojšnje podatke v register,; ali iz enega registra v drugega; MOV R1, R0.; STR mora uporabljati STR.; STR R0, = ACONST; Slab izraz v izrazu ('='); STR R0, 0x20000000; Način nezakonitega naslavljanja za navodila v trgovini; STR R0, PROTI; Način nezakonitega naslavljanja za navodila v trgovini

Ne da bi preveč razlagali, smo poskušali uporabiti zgornji "ACONST". V bistvu je samostojna ali konstantna, namesto da bi uporabljala dobesedno vrednost, kot je 0x20000000.

Z zgoraj navedenim nismo mogli pisati za zapis na lokacijo RAM. Poskusimo še kaj.

; Zdi se, da moramo uporabiti drug register, ki vsebuje lokacijo RAM v

; da shranite na to lokacijo RAM -a MOV R1, #0x20000000; lokacijo RAM -a (ne njegove vsebine, ampak lokacije) nastavite v R1.; očitno '0x' pomeni, da sledi šestnajstiška vrednost. STR R0, [R1]; zapišite, kar je v R0 (0x55) v RAM (0x20000000) z uporabo R1.; uporabljamo drug register (R1), ki ima naslov lokacije RAM; za zapis na to lokacijo RAM -a.

Drug način za zgoraj navedeno, vendar namesto vrednosti dobesednega naslova uporabite "ACONST":

; naredimo še enkrat zgoraj, vendar uporabimo simbol namesto dobesedne vrednosti lokacije RAM -a.

; želimo uporabiti "ACONST" kot stojalo za 0x20000000.; še vedno moramo narediti '#', da označimo takojšnjo vrednost,; torej (glej na vrhu) smo morali uporabiti direktivo '.set'.; da bi to dokazali, spremenimo podatkovni vzorec v R0. MOV R0, #0xAA; ok, pripravljeni smo za pisanje v RAM z uporabo simbola namesto dobesedne vrednosti naslova MOV R1, #ACONST STR R0, [R1]

Videoposnetek gre v več podrobnosti, pa tudi v branje s pomnilniškega mesta.

Ogledate si lahko tudi priloženo izvorno datoteko.asm.

Korak: Nekaj osnovnih informacij o vratih

Image
Image
Nekaj osnovnih informacij o vratih
Nekaj osnovnih informacij o vratih
Nekaj osnovnih informacij o vratih
Nekaj osnovnih informacij o vratih

Zdaj, ko imamo dobro idejo, kako pisati / brati z RAM -a, nam bo to pomagalo bolje razumeti, kako upravljati in uporabljati pin GPIO

Kako torej delujemo z zatiči GPIO? Iz prejšnjega pogleda na ta mikrokrmilnik in navodila za ARM vemo, kako ravnati z njegovimi notranjimi registri in vemo, kako komunicirati z naslovi pomnilnika (RAM). Toda zatiči GPIO?

Zgodi se, da so ti zatiči preslikani v pomnilnik, zato jih lahko obravnavamo enako kot pomnilniške naslove.

To pomeni, da moramo vedeti, kateri so ti naslovi.

Spodaj so začetni naslovi vrat. Mimogrede, za MSP432 so "vrata" zbirka zatičev in ne samo en zatič. Če poznate Raspberry Pi, menim, da je to drugače kot tukaj.

Modri krogi na zgornji sliki prikazujejo napis na obeh stikalih in LED. Modre črte kažejo na dejanske LED. Ni nam treba dotikati skakalcev glave.

Spodaj sem krepko označil pristanišča, ki nas zanimajo.

  • GPIO P1: 0x4000 4C00 + 0 (parni naslovi)
  • GPIO P2: 0x4000 4C00 + 1 (lihi naslovi)
  • GPIO P3: 0x4000 4C00 + 20 (parni naslovi)
  • GPIO P4: 0x4000 4C00 + 21 (lihi naslovi)
  • GPIO P5: 0x4000 4C00 + 40 (parni naslovi)
  • GPIO P6: 0x4000 4C00 + 41 (lihi naslovi)
  • GPIO P7: 0x4000 4C00 + 60 (parni naslovi)
  • GPIO P8: 0x4000 4C00 + 61 (lihi naslovi)
  • GPIO P9: 0x4000 4C00 + 80 (parni naslovi)
  • GPIO P10: 0x4000 4C00 + 81 (lihi naslovi)

Nismo še končali. Potrebujemo več informacij.

Za nadzor vrat potrebujemo več naslovov. Zato na zgornjem seznamu vidimo "parne naslove" ali "čudne naslove".

Bloki naslovov I/O registra

Potrebovali bomo druge naslove, na primer:

  • Naslov vhodnega registra porta 1 = 0x40004C00
  • Vrata 1 Izhodni naslov registra = 0x40004C02
  • Naslov registra smeri vrat 1 = 0x40004C04
  • Vrata 1 Izberite 0 Naslov registra = 0x40004C0A
  • Vrata 1 Izberite 1 Naslov registra = 0x40004C0C

In morda bomo potrebovali druge.

V redu, zdaj poznamo obseg naslovov registra GPIO za nadzor ene same rdeče LED.

Zelo pomembna opomba: Vsa V/I vrata na plošči LaunchPad MSP432 so zbirka več (običajno 8) zatičev ali linij, vsaka pa je lahko individualno nastavljena kot vhod ali izhod.

To na primer pomeni, da se morate, če nastavljate vrednosti za "naslov v registru smeri porta 1", vprašati, kateri bit (ali bite) nastavljate ali spreminjate na tem naslovu. Več o tem kasneje.

Zaporedje programiranja vrat GPIO

Končno del, ki ga potrebujemo, je postopek ali algoritem za uporabo za nadzor LED.

Enkratna inicializacija:

  • Konfigurirajte P1.0 (P1SEL1REG: P1SEL0REG Register) <--- 0x00, 0x00 za normalno delovanje GPIO.
  • Nastavite bit registra 1 smeri P1DIRREG kot izhod ali HIGH.

Zanka:

Vnesite HIGH v bit 0 registra P1OUTREG, da vklopite rdečo LED

  • Pokličite funkcijo zakasnitve
  • Napišite LOW v bit 0 registra P1OUTREG, da izklopite rdečo LED
  • Pokličite funkcijo zakasnitve
  • Ponovi zanko

Katera vhodno / izhodna funkcija (konfigurirajte SEL0 in SEL1)

Mnogi zatiči na LaunchPadu imajo več uporab. Na primer, isti pin je lahko standardni digitalni GPIO ali pa se lahko uporablja tudi v serijski komunikaciji UART ali I2C.

Če želite uporabiti katero koli posebno funkcijo za ta pin, morate to funkcijo izbrati. Morate konfigurirati funkcijo pin.

Zgoraj je slika tega koraka, ki poskuša razložiti ta koncept v vizualni obliki.

Naslova SEL0 in SEL1 tvorita parno kombinacijo, ki deluje kot nekakšna izbira funkcije / funkcije.

Za naše namene želimo standardni digitalni GPIO za bit 0. To pomeni, da potrebujemo bit 0, da sta SEL0 in SEL1 NIZKA.

Zaporedje programiranja vrat (spet)

1. Napišite 0x00 v P1 SEL 0 Register (naslov 0x40004C0A). S tem nastavite LOW za bit 0

2. Vpišite 0x00 v P1 SEL 1 Register (naslov 0x40004C0C). S tem nastavite LOW za bit 0, nastavitev za GPIO.

3. Zapišite 0x01 v register P1 DIR (naslov 0x40004C04). S tem nastavite HIGH za bit 0, kar pomeni OUTPUT.

4. Vklopite LED z zapisom 0x01 v register P1 OUTPUT (naslov 0x40004C02)

5. Naredite nekakšno zamudo (ali samo enostopenjsko odpravljanje napak)

6. Izklopite LED z zapisom 0x00 v register P1 OUTPUT (naslov 0x40004C02)

7. Naredite nekakšno zamudo (ali samo enostopenjsko odpravljanje napak)

8. Ponovite korake 4 do 7.

Povezani videoposnetek za ta korak nas popelje skozi celoten postopek v predstavitvi v živo, saj se skozi vsa navodila za montažo enkrat pogovarjamo in se pogovarjamo ter prikažemo dejanje LED. Oprostite dolžino videoposnetka.

3. korak: Ali ste v videu ujeli eno napako?

V videoposnetku, ki se sprehaja po celotnem procesu programiranja in prižiganja LED, je bil v glavni zanki dodaten korak, ki bi ga lahko premaknili do enkratne inicializacije.

Hvala, ker ste si vzeli čas za pregled tega navodila.

Naslednja razlaga, kaj smo tukaj začeli.

Priporočena: