Innholdsfortegnelse:
- Trinn 1: La oss hoppe rett inn
- Trinn 2: Forbedre kode - Legg til en funksjon
- Trinn 3: Legg til en opptatt forsinkelse
- Trinn 4: ARM Architecture Procedure Call Standard (AAPCS)
- Trinn 5: Funksjon med parameter - nestede funksjoner
- Trinn 6: GPIO -inngang - Legg til brytere
Video: DEL 2 - GPIO ARM MONTERING - RGB - FUNKSJONSOPPKALL - Brytere: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
I del 1 lærte vi hvordan du bytter en enkelt rød LED på MSP432 LaunchPad -utviklingskortet fra Texas Instruments, ved å bruke montering i stedet for C / C ++.
I denne instruksen vil vi gjøre noe lignende - kontrollere en RGB -LED som også er på det samme kortet.
Underveis håper vi å videreutvikle vår kunnskap om ARM -montering, og ikke bare ha det gøy med å tenne noen lysdioder.
Trinn 1: La oss hoppe rett inn
Virkelig, den første videoen sier alt. Ikke mye mer å legge til.
Hovedpoenget med det er å drive hjem ideen om at hver I/O -port på MSP432 består av en blokk med "register" -adresser, som igjen består av flere biter hver.
Videre grupperes bitene på en ortogonal måte. Det vil si at bit 0 i hver registeradresse refererer til den samme eksterne I/O -pinnen.
Vi gjentok ideen om at det krever flere registeradresser for den porten, for å gjøre noe med bare en bit eller pin.
Men at i dette tilfellet, siden vi har å gjøre med en RGB LED, må vi forholde oss til tre biter for hver registeradresse.
Vi forsterket at vi trenger flere registre: DIR -registeret, SEL0 -registeret, SEL1 -registeret og OUTPUT -registeret. Og tre biter hver gang.
Trinn 2: Forbedre kode - Legg til en funksjon
Som du så i trinnet ovenfor, hadde hovedprogramsløyfen mye gjentatt kode, nemlig når vi slår av lysdiodene.
Så vi kan legge til en funksjon i programmet. Vi må fortsatt kalle den funksjonen hver gang vi vil slå av lysdiodene, men det får noen av koden til å kollapse til en enkelt setning.
Hadde vår LED-off-kode vært mer involvert med mange flere instruksjoner, hadde dette vært en skikkelig minnesparing.
En del av innebygd programmering og mikrokontrollere er å være mye mer bevisst på programstørrelse.
Videoen forklarer.
I hovedsak legger vi til en forgreningserklæring til hovedkoden vår, og vi har en annen kodeblokk som er funksjonen vi forgrener oss til. Og så når vi er ferdige, eller på slutten av funksjonen, går vi tilbake til neste setning i hovedprogrammet.
Trinn 3: Legg til en opptatt forsinkelse
I delen Deklarasjoner i koden, legg til en konstant for å gjøre det enkelt å tweek for ønsket timing:
; noen ord etter et semikolon (';') starter en kommentar.
; koden i denne delen tilordner et navn til en verdi.; du kunne også ha brukt '.equ', men de er litt forskjellige.; '.equ' (tror jeg) kan ikke endres, mens '.set' betyr at du kan; endre verdien av 'DLYCNT' senere i koden hvis du ønsker det.; 'DLYCNT' vil bli brukt som nedtellingsverdi i forsinkelsesprogrammet. DLYCNT. Sett 0x30000
Legg til en ny forsinkelsesfunksjon:
forsinkelse:.asmfunc; starten på 'forsinkelsen' underrutinen eller funksjonen.
MOV R5, #DLYCNT; load core cpu register R5 med verdi tildelt 'DLYCNT'. dlyloop; dette markerer starten på forsinkelsessløyfen. assembler bestemmer adressen. SUB R5, #0x1; trekker en 1 fra gjeldende verdi i kjernecpu -registeret R5. CMP R5, #0x0; sammenligne nåværende verdi i R5 til 0. BGT dlyloop; gren hvis verdien i R5 er større 0, for å merke (adresse) 'dlyloop'. BX LR; hvis vi kom hit, betyr det at R5 -verdien var 0. retur fra subrutine..endasmfunc; markerer slutten på subrutinen.
Deretter påkaller eller kaller du forsinkelsesfunksjonen i hoveddelen, i hovedløkken:
; dette er et kodefragment, av hoveddelen eller hovedfunksjonen (se filen 'main.asm').
; dette er en sløyfe i "main", og viser hvordan vi kaller eller bruker den nye "forsinkelses" -funksjonen.; '#REDON' og '#GRNON' er også erklæringer (konstanter) (se toppen av 'main.asm').; de er bare en enkel måte å angi den angitte fargen på RGB LED. sløyfe MOV R0, #REDON; Rød - sett kjernecpu -register R0 med verdi tildelt 'REDON'. STRB R0, [R4]; kjerneregister R4 ble tidligere angitt med en GPIO -utgangsadresse.; skriv hva som er i R0, til adressen spesifisert av R4. BL forsinkelse; gren til den nye "forsinkelses" -funksjonen. BL ledsoff; gren til den allerede eksisterende "ledsoff" -funksjonen. BL forsinkelse; ditto MOV R0, #GRNON; Grønn - ditto STRB R0, [R4]; og så videre. BL forsinkelse BL ledsoff BL forsinkelse
Videoen går i detalj.
Trinn 4: ARM Architecture Procedure Call Standard (AAPCS)
Det er sannsynligvis en god tid å introdusere noe. Det er et forsamlingsspråklig stevne. Også kjent som Procedure Call Standard for ARM Architecture.
Det er mye i dette, men det er bare en standard. Det forhindrer oss ikke i å lære montering av programmering, og vi kan ta i bruk deler av den standarden når vi går, når vi føler oss komfortable med noen begreper vi lærer.
Ellers kan vi føle at vi drikker fra en stor vannslange. For mye informasjon.
Kjerneregistre
Siden vi har blitt kjent med MSP432s kjerneregistre, la oss prøve å nå vedta noen av disse standardene. Vi følger dette når vi skriver den neste funksjonen (slå på / av en LED).
1) Vi skal bruke R0 som funksjonsparameter. Hvis vi ønsker å overføre en verdi til funksjonen (subrutine), bør vi bruke R0 for å gjøre det.
2) Vi skal bruke lenkeregisteret til det tiltenkte formålet - det inneholder adressen som angir hvor du skal gå tilbake til etter at subrutinen er fullført.
Du vil se hvordan vi bruker disse.
Trinn 5: Funksjon med parameter - nestede funksjoner
Vi kan rydde opp i koden vår og redusere mengden minne den opptar ved å kombinere gjentatte seksjoner til en enkelt funksjon. Den eneste forskjellen i hovedløyfekroppen er at vi trenger en parameter slik at vi kan passere de forskjellige fargene vi vil se på RGB LED.
Ta en titt på videoen for detaljer. (beklager lengden)
Trinn 6: GPIO -inngang - Legg til brytere
La oss gjøre det mer interessant. Det er på tide å legge til litt bryterkontroll i vårt monteringsprogram.
Denne instruksen har bilder som viser hvordan de to innebygde bryterne er koblet til MSP432.
I hovedsak: Bryter 1 (SW1 eller S1) er koblet til P1.1, og bryter 2 (SW2 eller S2) er koblet til P1.4.
Dette gjør ting litt interessant, ikke bare fordi vi har å gjøre med innganger i stedet for utganger, men også fordi disse to bryterne opptar eller tar opp to biter av den samme registeradresseblokken som den eneste røde LED -en som er en utgang.
Vi jobbet med å bytte den eneste røde LED -en i denne instruksjonsboken, så vi trenger bare å legge til kode for å håndtere bryterne.
Port 1 Registrer adresseblokk
Husk at vi dekket disse i forrige Instructable, men vi må inkludere en ny:
- Port 1 Inngangsregisteradresse = 0x40004C00
- Port 1 Utgangsregisteradresse = 0x40004C02
- Port 1 Retning Registeradresse = 0x40004C04
- Port 1 Resistor Enable Register address = 0x40004C06
- Port 1 Velg 0 Registrer adresse = 0x40004C0A
- Port 1 Velg 1 Registrer adresse = 0x40004C0C
Når du bruker portene som innganger, er det godt å bruke MSP432s interne pull-up eller pull-down motstander.
Siden Launchpad -utviklingsbordet har koblet de to bryterne til bakken (LOW når den trykkes), betyr det at vi bør bruke pull UP -motstander for å sikre at vi har en solid HIGH når de ikke er presset.
Trekk opp / trekk ned motstander
Det tar to forskjellige Port 1 Register-adresser for å knytte disse bryterinngangene til opptrekkbare motstander.
1) Bruk Port 1 Resistor-Enable register (0x40004C06) for å bare indikere at du vil ha motstander (for de to bitene), 2) og bruk deretter Port 1 Output-registeret (0x40004C02) til å sette motstandene som enten pull-up eller pull-down. Det kan virke forvirrende at vi bruker et Output-register på innganger. Utdataregisteret har nesten et dobbelt formål.
Så, for å angi en annen måte, kan Output-registeret enten sende ut en HIGH eller LOW til en utgang (for eksempel den eneste røde LED-en), og / eller den brukes til å stille opp- eller nedtrekksmotstander for innganger, MEN KUN hvis denne funksjonen er aktivert via motstandskontrollregistret.
Viktig i det ovennevnte-når du sender/setter en LAV eller HØY til en hvilken som helst utgangsbit, må du opprettholde pull-up/pull-down-tilstanden til inngangsbitene samtidig.
(videoen prøver å forklare)
Lese en portinngangsbit
- Still inn SEL0 / SEL1 for GPIO -funksjonalitet
- Sett DIR -registeret som inngang for bryterbitene, men som utgang for LED -en (samtidig i samme byte)
- Aktiver motstander
- Sett dem som opptrekkmotstander
- Les porten
- Det kan være lurt å filtrere verdien som er lest for å isolere bare bitene du trenger (bryter 1 og 2)
Anbefalt:
Montering av AM -radiomottakersett: 9 trinn (med bilder)
Montering av AM Radio Receiver Kit: Jeg elsker å sette sammen forskjellige elektroniske sett. Jeg er fascinert av radioene. For noen måneder siden fant jeg et billig AM -radiomottakersett på Internett. Jeg bestilte den, og etter standard ventetid på rundt en måned kom den. Settet er en DIY syv transistor superhet
Arduino -Teensy4 for Teensy 4.0 - Full montering: 10 trinn
Arduino-Teensy4 for Teensy 4.0-Full Assembly: Denne instruksen vil lede deg gjennom monteringen av Arduino-Teensy4-utvidelseskortet for Teensy 4.0 Du kan kjøpe en fra min Tindie-butikk her: https: //www.tindie.com/products/ cburgess129/arduin … Du kan bestille en Teensy 4 sammen med boen din
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 trinn
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
Montering av en Smapler V0002 Trinn for trinn: 5 trinn
Montering av en Smapler V0002 Trinn for trinn: En Smapler er en krets dedikert til produksjon av generativ lyd skapt av David Cuartielles og Ino Schlaucher fra BlushingBoy.org. Smapler v0002 -aka Singapore -utgaven- er ikke annet enn et Arduino -skjold som skal brukes til å spille funky ster
Montering av Smapler V0001r2 Trinn for trinn: 3 trinn
Montering av Smapler V0001r2 Trinn for trinn: Dette er en fotografisk guide for montering av Smapler v0001r2. Det er en frittstående Arduino-kompatibel krets med en innebygd SD-kortkontakt, en PS2-kontakt for mus/tastatur, en lydforsterker og en haug med I/O-pinner for sensorer. Med det kan du