Sisukord:

GPIO VÄLI KOKKUPANEK - T.I. ROBOOTIKASÜSTEEMI ÕPPIKOMPLEKT - LAB 6: 3 sammu
GPIO VÄLI KOKKUPANEK - T.I. ROBOOTIKASÜSTEEMI ÕPPIKOMPLEKT - LAB 6: 3 sammu

Video: GPIO VÄLI KOKKUPANEK - T.I. ROBOOTIKASÜSTEEMI ÕPPIKOMPLEKT - LAB 6: 3 sammu

Video: GPIO VÄLI KOKKUPANEK - T.I. ROBOOTIKASÜSTEEMI ÕPPIKOMPLEKT - LAB 6: 3 sammu
Video: Hack.lu 2018: Make ARM Shellcode Great Again - Saumil Udayan Shah 2024, November
Anonim
GPIO VÄLI KOKKUPANEK - T. I. ROBOOTIKASÜSTEEMI ÕPPIKOMPLEKT - LAB 6
GPIO VÄLI KOKKUPANEK - T. I. ROBOOTIKASÜSTEEMI ÕPPIKOMPLEKT - LAB 6

Tere, Eelmises juhendis ARM-i kokkupaneku õppimise kohta Texas Instruments TI-RSLK abil (kasutab MSP432 mikrokontrollerit), ehk Lab 3, kui teete T. I. muidugi vaatasime üle mõned väga lihtsad juhised, nagu registrisse kirjutamine ja tingimuslik silmus. Astusime läbi hukkamise Eclipse IDE abil.

Meie teostatud väikesed programmid ei aidanud välismaailmaga suhelda.

Kuidagi igav.

Proovime seda täna natuke muuta, õppides natuke sisend-/väljundportide, täpsemalt digitaalsete GPIO -tihvtide kohta.

Nii juhtub, et sellel MSP432-l on arendusplaadil juba kaks vajutusnuppu, RGB LED ja punane LED, mis kõik on seotud mõne GPIO-pordiga.

See tähendab, et kui me õpime neid kontakte seadistama ja manipuleerima kokkupaneku kaudu, näeme neid efekte visuaalselt.

Palju huvitavam kui lihtsalt silurist läbi astumine.

(Me astume veel samme - see on meie "viivituse" funktsioon):-D

Samm: proovime RAM -i kirjutada / sealt lugeda

Enne kui hakkame GPIO -le juurde pääsema ja seda kontrollima, peaksime tegema väikese sammu.

Alustuseks loeme ja kirjutame tavalisele mäluaadressile. Me teame eelmisest Instructable'ist (vt pilte sealt), et RAM algab 0x2000 0000 -st, seega kasutame seda aadressi.

Teisaldame andmed tuumeregistri (R0) ja 0x2000 0000 vahel.

Alustame failide põhistruktuurist või koostamisprogrammi sisust. Palun lugege käesolevat juhendit, et luua TI Code Composer Studio (CCS) abil koostamisprojekt ja mõned näidisprojektid.

.pöial

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (meie kood läheb siia); ------------------------------------------ ---------------------------------------.endasmfunc.end

Tahan lisada ülemisse rubriiki midagi uut, kui seal oli mõni deklaratsioon (direktiiv). See selgub hiljem.

VASTU.komplekt 0x20000000; me kasutame seda allpool (see on konstant)

; ilmselgelt tähistab "0x" järgnevat hex -väärtust.

Nii et meie algfaili sisu näeb nüüd välja selline:

.pöial

.text.align 2 ACONST.set 0x20000000; me kasutame seda allpool (see on konstant); ilmselgelt tähistab "0x" järgnevat hex -väärtust..global main.thumbfunc main main:.asmfunc; --------------------------------------- -------------------------------------------; (meie kood läheb siia); ------------------------------------------ ---------------------------------------.endasmfunc.end

Nüüd, kui meil on ülaltoodud, lisame koodi katkendlike ridade vahele.

Alustame RAM -i asukohta kirjutamisega. Esiteks kehtestame andmemustri, väärtuse, mille me RAM -i kirjutame. Selle väärtuse või andmete kindlakstegemiseks kasutame põhiregistrit.

Märkus: pidage meeles, et koodis tähendab mis tahes rida, millel on semikoolon (';'), see kõik on kommentaar pärast seda semikoolonit.

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

; KIRJUTAMINE; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; põhiregister R0 sisaldab andmeid, mida soovime RAM -i asukohta kirjutada.; ilmselgelt tähistab "0x" järgnevat hex -väärtust.

Järgmisena vaatame väiteid, mis EI tööta.

; MOV MOV -i ei saa kasutada andmete kirjutamiseks RAM -i asukohta.

; MOV on mõeldud ainult viivitamatute andmete registreerimiseks; või ühest registrist teise; st MOV R1, R0.; STR peab kasutama STR -i.; STR R0, = VASTU; Väljendis halb termin ('='); STR R0, 0x20000000; Poe juhiste ebaseaduslik aadressirežiim; STR R0, VASTU; Poe juhiste ebaseaduslik aadressirežiim

Ilma liiga palju selgitamata proovisime kasutada ülaltoodud "ACONST". Põhimõtteliselt on see ooterežiim või konstant, selle asemel, et kasutada sõnasõnalist väärtust nagu 0x20000000.

Ülaltoodut kasutades ei saanud me RAM -i asukohta kirjutamiseks kirjutada. Proovime midagi muud.

; tundub, et peame kasutama teist registrit, mis sisaldab RAM -i asukohta

; et salvestada sellesse RAM -i asukohta MOV R1, #0x20000000; määrake RAM -i asukoht (mitte selle sisu, vaid asukoht) väärtuseks R1.; ilmselgelt tähistab "0x" järgnevat hex -väärtust. STRR0, [R1]; kirjutage R1 (0x55) sisu RAM -i (0x20000000), kasutades R1.; kasutame teist registrit (R1), millel on RAM -i asukoha aadress; selleks RAM -i asukohta kirjutamiseks.

Veel üks viis ülaltoodud toimingute tegemiseks, kuid sõnasõnalise aadressiväärtuse asemel kasutage märget "ACONST":

; teeme ülaltoodut uuesti, kuid kasutame RAM -i sõnasõnalise väärtuse asemel sümbolit.

; me tahame kasutada "ACONST" kui 0x20000000 eraldiseisvat seadet.; vahetu väärtuse tähistamiseks peame ikkagi tegema#. seega (vt ülaosas) pidime kasutama direktiivi.set.; selle tõestamiseks muudame andmemustrit R0 -s. MOV R0, #0xAA; ok, oleme valmis RAM -i kirjutama, kasutades sõnasõnalise aadressiväärtuse asemel sümbolit MOV R1, #ACONST STR R0, [R1]

Video käsitleb mõnda üksikasjalikumat teavet, samuti mälupesast lugemist.

Samuti saate vaadata lisatud allika.asm -faili.

Samm 2: Pordi põhiteave

Image
Image
Mõned põhilised andmed sadama kohta
Mõned põhilised andmed sadama kohta
Mõned põhilised andmed sadama kohta
Mõned põhilised andmed sadama kohta

Nüüd, kui meil on hea idee, kuidas RAM -i asukohta kirjutada / sealt lugeda, aitab see meil paremini mõista, kuidas GPIO -nööpi juhtida ja kasutada

Niisiis, kuidas me saame GPIO -tihvtidega suhelda? Meie eelmisest pilgust sellele mikrokontrollerile ja selle ARM -i juhistele teame, kuidas selle siseregistritega hakkama saada, ja teame, kuidas suhelda mälu (RAM) aadressidega. Aga GPIO tihvtid?

Nii juhtub, et need tihvtid on mäluga kaardistatud, nii et saame neid kohelda samamoodi nagu mäluaadresse.

See tähendab, et me peame teadma, mis need aadressid on.

Allpool on portide algusaadressid. Muide, MSP432 jaoks on "port" nööpnõelte kogum ja mitte ainult üks tihvt. Kui olete Raspberry Pi -ga tuttav, usun, et see on teistsugune kui siinne olukord.

Ülaltoodud pildil olevad sinised ringid näitavad kahe lüliti ja LED -i tahvlile kirjutamist. Sinised jooned näitavad tegelikke LED -e. Me ei pea puudutama päise hüppajaid.

Allpool tegin meiega seotud sadamad paksus kirjas.

  • GPIO P1: 0x4000 4C00 + 0 (paaris aadressid)
  • GPIO P2: 0x4000 4C00 + 1 (paaritu aadress)
  • GPIO P3: 0x4000 4C00 + 20 (paaritud aadressid)
  • GPIO P4: 0x4000 4C00 + 21 (paaritu aadress)
  • GPIO P5: 0x4000 4C00 + 40 (paaritud aadressid)
  • GPIO P6: 0x4000 4C00 + 41 (paaritu aadress)
  • GPIO P7: 0x4000 4C00 + 60 (paaritud aadressid)
  • GPIO P8: 0x4000 4C00 + 61 (paaritu aadress)
  • GPIO P9: 0x4000 4C00 + 80 (paaritud aadressid)
  • GPIO P10: 0x4000 4C00 + 81 (paaritu aadress)

Me pole veel valmis. Vajame rohkem teavet.

Pordi juhtimiseks vajame mitut aadressi. Seetõttu näeme ülaltoodud loendis "paaris -aadresse" või "paarituid aadresse".

I/O registri aadressiplokid

Vajame teisi aadresse, näiteks:

  • Pordi 1 sisendregistri aadress = 0x40004C00
  • Pordi 1 väljundregistri aadress = 0x40004C02
  • Pordi 1 suuna registri aadress = 0x40004C04
  • Port 1 Valige 0 Registreeri aadress = 0x40004C0A
  • Port 1 Valige 1 Registreeri aadress = 0x40004C0C

Ja me võime vajada teisi.

Ok, nüüd teame GPIO registriaadresside valikut, et juhtida üksikut punast LED -i.

Väga oluline märkus: MSP432 LaunchPadi tahvli iga sisend-/väljundport on kogum, mis koosneb mitmest (tavaliselt 8) nööpnõelast või liinist ning igaüks neist saab eraldi seadistada sisendiks või väljundiks.

See tähendab näiteks seda, et kui määrate väärtused porti 1 suuneregistri aadressile, peate olema huvitatud sellest, millist bitti (või bitti) sellel aadressil seadistate või muudate. Sellest lähemalt hiljem.

GPIO pordi programmeerimise järjestus

Viimane osa, mida vajame, on protsess või algoritm, mida kasutada LED -i juhtimiseks.

Ühekordne lähtestamine:

  • Seadistage P1.0 (P1SEL1REG: P1SEL0REG register) <--- 0x00, 0x00 normaalse GPIO funktsionaalsuse jaoks.
  • Seadke väljundiks P1DIRREG suunaregistri bit 1 või HIGH.

Silmus:

Punase LED -i sisselülitamiseks kirjutage HIGH P1OUTREG registri bitti 0

  • Helistage viivitusfunktsioonile
  • Punase LED -i väljalülitamiseks kirjutage P1OUTREG -registri bitti 0 LOW
  • Helistage viivitusfunktsioonile
  • Korda Loop

Milline sisend- / väljundfunktsioon (SEL0 ja SEL1 konfigureerimine)

Paljudel LaunchPadi tihvtidel on mitu kasutust. Näiteks võib sama tihvt olla tavaline digitaalne GPIO või seda saab kasutada ka UART- või I2C -jadaühenduses.

Selle tihvti mis tahes spetsiifilise funktsiooni kasutamiseks peate selle funktsiooni valima. Peate konfigureerima tihvti funktsiooni.

Selle sammu jaoks on ülaltoodud pilt, mis üritab seda kontseptsiooni visuaalselt selgitada.

Aadressid SEL0 ja SEL1 moodustavad paarikombinatsiooni, mis toimib teatud funktsioonide / funktsioonide valikuna.

Oma eesmärkidel soovime bitti 0. Standardne digitaalne GPIO. See tähendab, et vaja on bitti 0, et SEL0 ja SEL1 oleksid LOW.

Portide programmeerimise järjestus (uuesti)

1. Kirjutage 0x00 P1 SEL 0 registrisse (aadress 0x40004C0A). See määrab bitile 0 LOW

2. Kirjutage 0x00 P1 SEL 1 registrisse (aadress 0x40004C0C). See määrab bitile 0 LOW, GPIO seadistuseks.

3. Kirjutage 0x01 PIR DIR registrisse (aadress 0x40004C04). See määrab bitile 0 HIGH, mis tähendab väljundit.

4. Lülitage LED sisse, kirjutades 0x01 kuni P1 OUTPUT Register (aadress 0x40004C02)

5. Kas mingit viivitust (või lihtsalt ühe sammuga silumise ajal)

6. Lülitage LED välja, kirjutades 0x00 kuni P1 OUTPUT Register (aadress 0x40004C02)

7. Kas mingit viivitust (või lihtsalt ühe sammuga silumise ajal)

8. Korrake samme 4 kuni 7.

Selle sammuga seotud video viib meid läbi kogu protsessi otseülekandena, kui me astume läbi ja räägime läbi kõik kokkupaneku juhised ning näitame LED-i toiminguid. Palun vabandage video pikkust.

3. samm: kas saite videost ühe vea kinni?

Videol, mis läbib kogu LED-i programmeerimise ja valgustamise protsessi, oli põhisilmus täiendav samm, mille oleks võinud üle viia ühekordsele lähtestamisele.

Täname, et leidsite aega selle juhendi läbimiseks.

Järgmine laiendab seda, mida oleme siin alustanud.

Soovitan: