Sadržaj:

SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SUSTAVA ROBOTIKE - LAB 6: 3 koraka
SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SUSTAVA ROBOTIKE - LAB 6: 3 koraka

Video: SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SUSTAVA ROBOTIKE - LAB 6: 3 koraka

Video: SKLOP GPIO ARM - T.I. KOMPLET ZA UČENJE SUSTAVA ROBOTIKE - LAB 6: 3 koraka
Video: ESP32 Tutorial 17 - Controlling Servo Motor using ESP32 and Potentiometer -ESP32 IoT Learnig kit 2024, Srpanj
Anonim
SKLOP GPIO ARM - T. I. KOMPLET ZA UČENJE SUSTAVA ROBOTIKE - LAB 6
SKLOP GPIO ARM - T. I. KOMPLET ZA UČENJE SUSTAVA ROBOTIKE - LAB 6

Zdravo, U prethodnom Instructable o učenju ARM sklopa pomoću Texas Instruments TI-RSLK (koristi mikrokontroler MSP432), zvani Lab 3 ako radite T. I. naravno, prešli smo neke vrlo osnovne upute kao što su pisanje u registar i uvjetno petlje. Prošli smo kroz izvršenje pomoću Eclipse IDE -a.

Mali programi koje smo izvodili nisu učinili ništa u interakciji s vanjskim svijetom.

Pomalo dosadno.

Pokušajmo to malo promijeniti danas tako što ćemo naučiti nešto o ulazno/izlaznim priključcima, točnije digitalnim GPIO pinovima.

Dogodilo se da ovaj MSP432 dolazi na razvojnoj ploči već ima dva prekidača s tipkama, RGB LED i crvenu LED diodu, a sve su povezane na neke GPIO portove.

To znači da dok učimo postavljati i upravljati ovim iglama putem montaže, možemo vizualno vidjeti te učinke.

Mnogo zanimljivije od samog koraka kroz debager.

(I dalje ćemo koračati - ovo će biti naša funkcija 'odgode'):-D

Korak 1: Pokušajmo pisati u / čitati iz RAM -a

Prije nego što pređemo na pristup i kontrolu GPIO -a, trebali bismo napraviti mali korak.

Počnimo samo čitanjem i pisanjem na standardnu memorijsku adresu. Iz prethodnog Instructable -a znamo (pogledajte slike tamo) da RAM počinje od 0x2000 0000, pa upotrijebimo tu adresu.

Premjestit ćemo podatke između osnovnog registra (R0) i 0x2000 0000.

Počinjemo s osnovnom strukturom datoteka ili sadržajem montažnog programa. Molimo pogledajte ovaj Instructable za izradu montažnog projekta koristeći TI -jev Code Composer Studio (CCS) i neke uzorke projekata.

.palac

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (naš kôd će ići ovdje); ------------------------------------------ ---------------------------------------.endasmfunc.kraj

Želim dodati nešto novo u gornji odjeljak, ako postoje neke deklaracije (direktive). Kasnije će to postati jasnije.

ACONST.set 0x20000000; koristit ćemo ovo dalje (to je konstanta)

; očito, '0x' označava ono što slijedi heksadecimalnu vrijednost.

Dakle, sadržaj naše početne datoteke sada izgleda ovako:

.palac

.text.align 2 ACONST.set 0x20000000; koristit ćemo ovo dalje (to je konstanta); očito, '0x' označava ono što slijedi heksadecimalnu vrijednost..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (naš kôd će ići ovdje); ------------------------------------------ ---------------------------------------.endasmfunc.kraj

Sada kada imamo gore navedeno, dodajmo kod između isprekidanih redaka.

Započinjemo pisanjem na RAM mjesto. Prvo ćemo uspostaviti obrazac podataka, vrijednost koju ćemo upisivati u RAM. Koristimo temeljni registar za utvrđivanje te vrijednosti ili podataka.

Napomena: imajte na umu da u kodu bilo koji redak koji sadrži točku s zarezom (';') znači da je sve komentar nakon te točke s zarezom.

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

; PISANJE;------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; jezgreni registar R0 sadržavat će podatke koje želimo zapisati na RAM lokaciju.; očito, '0x' označava ono što slijedi heksadecimalnu vrijednost.

Zatim, pogledajmo izjave koje DONT rade.

; MOV MOV se ne može koristiti za upisivanje podataka na RAM lokaciju.

; MOV je samo za trenutne podatke u registar,; ili iz jednog registra u drugi; tj. MOV R1, R0.; STR mora koristiti STR.; STR R0, = PROTIV; Loš izraz u izrazu ('='); STR R0, 0x20000000; Nezakonit način adresiranja za upute u trgovini; STR R0, PROTIV; Nezakonit način adresiranja za upute u trgovini

Ne objašnjavajući previše, pokušali smo upotrijebiti onaj 'ACONST' gore. U biti, to je stand-in ili konstanta umjesto korištenja doslovne vrijednosti poput 0x20000000.

Nismo mogli pisati za pisanje na RAM lokaciju koristeći gore navedeno. Pokušajmo nešto drugo.

; Čini se da moramo upotrijebiti drugi registar koji sadrži lokaciju RAM -a u

; kako biste spremili na to mjesto RAM -a MOV R1, #0x20000000; postavite mjesto RAM -a (ne njegov sadržaj, već lokaciju) u R1.; očito, '0x' označava ono što slijedi heksadecimalnu vrijednost. STR R0, [R1]; upišite ono što je u R0 (0x55) u RAM (0x20000000) pomoću R1.; koristimo drugi registar (R1) koji ima adresu lokacije RAM -a; kako biste zapisali na to mjesto RAM -a.

Drugi način za gore navedeno, ali korištenje "ACONST" umjesto doslovne vrijednosti adrese:

; ponovimo gore navedeno, ali upotrijebimo simbol umjesto doslovne vrijednosti lokacije RAM -a.

; želimo koristiti 'ACONST' kao zamjenu za 0x20000000.; još moramo učiniti '#' da označimo neposrednu vrijednost,; pa smo (vidi na vrhu) morali koristiti direktivu '.set'.; kako bismo to dokazali, promijenimo obrazac podataka u R0. MOV R0, #0xAA; u redu spremni smo za pisanje u RAM pomoću simbola umjesto doslovne vrijednosti adrese MOV R1, #ACONST STR R0, [R1]

Videozapis ide u neke detalje, kao i čitanje s memorijskog mjesta.

Također možete vidjeti priloženu izvornu.asm datoteku.

Korak 2: Neke osnovne informacije o priključku

Image
Image
Neke osnovne informacije o priključku
Neke osnovne informacije o priključku
Neke osnovne informacije o priključku
Neke osnovne informacije o priključku

Sada kada imamo dobru ideju kako pisati / čitati s RAM lokacije, to će nam pomoći da bolje razumijemo kako kontrolirati i koristiti GPIO pin

Dakle, kako komuniciramo s GPIO pinovima? Iz našeg prethodnog pogleda na ovaj mikrokontroler i njegove ARM upute, znamo kako se nositi s njegovim unutarnjim registrima, i znamo kako komunicirati s memorijskim (RAM) adresama. Ali GPIO pinovi?

Događa se da su te igle preslikane u memoriju, pa ih možemo tretirati isto kao i memorijske adrese.

To znači da moramo znati koje su to adrese.

Ispod su početne adrese porta. Usput, za MSP432 "port" je zbir pinova, a ne samo jedan pin. Ako ste upoznati s Raspberry Pi, vjerujem da se to razlikuje od situacije ovdje.

Plavi krugovi na gornjoj slici prikazuju natpis na ploči za dva prekidača i LED diode. Plave linije ukazuju na stvarne LED diode. Nećemo morati dodirivati skakače zaglavlja.

U nastavku sam podebljano označio luke koje nas zanimaju.

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

Još nismo gotovi. Trebamo više informacija.

Za kontrolu porta potrebno nam je nekoliko adresa. Zato na gornjem popisu vidimo "parne adrese" ili "neparne adrese".

Blokovi adresa I/O registra

Trebat će nam druge adrese, kao što su:

  • Port 1 Ulazna adresa registra = 0x40004C00
  • Port 1 Izlazna adresa registra = 0x40004C02
  • Luka 1 Adresa registra smjera = 0x40004C04
  • Ulaz 1 Odaberite 0 Adresa registra = 0x40004C0A
  • Ulaz 1 Odaberite 1 Adresa registra = 0x40004C0C

A drugi će nam možda trebati.

U redu, sada znamo raspon adresa GPIO registra za kontrolu jedne crvene LED diode.

Vrlo važna napomena: Svaki I/O port na MSP432 LaunchPad ploči skup je nekoliko (obično 8) pinova ili linija, a svaki se može zasebno postaviti kao ulaz ili izlaz.

To znači, na primjer, da ako postavljate vrijednosti za "Adresu registra smjera porta 1", morate se brinuti koji bit (ili bitove) postavljate ili mijenjate na toj adresi. O ovome kasnije.

Niz programiranja GPIO portova

Konačno, dio koji nam je potreban je proces ili algoritam za kontrolu LED diode.

Jednokratna inicijalizacija:

  • Konfigurirajte P1.0 (P1SEL1REG: P1SEL0REG registar) <--- 0x00, 0x00 za normalnu GPIO funkcionalnost.
  • Postavite bit smjera registra 1 smjera P1DIRREG kao izlaz ili HIGH.

Petlja:

Upišite HIGH u bit 0 registra P1OUTREG za uključivanje crvene LED diode

  • Pozovite funkciju odgode
  • Napišite LOW do bita 0 iz P1OUTREG registra kako biste isključili crvenu LED
  • Pozovite funkciju odgode
  • Ponovi petlju

Koja funkcija ulaza / izlaza (konfigurirajte SEL0 i SEL1)

Mnogi pinovi na LaunchPadu imaju višestruku upotrebu. Na primjer, isti pin može biti standardni digitalni GPIO ili se također može koristiti u UART ili I2C serijskoj komunikaciji.

Da biste koristili bilo koju određenu funkciju za taj pin, morate odabrati tu funkciju. Morate konfigurirati funkciju pin -a.

Gore postoji slika za ovaj korak koja pokušava objasniti ovaj koncept u vizualnom obliku.

Adrese SEL0 i SEL1 tvore kombinaciju parova koja djeluje kao neka vrsta odabira funkcije / značajke.

U naše svrhe želimo standardni digitalni GPIO za bit 0. To znači da nam treba bit 0 da SEL0 i SEL1 budu NISKI.

Niz programiranja portova (opet)

1. Upišite 0x00 u P1 SEL 0 Register (adresa 0x40004C0A). Ovo postavlja LOW za bit 0

2. Upišite 0x00 u P1 SEL 1 Register (adresa 0x40004C0C). Ovo postavlja LOW za bit 0, postavku za GPIO.

3. Upišite 0x01 u P1 DIR registar (adresa 0x40004C04). Ovo postavlja HIGH za bit 0, što znači OUTPUT.

4. Uključite LED upisivanjem 0x01 u P1 OUTPUT Register (adresa 0x40004C02)

5. Učinite neku vrstu odgode (ili samo jedan korak tijekom ispravljanja pogrešaka)

6. Isključite LED upisivanjem 0x00 u P1 OUTPUT Register (adresa 0x40004C02)

7. Učinite neku vrstu odgode (ili samo jedan korak tijekom ispravljanja pogrešaka)

8. Ponovite korake 4 do 7.

Povezani videozapis za ovaj korak vodi nas kroz cijeli proces u demo verziji uživo, dok koračamo kroz svaki korak i razgovaramo kroz sve upute za sastavljanje, te prikazujemo LED radnju. Oprostite zbog duljine videozapisa.

Korak 3: Jeste li u videu uhvatili jednu manu?

U videu koji prolazi kroz cijeli proces programiranja i paljenja LED diode, došlo je do dodatnog koraka u glavnoj petlji, koji se mogao premjestiti na jednokratnu inicijalizaciju.

Hvala vam što ste odvojili vrijeme da prođete kroz ovaj Instructable.

Sljedeći proširuje ono što smo ovdje započeli.

Preporučeni: