Indholdsfortegnelse:
- Trin 1: Lad os springe lige ind
- Trin 2: Forbedre kode - Tilføj en funktion
- Trin 3: Tilføj en optaget forsinkelse
- Trin 4: ARM Architecture Procedure Call Standard (AAPCS)
- Trin 5: Funktion med parameter - indlejrede funktioner
- Trin 6: GPIO -input - Tilføj switches
Video: DEL 2 - GPIO ARM MONTERING - RGB - FUNKTIONSOPKALD - Switches: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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 Instructable vil vi gøre noget lignende - styre en RGB LED, der også er på det samme bord.
Undervejs håber vi at fremme vores viden om ARM -samling og ikke bare have det sjovt med at tænde nogle lysdioder.
Trin 1: Lad os springe lige ind
Virkelig, den første video siger det hele. Ikke meget mere at tilføje.
Hovedpunktet med det er at køre tanken om, at hver I/O -port på MSP432 består af en blok med "register" -adresser, som igen består af flere bits hver.
Endvidere grupperes bitene på en ortogonal måde. Det vil sige, at bit 0 i hver registeradresse refererer til den samme eksterne I/O -pin.
Vi gentog tanken om, at det kræver flere registeradresser for den port, at gøre noget med bare en bit eller pin.
Men at i dette tilfælde, da vi har at gøre med en RGB LED, skal vi håndtere tre bits for hver registeradresse.
Vi understregede, at vi har brug for flere registre: DIR -registret, SEL0 -registret, SEL1 -registret og OUTPUT -registret. Og tre bits hver gang.
Trin 2: Forbedre kode - Tilføj en funktion
Som du så i ovenstående trin, havde hovedprogramsløjfen mange gentagne koder, nemlig når vi slukker lysdioderne.
Så vi kan tilføje en funktion til programmet. Vi skal stadig kalde den funktion hver gang vi vil slukke for LED'erne, men det får nogle af koden til at falde sammen til en enkelt sætning.
Havde vores LED-off-kode været mere involveret med mange flere instruktioner, havde dette været en rigtig hukommelsessparer.
En del af integreret programmering og mikro-controllere er at være meget mere opmærksom på programstørrelse.
Videoen forklarer.
I det væsentlige tilføjer vi en forgreningserklæring til vores hovedkode, og vi har en anden kodeblok, som er den funktion, vi forgrener os til. Og så når vi er færdige, eller i slutningen af funktionen, går vi tilbage til den næste erklæring i hovedprogrammet.
Trin 3: Tilføj en optaget forsinkelse
I afsnittet Deklarationer i koden skal du tilføje en konstant for at gøre det let at tweek for den ønskede timing:
; alle ord efter et semikolon (';') starter en kommentar.
; koden i denne del tildeler et navn et navn.; du kunne også have brugt '.equ', men de er lidt forskellige.; '.equ' (tror jeg) kan ikke ændres, mens '.set' betyder, at du kan; ændre værdien af 'DLYCNT' senere i koden, hvis du ønsker det.; 'DLYCNT' vil blive brugt som nedtællingsværdien i forsinkelsubutinen. DLYCNT. Sæt 0x30000
Tilføj en ny forsinkelsesfunktion:
forsinkelse:.asmfunc; starten på 'forsinkelse' underprogrammet eller funktionen.
MOV R5, #DLYCNT; load core cpu register R5 med værdi tildelt 'DLYCNT'. dlyloop; dette markerer starten på forsinkelsesløkken. assembler bestemmer adresse. SUB R5, #0x1; træk en 1 fra den aktuelle værdi i kernecpu -registeret R5. CMP R5, #0x0; sammenligne nuværende værdi i R5 med 0. BGT dlyloop; gren, hvis værdien i R5 er større 0, for at mærke (adresse) 'dlyloop'. BX LR; hvis vi kom hertil, betyder R5 -værdien 0. tilbagevenden fra underprogram..endasmfunc; markerer slutningen af underrutinen.
Derefter påkalder eller kalder den forsinkelsesfunktion i hoveddelen inden for hovedsløjfen:
; dette er et kodefragment af hoveddelen eller hovedfunktionen (se filen 'main.asm').
; dette er en loop i 'main', og viser hvordan vi kalder eller bruger den nye 'forsinkelse' funktion.; '#REDON' og '#GRNON' er også erklæringer (konstanter) (se toppen af 'main.asm').; de er bare en nem måde at indstille den angivne farve på RGB LED. loop MOV R0, #REDON; Rød - sæt kernecpu -register R0 med værdi tildelt 'REDON'. STRB R0, [R4]; kerneregister R4 blev tidligere indstillet med en GPIO -udgangsadresse.; skriv hvad der er i R0, til adresse angivet af R4. BL forsinkelse; gren til den nye 'forsinkelse' funktion. BL ledsoff; gren til den allerede eksisterende 'ledsoff'-funktion. BL forsinkelse; ditto MOV R0, #GRNON; Grøn - ditto STRB R0, [R4]; og så videre. BL forsinkelse BL ledsoff BL forsinkelse
Videoen går i detaljer.
Trin 4: ARM Architecture Procedure Call Standard (AAPCS)
Det er nok et godt tidspunkt at introducere noget. Det er en forsamlingssproglig konvention. Også kendt som Procedure Call Standard for ARM Architecture.
Der er meget i det, men det er bare en standard. Det forhindrer os ikke i at lære samlingsprogrammering, og vi kan vedtage stykker af den standard, når vi går, når vi føler os godt tilpas med nogle begreber, vi lærer.
Ellers kan vi føle, at vi drikker fra en kæmpe vandslange. For meget information.
Kerne registre
Da vi er blevet fortrolige med MSP432s kerneregistre, lad os nu prøve at vedtage nogle af disse standarder. Vi følger dette, når vi skriver den næste funktion (tænd / sluk en LED).
1) Vi formodes at bruge R0 som funktionsparameter. Hvis vi ønsker at videregive en værdi til funktionen (underrutine), skal vi bruge R0 til at gøre det.
2) Vi skal bruge linkregistret til det tilsigtede formål - det indeholder den adresse, der angiver, hvor man skal vende tilbage, når underprogrammet er fuldført.
Du kan se, hvordan vi anvender disse.
Trin 5: Funktion med parameter - indlejrede funktioner
Vi kan rydde op i vores kode og reducere mængden af hukommelse, den optager ved at kombinere gentagne sektioner til en enkelt funktion. Den eneste forskel i hovedsløjfehuset er, at vi har brug for en parameter, så vi kan passere de forskellige farver, vi ønsker at se på RGB LED.
Tag et kig på videoen for detaljer. (undskyld længden)
Trin 6: GPIO -input - Tilføj switches
Lad os gøre det mere interessant. Det er tid til at tilføje nogle switch-kontrol til vores samlingsprogram.
Denne instruktionsbog har billeder, der viser, hvordan de to indbyggede switche er forbundet til MSP432.
I det væsentlige: Switch 1 (SW1 eller S1) er forbundet til P1.1, og switch 2 (SW2 eller S2) er forbundet til P1.4.
Dette gør tingene lidt interessante, ikke kun fordi vi har at gøre med input i stedet for output, men også fordi disse to switches optager eller optager to bits af den samme registeradresseblok som den eneste røde LED, der er en output.
Vi beskæftigede os med at skifte den eneste røde LED i denne Instructable, så vi skal bare tilføje kode for at håndtere switchene.
Port 1 Registrer adresseblok
Husk, at vi dækkede disse i den tidligere Instructable, men vi skal inkludere en ny:
- Port 1 Input Register -adresse = 0x40004C00
- Port 1 Output Register adresse = 0x40004C02
- Port 1 Retning Registeradresse = 0x40004C04
- Port 1 Modstand Aktiver Registeradresse = 0x40004C06
- Port 1 Vælg 0 Registrer adresse = 0x40004C0A
- Port 1 Vælg 1 Registrer adresse = 0x40004C0C
Når du bruger portene som input, er det godt at bruge MSP432's interne pull-up eller pull-down modstande.
Da Launchpad -udviklingsbordet har koblet de to kontakter til jorden (LOW når der trykkes på det), betyder det, at vi skal bruge pull UP -modstande for at sikre, at vi har en solid HIGH, når de ikke trykkes ned.
Træk op / træk ned modstande
Det tager to forskellige Port 1 Register-adresser at knytte disse switchindgange til pull-up modstande.
1) Brug Port 1 Resistor-Enable register (0x40004C06) til bare at angive, at du vil have modstande (for de to bits), 2), og brug derefter Port 1 Output-registeret (0x40004C02) til at indstille modstandene som enten pull-up eller pull-down. Det kan virke forvirrende, at vi bruger et Output-register på input. Outputregistret har næsten et dobbelt formål.
Så for at angive en anden måde kan outputregistret enten sende en HIGH eller LOW til en udgang (f.eks. Den eneste røde LED), og / eller det bruges til at indstille pull-up eller pull-down modstande til indgange, MEN KUN hvis denne funktion er blevet aktiveret via modstandsaktiveringsregistret.
Vigtigt i ovenstående-når du sender/indstiller en LOW eller HIGH til en hvilken som helst outputbit, skal du opretholde pull-up/pull-down-tilstanden for inputbitene samtidigt.
(videoen forsøger at forklare)
Læsning af en portindgangsbit
- Indstil SEL0 / SEL1 til GPIO -funktionalitet
- Indstil DIR -registeret som input for switchbitene, men som output for LED'en (samtidigt i samme byte)
- Aktiver modstande
- Indstil dem som pull-up modstande
- Læs porten
- Du vil måske filtrere den læste værdi for at isolere bare de bits, du har brug for (switch 1 og 2)
Anbefalede:
Montering af AM -radiomodtagersæt: 9 trin (med billeder)
Montering af AM -radiomodtagersæt: Jeg elsker at samle forskellige elektroniske kits. Jeg er fascineret af radioerne. For måneder siden fandt jeg et billigt AM -radiomodtagersæt på Internettet. Jeg bestilte det, og efter standard ventetid på omkring en måned kom det. Sættet er en DIY syv transistorsuper
Montering af en pc: 5 trin
Montering af en pc: At købe en helt ny computer i dag kan blive meget dyrt. Det er dog ret let at spare hundredvis af dollars ved at håndplukke delene og samle dem selv. Mange mennesker går umiddelbart ud fra, at de aldrig selv kunne bygge en, dog
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 trin
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
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