Indholdsfortegnelse:
- Trin 1: Lad os prøve at skrive til / læse fra RAM
- Trin 2: Nogle grundlæggende portoplysninger
- Trin 3: Fangede du den eneste fejl i videoen?
Video: GPIO ARM MONTERING - T.I. ROBOTICS SYSTEM LÆRESÆT - LAB 6: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Hej, I en tidligere instruks om at lære ARM-samling ved hjælp af Texas Instruments TI-RSLK (bruger MSP432-mikrokontrolleren), også kendt som Lab 3, hvis du laver T. I. selvfølgelig, gik vi over nogle meget grundlæggende instruktioner såsom at skrive til et register og betinget looping. Vi gik gennem gennemførelsen ved hjælp af Eclipse IDE.
De teeny -programmer, vi udførte, gjorde intet for at interagere med omverdenen.
Lidt kedeligt.
Lad os prøve at ændre det lidt i dag ved at lære lidt om input/output -portene, specifikt de digitale GPIO -ben.
Det sker sådan, at denne MSP432 kommer på et udviklingsbord allerede har to trykknapkontakter, en RGB LED og en rød LED, som alle er bundet til nogle GPIO-porte.
Det betyder, at når vi lærer at opsætte og manipulere disse ben via samling, kan vi visuelt se disse effekter.
Meget mere interessant end bare at træde igennem debuggeren.
(Vi er stadig i gang med at træde - dette vil være vores 'forsinkelse' funktion):-D
Trin 1: Lad os prøve at skrive til / læse fra RAM
Inden vi går til adgang til og kontrollerer GPIO, bør vi tage et lille skridt.
Lad os starte med bare at læse og skrive til en standard hukommelsesadresse. Vi ved fra den tidligere instruerbare (se billeder der), at RAM starter ved 0x2000 0000, så lad os bruge den adresse.
Vi vil flytte data mellem et kerneregister (R0) og 0x2000 0000.
Vi begynder med en grundlæggende filstruktur eller indhold i et samlingsprogram. Se denne instruktion for at oprette et samlingsprojekt ved hjælp af TI's Code Composer Studio (CCS) og nogle prøveprojekter.
.tommelfinger
.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (vores kode kommer her); ------------------------------------------ ---------------------------------------.endasmfunc.end
Jeg vil tilføje noget nyt til den øverste sektion, hvis der er nogle erklæringer (direktiver). Det bliver tydeligere senere.
ACONST. Sæt 0x20000000; vi vil bruge dette længere nede (det er en konstant)
; '0x' betegner naturligvis det følgende er en hex -værdi.
Så vores startfilindhold ser nu sådan ud:
.tommelfinger
.tekst.align 2 ACONST.sæt 0x20000000; vi vil bruge dette længere nede (det er en konstant); '0x' betegner naturligvis det følgende er en hex -værdi..global main.thumbfunc main main:.asmfunc; --------------------------------------- -------------------------------------------------- (vores kode kommer her); ------------------------------------------ ---------------------------------------.endasmfunc.end
Nu hvor vi har ovenstående, lad os tilføje kode mellem de stiplede linjer.
Vi begynder med at skrive til en RAM -placering. Først etablerer vi datamønsteret, en værdi, som vi vil skrive ind i RAM'en. Vi bruger et kerneregister til at fastslå denne værdi eller data.
Bemærk: husk, at i koden betyder enhver linje, der har et semikolon (';'), at det hele er en kommentar efter denne semikolon.
;-----------------------------------------------------------------------------------------------
; SKRIVNING;------------------------------------------------ ---------------------------------------------- MOV R0, #0x55; kerneregister R0 vil indeholde de data, vi vil skrive til RAM -placering.; '0x' betegner naturligvis det følgende er en hex -værdi.
Lad os derefter se på udsagn, der IKKE virker.
; MOV MOV kan ikke bruges til at skrive data til en RAM -placering.
; MOV er kun til øjeblikkelige data i registret; eller fra et register til et andet; dvs. MOV R1, R0.; STR skal bruge STR.; STR R0, = ACONST; Dårligt udtryk i udtrykket ('='); STR R0, 0x20000000; Ulovlig adresseringstilstand til butiksinstruktion; STR R0, ACONST; Ulovlig adresseringstilstand til butiksundervisning
Uden at forklare for meget forsøgte vi at bruge den 'AKONST' ovenfor. I det væsentlige er det en stand-in eller konstant i stedet for at bruge en bogstavelig værdi som 0x20000000.
Vi kunne ikke skrive for at skrive til RAM -placeringen ved hjælp af ovenstående. Lad os prøve noget andet.
; synes vi skal bruge et andet register, der indeholder RAM -placeringen i
; for at gemme til den pågældende RAM -placering MOV R1, #0x20000000; indstil RAM -placering (ikke dens indhold, men placering) til R1.; '0x' betegner naturligvis det følgende er en hex -værdi. STR R0, [R1]; skriv hvad der er i R0 (0x55) til RAM (0x20000000) ved hjælp af R1.; vi bruger et andet register (R1), der har RAM -placeringsadresse; for at skrive til den pågældende RAM -placering.
En anden måde at gøre ovenstående på, men ved at bruge 'ACONST' i stedet for den bogstavelige adresseværdi:
; lad os gøre ovenstående igen, men lad os bruge et symbol i stedet for en bogstavelig RAM -placeringsværdi.
; vi vil bruge 'ACONST' som stand-in til 0x20000000.; vi skal stadig gøre '#' for at angive en umiddelbar værdi,; så (se øverst), vi var nødt til at bruge '.set' -direktivet.; For at bevise dette, lad os ændre datamønsteret i R0. MOV R0, #0xAA; ok, vi er klar til at skrive til RAM ved hjælp af symbolet i stedet for den bogstavelige adresseværdi MOV R1, #ACONST STR R0, [R1]
Videoen går mere i detaljer, samt går gennem læsning fra hukommelsesplaceringen.
Du kan også se den vedhæftede kilde.asm -fil.
Trin 2: Nogle grundlæggende portoplysninger
Nu hvor vi har en god idé om, hvordan vi skriver til / læser fra en RAM -placering, hjælper dette os bedre med at forstå, hvordan vi styrer og bruger GPIO -stiften
Så hvordan interagerer vi med GPIO -benene? Fra vores tidligere kig på denne mikrokontroller og dens ARM -instruktioner ved vi, hvordan vi skal håndtere dens interne registre, og vi ved, hvordan vi interagerer med hukommelses (RAM) adresser. Men GPIO pins?
Det sker sådan, at disse ben er hukommelseskortede, så vi kan behandle dem på samme måde som hukommelsesadresser.
Det betyder, at vi skal vide, hvad disse adresser er.
Nedenfor er portens startadresser. Forresten, for MSP432 er en "port" en samling af stifter, og ikke kun en nål. Hvis du kender Raspberry Pi, tror jeg, at det er anderledes end situationen her.
De blå cirkler i billedet ovenfor viser skriften på tavlen for de to kontakter og lysdioder. De blå linjer peger på de faktiske lysdioder. Vi behøver ikke at røre ved springhovederne.
Jeg lavede de porte, vi er bekymret for, med fed skrift nedenfor.
- GPIO P1: 0x4000 4C00 + 0 (lige adresser)
- GPIO P2: 0x4000 4C00 + 1 (ulige adresser)
- GPIO P3: 0x4000 4C00 + 20 (lige adresser)
- GPIO P4: 0x4000 4C00 + 21 (ulige adresser)
- GPIO P5: 0x4000 4C00 + 40 (lige adresser)
- GPIO P6: 0x4000 4C00 + 41 (ulige adresser)
- GPIO P7: 0x4000 4C00 + 60 (lige adresser)
- GPIO P8: 0x4000 4C00 + 61 (ulige adresser)
- GPIO P9: 0x4000 4C00 + 80 (lige adresser)
- GPIO P10: 0x4000 4C00 + 81 (ulige adresser)
Vi er ikke færdige endnu. Vi har brug for flere oplysninger.
For at styre en port har vi brug for flere adresser. Derfor ser vi på ovenstående liste "lige adresser" eller "ulige adresser".
I/O -registeradresseblokke
Vi skal bruge andre adresser, såsom:
- Port 1 Input Register -adresse = 0x40004C00
- Port 1 Output Register adresse = 0x40004C02
- Port 1 Retning Registeradresse = 0x40004C04
- Port 1 Vælg 0 Registrer adresse = 0x40004C0A
- Port 1 Vælg 1 Registrer adresse = 0x40004C0C
Og vi kan have brug for andre.
Ok, vi kender nu rækkevidden af GPIO -registeradresser til styring af den eneste røde LED.
En meget vigtig note: Hver I/O -port på MSP432 LaunchPad -kortet er en samling af flere (normalt 8) ben eller linjer, og hver kan indstilles individuelt som input eller output.
Dette betyder f.eks., At hvis du indstiller værdier for "Port 1 Direction Register Address", skal du være bekymret for, hvilken bit (eller bits) du indstiller eller ændrer på den adresse. Mere om dette senere.
GPIO -portprogrammeringssekvens
Det sidste stykke, vi har brug for, er en proces eller algoritme, der skal bruges til at styre LED'en.
Engangs initialisering:
- Konfigurer P1.0 (P1SEL1REG: P1SEL0REG Register) <--- 0x00, 0x00 for normal GPIO-funktionalitet.
- Indstil retningsregistrets bit 1 i P1DIRREG som output eller HIGH.
Sløjfe:
Skriv HØJ til bit 0 i P1OUTREG -registeret for at tænde den røde LED
- Ring til en forsinkelsesfunktion
- Skriv LAV til bit 0 i P1OUTREG -registeret for at slukke den røde LED
- Ring til en forsinkelsesfunktion
- Gentag Loop
Hvilken input / output funktion (konfigurer SEL0 og SEL1)
Mange af benene på LaunchPad har flere anvendelser. Eksempelvis kan den samme pin være standard digital GPIO, eller den kan også bruges i UART- eller I2C -seriel kommunikation.
For at bruge en bestemt funktion til den pin, skal du vælge den funktion. Du skal konfigurere pin -funktionen.
Der er et billede ovenfor til dette trin, der forsøger at forklare dette koncept i visuel form.
SEL0- og SEL1 -adresserne danner en parkombination, der fungerer som en slags funktion / funktionsvalg.
Til vores formål ønsker vi standard digital GPIO for bit 0. Det betyder, at vi har brug for bit 0 for SEL0 og SEL1 for at være en LAV.
Portprogrammeringssekvens (igen)
1. Skriv 0x00 til P1 SEL 0 Register (adresse 0x40004C0A). Dette sætter en LAV for bit 0
2. Skriv 0x00 til P1 SEL 1 Register (adresse 0x40004C0C). Dette sætter en LAV for bit 0, indstilling for GPIO.
3. Skriv 0x01 til P1 DIR Register (adresse 0x40004C04). Dette indstiller en HIGH for bit 0, hvilket betyder OUTPUT.
4. Tænd lysdioden ved at skrive et 0x01 til P1 OUTPUT Register (adresse 0x40004C02)
5. Gør en eller anden forsinkelse (eller bare et enkelt trin igennem, mens fejlfinding)
6. Sluk for LED'en ved at skrive et 0x00 til P1 OUTPUT Register (adresse 0x40004C02)
7. Gør en eller anden forsinkelse (eller bare et enkelt trin igennem, mens fejlfinding)
8. Gentag trin 4 til 7.
Den tilhørende video til dette trin tager os gennem hele processen i en live-demo, mens vi gennemgår en enkelt gennemgang og taler gennem hver samlevejledning og viser LED-handlingen. Undskyld venligst videoens længde.
Trin 3: Fangede du den eneste fejl i videoen?
I videoen, der går gennem hele processen med programmering og belysning af LED'en, var der et ekstra trin i hovedsløjfen, der kunne have været flyttet op til engangsinitialiseringen.
Tak fordi du tog dig tid til at gennemgå denne instruks.
Den næste udvider hvad vi har startet her.
Anbefalede:
Raspberry PI 3 - Aktiver seriel kommunikation til TtyAMA0 til BCM GPIO 14 og GPIO 15: 9 trin
Raspberry PI 3 - Aktiver seriel kommunikation til TtyAMA0 til BCM GPIO 14 og GPIO 15: Jeg havde for nylig interesse i at aktivere UART0 på min Raspberry Pi (3b), så jeg kunne tilslutte den direkte til en RS -232 signalniveauenhed ved hjælp af en standard 9 -pind d-sub-stik uden at skulle gå gennem en USB til RS-232 adapter. En del af min interesse
Del 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 trin
Del 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: Hej. Dette er den næste rate, hvor vi fortsætter med at bruge ARM-samling (i stedet for et sprog på højere niveau). Inspirationen til denne Instructable er Lab 6 i Texas Instruments Robotics System Learning Kit eller TI-RSLK. Vi bruger mikrofonen
DEL 2 - GPIO ARM MONTERING - RGB - FUNKTIONSOPKALD - Switches: 6 trin
DEL 2 - GPIO ARM -MONTERING - RGB - FUNKTIONSKALD - Switches: I del 1 lærte vi, hvordan man skifter en enkelt rød LED på MSP432 LaunchPad -udviklingsbordet fra Texas Instruments, ved hjælp af samling i stedet for C / C ++. I denne instruktør, vi vil gøre noget lignende - styr en RGB LED, der også er på den samme
Montering af en Smapler V0002 Trin for trin: 5 trin
Montering af en Smapler V0002 Trin for trin: En Smapler er et kredsløb dedikeret til produktion af generativ lyd skabt af David Cuartielles og Ino Schlaucher fra BlushingBoy.org. Smapler v0002 -aka Singapore -udgaven- er intet andet end et Arduino -skjold, der skal bruges til at spille funky ster
Montering af Smapler V0001r2 Trin for trin: 3 trin
Montering af Smapler V0001r2 Trin for trin: Dette er en fotografisk vejledning til montering af Smapler v0001r2. Det er et selvstændigt Arduino-kompatibelt kredsløb med et indbygget SD-kortstik, et PS2-stik til mus/tastatur, en lydforstærker og en masse I/O-ben til sensorer. Med det kan du