Tartalomjegyzék:
- 1. lépés: Próbáljunk írni / olvasni RAM -ba
- 2. lépés: Néhány alapvető portinformáció
- 3. lépés: Elkaptad az egyetlen hibát a videóban?
Videó: GPIO KARSZERELÉS - T.I. ROBOTIKUS RENDSZER TANULÓKÉSZLET - LAB 6: 3 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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ó
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:
Ultra alacsony fogyasztású WiFi otthoni automatizálási rendszer: 6 lépés (képekkel)
Rendkívül kis teljesítményű WiFi otthoni automatizálási rendszer: Ebben a projektben megmutatjuk, hogyan lehet néhány lépésben felépíteni egy alapvető helyi otthoni automatizálási rendszert. Raspberry Pi -t fogunk használni, amely központi WiFi eszközként fog működni. Míg a végcsomópontokhoz az IOT Cricket -et fogjuk használni az akkumulátor előállításához
Raspberry PI 3 - Soros kommunikáció engedélyezése a TtyAMA0 és a BCM GPIO 14 és GPIO 15: 9 között
Raspberry PI 3 - Soros kommunikáció engedélyezése a TtyAMA0 és a BCM GPIO 14 és GPIO 15 között: Nemrégiben érdeklődtem az UART0 engedélyezése iránt a Raspberry Pi (3b) készüléken, hogy közvetlenül csatlakoztathassam egy RS -232 jelszintű eszközhöz egy szabványos 9 használatával -Tűzze fel a d-sub csatlakozót anélkül, hogy USB-ről RS-232 adapterre kellene mennie. Érdeklődésem része
Színrendező rendszer: Arduino alapú rendszer két övvel: 8 lépés
Színrendező rendszer: Arduino alapú rendszer két övvel: Az ipari területen lévő termékek és tárgyak szállítása és/vagy csomagolása szállítószalagok segítségével készült vonalakkal történik. Ezek az övek bizonyos sebességgel segítik az elemek egyik pontból a másikba történő áthelyezését. Egyes feldolgozási vagy azonosítási feladatok
2. RÉSZ - GPIO KARSZERELÉS - RGB - FUNKCIÓHÍVÁSOK - Kapcsolók: 6 lépés
2. RÉSZ - GPIO ARM ASSEMBLY - RGB - FUNKCIÓHÍVÁSOK - Kapcsolók: Az 1. részben megtanultuk, hogyan lehet egyetlen piros LED -et váltani a Texas Instruments MSP432 LaunchPad fejlesztőlapján, a C / C ++ helyett az összeszerelést használva. valami hasonlót fog tenni - vezéreljen egy RGB LED -et, amely szintén rajta van
MATLAB robotikus mixológus: 4 lépés (képekkel)
MATLAB robotikus mixológus: Szeretné valaha is, hogy az italokat pillanatok alatt tökéletesen összekeverje? Nos, ne keressen tovább, a Robotic Mixologist itt van, hogy elvegye az italok keveréséhez szükséges időt. Ez a projekt a RobotGeek Snapper karját használja az Ön