Sisukord:

2. OSA - GPIO ARM MONTAAL - RGB - FUNKTSIOONIKÕNED - Lülitid: 6 sammu
2. OSA - GPIO ARM MONTAAL - RGB - FUNKTSIOONIKÕNED - Lülitid: 6 sammu

Video: 2. OSA - GPIO ARM MONTAAL - RGB - FUNKTSIOONIKÕNED - Lülitid: 6 sammu

Video: 2. OSA - GPIO ARM MONTAAL - RGB - FUNKTSIOONIKÕNED - Lülitid: 6 sammu
Video: Как определить какое насекомое вас укусило? 2024, Juuli
Anonim
2. OSA - GPIO VÄLI KOKKUPANEK - RGB - FUNKTSIOONIKÕNED - Lülitid
2. OSA - GPIO VÄLI KOKKUPANEK - RGB - FUNKTSIOONIKÕNED - Lülitid

1. osas õppisime, kuidas Texas Instrumentsi MSP432 LaunchPad arendusplaadil ühe punase LED -i ümber lülitada, kasutades C / C ++ asemel kokkupanekut.

Selles juhendis teeme midagi sarnast - kontrollime RGB LED -i, mis on ka samal plaadil.

Teel loodame täiendada oma teadmisi ARM -i kokkupanekust ja mitte lihtsalt lõbutseda mõne LED -i valgustamisega.

Samm: hüppame kohe sisse

Tõesti, esimene video ütleb kõik. Ei ole palju rohkem lisada.

Selle peamine mõte on koju viia idee, et iga MSP432 sisend-/väljundport koosneb plokist "registriaadressidest", mis omakorda koosnevad mitmest bitist.

Lisaks rühmitatakse bitid ortogonaalselt. See tähendab, et iga registriaadressi bit 0 viitab samale välisele sisend-/väljundpistikule.

Kordasime mõtet, et selle pordi jaoks on vaja mitu registriaadressi, et teha midagi isegi ühe bitti või tihvtiga.

Kuid sel juhul, kuna tegemist on RGB LED -iga, peame iga registriaadressi jaoks käsitlema kolme bitti.

Me kinnitasime, et vajame mitut registrit: DIR -registrit, SEL0 -registrit, SEL1 -registrit ja OUTPUT -registrit. Ja kolm bitti iga kord.

2. samm: täiustage koodi - lisage funktsioon

Image
Image

Nagu ülaltoodud etapis nägite, oli põhiprogrammi silmusel palju korduvat koodi, nimelt LED -ide väljalülitamisel.

Seega saame programmi lisada funktsiooni. Peame selle funktsiooni ikka helistama iga kord, kui tahame LED -id välja lülitada, kuid see põhjustab osa koodist ühe avalduse kokkuvarisemise.

Kui meie LED-väljalülituskood oleks rohkem juhistega rohkem seotud, oleks see olnud tõeline mälusäästja.

Osa sisseehitatud programmeerimisest ja mikrokontrolleritest on programmi suurusest palju teadlikumad.

Video selgitab.

Põhimõtteliselt lisame oma põhikoodile hargneva lause ja meil on veel üks koodiplokk, milleks on hargnemine. Ja kui oleme lõpetanud või funktsiooni lõpus, hargneme tagasi põhiprogrammi järgmise avalduse juurde.

Samm: lisage hõivatud silmuse viivitus

Lisage koodi jaotisesse Deklaratsioonid konstand, et hõlbustada soovitud aja määramist.

; kõik sõnad pärast semikoolonit (';') alustavad kommentaari.

; selle osa kood määrab väärtusele nime.; oleks võinud kasutada ka '.equ', kuid need on veidi erinevad.; '.equ' (ma arvan) ei saa muuta, samas kui '.set' tähendab, et saate; soovi korral muutke koodi „DLYCNT” väärtust hiljem.; 'DLYCNT' kasutatakse viivitusalamprogrammi loendusväärtusena. DLYCNT.seade 0x30000

Lisage uus viivitusfunktsioon:

viivitus:.asmfunc; alamprogrammi või funktsiooni „algus” algus.

MOV R5, #DLYCNT; laadige tuuma protsessoriregister R5 väärtusega „DLYCNT”. dlyloop; see tähistab viivitusahela algust. monteerija määrab aadressi. SUB R5, #0x1; lahutage praegusest väärtusest 1 CPU -registris R5. CMP R5, #0x0; võrrelge praegust väärtust R5 -s 0. BGT dlyloop; haru, kui väärtus R5 -s on suurem 0, etikett (aadress) 'dlyloop'. BX LR; kui me siia jõudsime, tähendab see, et R5 väärtus oli 0. tulu alamprogrammist..endasmfunc; tähistab alamprogrammi lõppu.

Seejärel käivitage põhiosas põhiahelas see viivitusfunktsioon või helistage sellele:

; see on põhiosa või põhifunktsiooni koodifragment (vt faili 'main.asm').

; see on tsükkel 'main' ja näitab, kuidas me seda uut 'delay' funktsiooni kutsume või kasutame.; '#REDON' ja '#GRNON' on samuti deklaratsioonid (konstandid) (vt 'main.asm' ülaosa).; need on lihtsalt lihtne viis RGB LED -i määratud värvi määramiseks. tsükkel MOV R0, #REDON; Punane - määrake tuumprotsessoriregister R0 väärtusega „REDON”. STRB R0, [R4]; põhiregister R4 oli varem seatud GPIO väljundaadressiga.; kirjutage, mis on R0, R4 määratud aadressile. BL viivitus; haru uuele „viivituse” funktsioonile. BL ledsoff; hargneb olemasoleva „ledsoff“funktsiooni juurde. BL viivitus; sama MOV R0, #GRNON; Roheline - sama STRB R0, [R4]; ja nii edasi. BL viivitus BL viitab BL viivitusele

Video läheb detailidesse.

4. samm: ARM -i arhitektuuriprotseduuri kõne standard (AAPCS)

Ilmselt on õige aeg midagi tutvustada. See on montaažikeele konventsioon. Tuntud ka kui ARM -arhitektuuri protseduurikutsestandard.

Selles on palju, kuid see on lihtsalt standard. See ei takista meid komplekteerimise programmeerimisest õppimast ja saame selle standardi tükid omaks võtta, kui tunneme end mõne õpitava mõistega mugavalt.

Vastasel juhul võib meile tunduda, et joome tohutust veevoolikust. Liiga palju informatsiooni.

Põhiregistrid

Kuna oleme MSP432 põhiregistritega tuttavaks saanud, proovime nüüd mõned neist standarditest üle võtta. Me järgime seda järgmise funktsiooni kirjutamisel (LED -i sisse- / väljalülitamine).

1) Me peaksime funktsiooni parameetrina kasutama R0. Kui soovime funktsiooni (alamprogrammi) väärtust edastada, peaksime selleks kasutama R0.

2) Kasutame linkiregistrit ettenähtud otstarbel - see hoiab aadressi, mis näitab, kuhu pärast alamprogrammi lõppu tagasi pöörduda.

Näete, kuidas me neid rakendame.

5. toiming: funktsioon parameetriga - pesastatud funktsioonid

Me saame puhastada oma koodi ja vähendada selle mälumahtu, kombineerides korduvaid sektsioone üheks funktsiooniks. Ainus erinevus põhiahela korpuses on see, et vajame parameetrit, et saaksime edastada erinevaid värve, mida soovime RGB LED -il näha.

Vaadake üksikasju videost. (vabandan pikkuse pärast)

Samm: GPIO sisend - lülitite lisamine

Teeme asja huvitavamaks. On aeg lisada meie kokkupanekuprogrammi lülitusjuhtimine.

Selles juhendis on pilte, mis näitavad, kuidas kaks pardalülitit on MSP432-ga ühendatud.

Põhimõtteliselt: lüliti 1 (SW1 või S1) on ühendatud P1.1 -ga ja lüliti 2 (SW2 või S2) on ühendatud P1.4 -ga.

See muudab asja natuke huvitavaks mitte ainult seetõttu, et tegeleme väljundite asemel sisenditega, vaid ka seetõttu, et need kaks lülitit hõivavad või hõivavad kaks sama registriaadressi ploki bitti, nagu ka üks punane LED, mis on väljund.

Tegelesime selles juhendis ühe punase LED -i ümberlülitamisega, nii et peame lihtsalt lülitite käsitsemiseks koodi lisama.

Port 1 Registreeri aadressiplokk

Pidage meeles, et me käsitlesime neid eelmises juhendis, kuid peame lisama uue:

  • Pordi 1 sisendregistri aadress = 0x40004C00
  • Pordi 1 väljundregistri aadress = 0x40004C02
  • Pordi 1 suuna registri aadress = 0x40004C04
  • Pordi 1 takisti lubamine Registreeri aadress = 0x40004C06
  • Port 1 Valige 0 Registreeri aadress = 0x40004C0A
  • Port 1 Valige 1 Registreeri aadress = 0x40004C0C

Kui kasutate porte sisenditena, on hea kasutada MSP432 sisemisi tõmbe- või tõmbetakistusi.

Kuna Launchpadi arendusplaat on ühendanud kaks lülitit maapinnaga (vajutamisel LOW), tähendab see, et peaksime kasutama tõmbega takistusi, et veenduda, et meil on tugev HIGH, kui neid ei vajutata.

Tõmba üles / alla tõmbetakistid

Nende lülitite sisendite tõmbetakistitega sidumiseks kulub kaks erinevat pordi 1 registriaadressi.

1) Kasutage pordi 1 takisti lubamise registrit (0x40004C06), et lihtsalt näidata, et soovite takistit (nende kahe bitti jaoks), 2) ja seejärel kasutage pordi 1 väljundregistrit (0x40004C02), et seada takistid tõmbe- või tõmbetugevuseks. Võib tunduda segane, et kasutame sisenditel väljundregistrit. Väljundregistril on peaaegu kahekordne eesmärk.

Niisiis võib väljundregister muul viisil uuesti märkimiseks saata väljundisse (nt üksik punane LED) kas HIGH või LOW ja / või seda kasutatakse sisendite jaoks tõmbe- või tõmbetakistuste seadistamiseks, AINULT siis, kui see funktsioon on lubatud registri Resistor-Enable kaudu.

Oluline ülaltoodu puhul-mis tahes väljundbiti LOW või HIGH saatmisel/seadistamisel peate samaaegselt säilitama sisendbittide üles-/allalaadimise oleku.

(video püüab selgitada)

Porti sisendbiti lugemine

  • Seadke GPIO funktsionaalsuseks SEL0 / SEL1
  • Seadistage DIR -register lülitusbittide sisendiks, kuid LED -i väljundiks (sama baidi jaoks)
  • Lülitage takistid sisse
  • Seadke need tõmbetakistiteks
  • Lugege sadamat
  • Võib -olla soovite filtreerida loetud väärtuse, et eraldada just vajalikud bitid (lülitid 1 ja 2)

Soovitan: