Tartalomjegyzék:

GPIO KARSZERELÉS - T.I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6: 3 lépés
GPIO KARSZERELÉS - T.I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6: 3 lépés

Videó: GPIO KARSZERELÉS - T.I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6: 3 lépés

Videó: GPIO KARSZERELÉS - T.I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6: 3 lépés
Videó: DIGITLZ Talk - News about PS5, Raspberry Pi 4 with 8GB RAM, Android Studio 4 and our streaming setup 2024, November
Anonim
GPIO KARSZERELÉS - T. I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6
GPIO KARSZERELÉS - T. I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6

Helló, Egy korábbi utasításban az ARM összeszerelés megtanulásáról a Texas Instruments TI-RSLK segítségével (az MSP432 mikrokontrollert használja), más néven Lab 3, ha a T. I. Természetesen átnéztünk néhány nagyon alapvető utasítást, például a regiszterbe írást és a feltételes hurkot. Az Eclipse IDE segítségével végrehajtottuk a végrehajtást.

Az általunk végrehajtott kicsi programok semmit sem tettek, hogy kölcsönhatásba lépjenek a külvilággal.

Elég unalmas.

Próbáljunk ezen egy kicsit változtatni ma, ha tanulunk egy kicsit a bemeneti/kimeneti portokról, pontosabban a digitális GPIO érintkezőkről.

Előfordul, hogy ez az MSP432 egy fejlesztői táblán már két nyomógombos kapcsolóval, egy RGB LED és egy piros LED-del rendelkezik, amelyek mindegyike néhány GPIO-porthoz van kötve.

Ez azt jelenti, hogy amikor megtanuljuk ezeket a csapokat összeszereléssel beállítani és kezelni, vizuálisan láthatjuk ezeket a hatásokat.

Sokkal érdekesebb, mint átlépni a hibakeresőn.

(Még lépni fogunk - ez lesz a „késleltetés” funkciónk):-D

1. lépés: Próbáljunk írni / olvasni RAM -ba

Mielőtt áttérnénk a GPIO elérésére és vezérlésére, meg kell tennünk egy kis lépést.

Kezdjük azzal, hogy csak olvasunk és írunk egy szabványos memóriacímre. Az előző Instructable -ből (lásd a képeket) tudjuk, hogy a RAM 0x2000 0000 -nál kezdődik, ezért használjuk ezt a címet.

Az adatokat áthelyezzük egy törzsregiszter (R0) és 0x2000 0000 között.

Kezdjük az alapvető fájlstruktúrával vagy egy összeállítási program tartalmával. Kérjük, olvassa el ezt az útmutatót, ha összeállítási projektet szeretne létrehozni a TI Code Composer Studio (CCS) segítségével, és néhány mintaprojektet.

.hüvelykujj

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (a kódunk itt fog megjelenni); ------------------------------------------ ---------------------------------------.endasmfunc.end

Valami újat szeretnék hozzáfűzni a felső részhez, ha vannak olyan nyilatkozatok (irányelvek). Később világosabb lesz.

ELLEN.készlet 0x20000000; ezt lejjebb fogjuk használni (ez állandó)

; Nyilvánvaló, hogy a „0x” hexadecimális értéket jelöl.

Tehát a kezdő fájl tartalma most így néz ki:

.hüvelykujj

.text.align 2 ACONST.set 0x20000000; ezt lejjebb fogjuk használni (ez állandó); Nyilvánvaló, hogy a „0x” hexadecimális értéket jelöl..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (a kódunk itt fog megjelenni); ------------------------------------------ ---------------------------------------.endasmfunc.end

Most, hogy megvan a fentiek, adjunk hozzá kódot a szaggatott sorok közé.

Kezdjük az írással egy RAM helyre. Először létre kell hoznunk az adatmintát, egy értéket, amelyet a RAM -ba írunk. Az alapnyilvántartást használjuk az érték vagy adatok megállapításához.

Megjegyzés: ne feledje, hogy a kódban a pontosvesszővel (';') jelölt sorok azt jelentik, hogy ez a megjegyzés a pontosvessző után van.

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

; ÍRÁS; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; az R0 törzsregiszter tartalmazza azokat az adatokat, amelyeket a RAM helyére szeretnénk írni.; Nyilvánvaló, hogy a "0x" hexadecimális értéket jelöl.

Ezután nézzük meg azokat a kijelentéseket, amelyek NEM működnek.

; MOV A MOV nem használható adatok írására RAM -helyre.

; A MOV csak az azonnali adatok nyilvántartásba vételére szolgál; vagy egyik nyilvántartásból a másikba; azaz MOV R1, R0.; Az STR -nek STR -t kell használnia.; STR R0, = ELLEN; Rossz kifejezés a kifejezésben (a '='); STR R0, 0x20000000; Illegális címzési mód az áruház utasításaihoz; STR R0, ELLEN; Illegális címzési mód az áruház utasításaihoz

Túl sok magyarázat nélkül megpróbáltuk használni a fenti „ELLEN” szót. Lényegében ez egy stand-in vagy konstans, ahelyett, hogy olyan literális értéket használna, mint a 0x20000000.

Nem tudtunk írni, hogy írjunk a RAM helyére a fentiekkel. Próbáljunk ki valami mást.

; úgy tűnik, hogy egy másik regisztert kell használnunk, amely tartalmazza a RAM helyét

; ahhoz a RAM -helyre való tároláshoz MOV R1, #0x20000000; állítsa be a RAM helyét (nem a tartalmát, hanem a helyét) az R1 -be.; Nyilvánvaló, hogy a "0x" hexadecimális értéket jelöl. STR R0, [R1]; írja be az R0 (0x55) tartalmát a RAM -ba (0x20000000) az R1 használatával.; egy másik regisztert (R1) használunk, amely rendelkezik RAM helycímmel; ahhoz a RAM helyre írni.

A fentiek egy másik módja, de az „ACONST” használata a szó szerinti címérték helyett:

; ismételjük meg a fentieket, de használjunk szimbólumot a szó szerinti RAM helyérték helyett.

; az „ACONST” -t szeretnénk stand-inként használni 0x20000000 esetén.; még mindig meg kell tennünk a „#” -t az azonnali érték jelzésére,; így (lásd fent) a ".set" irányelvet kellett használnunk.; ennek bizonyítására változtassuk meg az adatmintát az R0 -ban. MOV R0, #0xAA; Rendben, készen állunk arra, hogy a RAM -ba írjunk a szimbólum használatával a MOV R1, #ACONST STR R0, [R1] szó szerinti címérték helyett

A videó részletesebben foglalkozik, valamint a memória helyéről történő olvasással.

Megtekintheti a csatolt forrás.asm fájlt is.

2. lépés: Néhány alapvető portinformáció

Image
Image
Néhány alapvető portinformáció
Néhány alapvető portinformáció
Néhány alapvető portinformáció
Néhány alapvető portinformáció

Most, hogy van egy jó ötletünk, hogyan írhatunk RAM -ra / olvashatunk RAM -helyről, ez segít jobban megérteni a GPIO -pin vezérlését és használatát.

Tehát hogyan léphetünk kapcsolatba a GPIO csapokkal? Ennek a mikrokontrollernek és az ARM utasításainak korábbi megtekintéséből tudjuk, hogyan kell kezelni a belső regisztereit, és tudjuk, hogyan kell együttműködni a memória (RAM) címekkel. De GPIO csapok?

Előfordul, hogy ezek a csapok memória-leképezésűek, így nagyjából ugyanúgy kezelhetjük őket, mint a memóriacímeket.

Ez azt jelenti, hogy tudnunk kell, melyek ezek a címek.

Az alábbiakban a port kezdőcímei találhatók. Egyébként az MSP432 esetében a "port" a csapok gyűjteménye, és nem csak egy érintkező. Ha ismeri a Raspberry Pi -t, azt hiszem, ez más, mint az itteni helyzet.

A fenti képen látható kék körök a táblán lévő két kapcsoló és LED írását mutatják. A kék vonalak a tényleges LED -ekre mutatnak. Nem kell hozzáérnünk a fejléc ugrókhoz.

Az érintett portokat az alábbiakban vastag betűvel szedtem.

  • GPIO P1: 0x4000 4C00 + 0 (páros cím)
  • GPIO P2: 0x4000 4C00 + 1 (páratlan címek)
  • GPIO P3: 0x4000 4C00 + 20 (páros cím)
  • GPIO P4: 0x4000 4C00 + 21 (páratlan címek)
  • GPIO P5: 0x4000 4C00 + 40 (páros cím)
  • GPIO P6: 0x4000 4C00 + 41 (páratlan címek)
  • GPIO P7: 0x4000 4C00 + 60 (páros cím)
  • GPIO P8: 0x4000 4C00 + 61 (páratlan címek)
  • GPIO P9: 0x4000 4C00 + 80 (páros cím)
  • GPIO P10: 0x4000 4C00 + 81 (páratlan címek)

Még nem végeztünk. További információra van szükségünk.

Egy port vezérléséhez több címre van szükségünk. Ezért a fenti listában "páros címeket" vagy "páratlan címeket" látunk.

I/O regiszter címblokkok

Szükségünk lesz más címekre, például:

  • 1. port bemeneti regiszter címe = 0x40004C00
  • 1. port kimeneti regiszter címe = 0x40004C02
  • Port 1 Irány Regisztrációs cím = 0x40004C04
  • 1. port Válassza ki a 0 Regisztrációs cím = 0x40004C0A lehetőséget
  • Port 1 Válasszon 1 Regisztrációs cím = 0x40004C0C

És szükségünk lehet másokra.

Ok, most már ismerjük a GPIO regisztercímek tartományát az egyetlen piros LED vezérléséhez.

Egy nagyon fontos megjegyzés: Az MSP432 LaunchPad táblán lévő minden I/O port több (általában 8) tű vagy vonal gyűjteménye, és mindegyik külön -külön beállítható bemenetként vagy kimenetként.

Ez például azt jelenti, hogy ha az "Port 1 Direction Register Address" értékét állítja be, akkor törődnie kell azzal a bittel (vagy bitekkel), amelyet ezen a címen állít be vagy módosít. Erről bővebben később.

GPIO port programozási sorrend

Az utolsó darab, amire szükségünk van, egy folyamat vagy algoritmus, amelyet a LED vezérlésére használunk.

Egyszeri inicializálás:

  • A P1.0 konfigurálása (P1SEL1REG: P1SEL0REG regiszter) <--- 0x00, 0x00 a normál GPIO funkcióhoz.
  • Állítsa a P1DIRREG 1. Irányregiszter bitjét kimenetnek, vagy HIGH.

Hurok:

Írjon HIGH értéket a P1OUTREG regiszter 0. bitjére a piros LED bekapcsolásához

  • Hívjon egy késleltetési funkciót
  • Írja be a LOW értéket a P1OUTREG regiszter 0. bitjébe a piros LED kikapcsolásához
  • Hívjon egy késleltetési funkciót
  • Ismételje meg a hurkot

Melyik bemeneti / kimeneti funkció (SEL0 és SEL1 konfigurálása)

A LaunchPad számos csapja többféleképpen használható. Például ugyanaz a tű lehet szabványos digitális GPIO, vagy UART vagy I2C soros kommunikációban is használható.

Annak érdekében, hogy bármilyen konkrét funkciót használjon az adott csaphoz, ki kell választania ezt a funkciót. Be kell állítania a csap funkcióját.

A fenti képen látható ez a lépés, amely vizuális formában próbálja megmagyarázni ezt a fogalmat.

A SEL0 és SEL1 címek páros kombinációt alkotnak, amelyek valamilyen funkció / funkcióválasztásként működnek.

Céljaink szerint szabványos digitális GPIO -t szeretnénk a 0. bithez. Ez azt jelenti, hogy szükségünk van a 0. bitre, hogy a SEL0 és a SEL1 LOW legyen.

Port programozási sorrend (ismét)

1. Írjon 0x00 értéket a P1 SEL 0 regiszterbe (0x40004C0A cím). Ez LOW értéket állít be a 0 bithez

2. Írjon 0x00 értéket a P1 SEL 1 regiszterbe (0x40004C0C cím). Ez LOW értéket állít be a 0 bitnél, a GPIO beállítását.

3. Írjon 0x01 -et a P1 DIR regiszterbe (0x40004C04 cím). Ez egy HIGH értéket állít be a 0 bithez, azaz OUTPUT.

4. Kapcsolja be a LED -et 0x01 - P1 OUTPUT Register (0x40004C02 cím) írásával

5. Csináljon valamilyen késleltetést (vagy csak egyetlen lépést a hibakeresés alatt)

6. Kapcsolja ki a LED -et 0x00 - P1 OUTPUT Register (0x40004C02 cím) írásával

7. Csináljon valamilyen késleltetést (vagy csak egyetlen lépést a hibakeresés alatt)

8. Ismételje meg a 4–7. Lépést.

Az ehhez a lépéshez tartozó videó egy élő bemutatóban végigvezet minket a teljes folyamaton, miközben minden egyes összeszerelési utasítást egyetlen lépésben végigbeszélünk, és bemutatjuk a LED-es műveletet. Elnézést kérek a videó hosszáért.

3. lépés: Elkaptad az egyetlen hibát a videóban?

A videóban, amely végigjárja a LED programozását és meggyújtását, volt egy további lépés a fő hurokban, amelyet fel lehetett volna emelni az egyszeri inicializálásra.

Köszönjük, hogy időt szánt erre az utasításra.

A következő rész kitér arra, amit itt elkezdtünk.

Ajánlott: