Sadržaj:

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

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

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

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

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

Nekako dosadno.

Pokušajmo to malo promijeniti danas tako što ćemo naučiti nešto o ulazno/izlaznim portovima, konkretno, 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, koji su svi povezani na neke GPIO portove.

To znači da dok učimo postavljanje i rukovanje ovim pinovima putem sklapanja, možemo vizualno vidjeti te efekte.

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. Znamo iz prethodnog Instructable -a (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 programa za sastavljanje. Molimo pogledajte ovaj Instructable za kreiranje montažnog projekta koristeći TI Code Composer Studio (CCS) i neke uzorke projekata.

.thumb

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

Ž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:

.thumb

.text.align 2 ACONST.set 0x20000000; ovo ćemo koristiti 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.end

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

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

Napomena: imajte na umu da u kodu bilo koji redak koji ima tačku i zarez (';') znači da je to samo komentar iza te tačke i zareza.

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

; 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 suštini, 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 koristiti drugi registar koji sadrži lokaciju RAM -a u

; za spremanje na tu RAM lokaciju MOV R1, #0x20000000; postavite lokaciju 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; da biste zapisali na tu RAM lokaciju.

Drugi način da učinite gore navedeno, ali koristite '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š uvijek moramo učiniti '#' da označimo trenutnu vrijednost,; pa (vidi na vrhu), morali smo koristiti '.set' direktivu.; kako bismo to dokazali, promijenimo obrazac podataka u R0. MOV R0, #0xAA; ok, spremni smo za pisanje u RAM koristeći simbol umjesto doslovne vrijednosti adrese MOV R1, #ACONST STR R0, [R1]

Videozapis ulazi u neke detalje, kao i kroz čitanje s memorijske lokacije.

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

Korak 2: Neke osnovne informacije o priključku

Image
Image
Neke osnovne informacije o portu
Neke osnovne informacije o portu
Neke osnovne informacije o portu
Neke osnovne informacije o portu

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 internim registrima, i znamo kako komunicirati s memorijskim (RAM) adresama. Ali GPIO pinovi?

Događa se da su ti pinovi preslikani 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 portove koji 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 završili. Treba nam više informacija.

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

Blokovi adresa I/O registra

Trebat će nam druge adrese, poput:

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

A možda će nam trebati i drugi.

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 je skup od 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čni komad 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 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
  • Upišite LOW do bita 0 P1OUTREG registra kako biste isključili crvenu LED diodu
  • Pozovite funkciju odgode
  • Repeat Loop

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 može koristiti i 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 / svojstva.

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.

Sekvenca programiranja portova (ponovo)

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 kroz otklanjanje grešaka)

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

7. Učinite neku vrstu odgode (ili samo jedan korak kroz otklanjanje grešaka)

8. Ponovite korake 4 do 7.

Povezani video zapis za ovaj korak vodi nas kroz cijeli proces u demo verziji uživo, dok koračamo kroz jedan korak i razgovaramo kroz svaku uputu za sastavljanje, te prikazujemo LED radnju. Izvinite zbog dužine videa.

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čuje se: