Satura rādītājs:

2. DAĻA - GPIO ARM MONTĀŽA - RGB - FUNKCIJU ZVANI - Slēdži: 6 soļi
2. DAĻA - GPIO ARM MONTĀŽA - RGB - FUNKCIJU ZVANI - Slēdži: 6 soļi

Video: 2. DAĻA - GPIO ARM MONTĀŽA - RGB - FUNKCIJU ZVANI - Slēdži: 6 soļi

Video: 2. DAĻA - GPIO ARM MONTĀŽA - RGB - FUNKCIJU ZVANI - Slēdži: 6 soļi
Video: #92 Комплект осциллографа JYE ⚡ (обзор и сборка DSO150) 2024, Jūlijs
Anonim
2. DAĻA - GPIO ARM MONTĀŽA - RGB - FUNKCIJU ZVANI - Slēdži
2. DAĻA - GPIO ARM MONTĀŽA - RGB - FUNKCIJU ZVANI - Slēdži

Pirmajā daļā mēs uzzinājām, kā pārslēgt vienu sarkano gaismas diodi uz Texas Instruments MSP432 LaunchPad izstrādes plates, izmantojot montāžu, nevis C / C ++.

Šajā pamācībā mēs darīsim kaut ko līdzīgu - kontrolēsim RGB LED, kas atrodas arī tajā pašā panelī.

Pa ceļam mēs ceram papildināt savas zināšanas par ARM montāžu, nevis tikai izklaidēties, apgaismojot dažas gaismas diodes.

1. solis: lecam tieši iekšā

Patiešām, pirmais video izsaka visu. Nav daudz ko piebilst.

Tās galvenais mērķis ir virzīt mājās domu, ka katrs MSP432 I/O ports sastāv no "reģistra" adrešu bloka, kas savukārt sastāv no vairākiem bitiem.

Turklāt biti ir sagrupēti ortogonālā veidā. Tas ir, katras reģistra adreses 0 bits attiecas uz to pašu ārējo I/O tapu.

Mēs atkārtojām domu, ka šai ostai ir vajadzīgas vairākas reģistra adreses, lai kaut ko paveiktu pat ar vienu bitu vai tapu.

Bet šajā gadījumā, tā kā mums ir darīšana ar RGB gaismas diodi, mums ir jārisina trīs biti katrai reģistra adresei.

Mēs apstiprinājām, ka mums ir nepieciešami vairāki reģistri: DIR reģistrs, SEL0 reģistrs, SEL1 reģistrs un OUTPUT reģistrs. Un trīs biti katru reizi.

2. darbība. Uzlabojiet kodu - pievienojiet funkciju

Image
Image

Kā redzējāt iepriekšējā solī, galvenās programmas cilpai bija daudz atkārtotu kodu, proti, kad mēs izslēdzam gaismas diodes.

Tātad mēs varam programmai pievienot funkciju. Mums joprojām ir jāizsauc šī funkcija katru reizi, kad vēlamies izslēgt gaismas diodes, taču tas izraisa dažu koda sabrukumu līdz vienam paziņojumam.

Ja mūsu LED izslēgšanas kods būtu vairāk iesaistīts daudzos citos norādījumos, tas būtu īsts atmiņas taupītājs.

Daļa iegultās programmēšanas un mikrokontrolleru daudz labāk apzinās programmas lielumu.

Video paskaidro.

Būtībā mēs savam galvenajam kodam pievienojam atzarojošu paziņojumu, un mums ir vēl viens koda bloks, kas ir funkcija, ar kuru mēs sazarojamies. Un tad, kad esam pabeiguši vai funkcijas beigās, mēs atgriežamies pie nākamā paziņojuma galvenajā programmā.

3. darbība: pievienojiet aizņemtā cikla aizturi

Koda sadaļā Deklarācijas pievienojiet konstanti, lai būtu vieglāk pielāgot vēlamo laiku:

; jebkuri vārdi pēc semikolu (';') sāk komentāru.

; kods šajā daļā piešķir vērtībai nosaukumu.; jūs varētu arī izmantot “.equ”, taču tie ir nedaudz atšķirīgi.; '.equ' (es domāju) nevar mainīt, turpretī '.set' nozīmē, ka jūs varat; ja vēlaties, vēlāk mainiet “DLYCNT” vērtību kodā.; 'DLYCNT' tiks izmantota kā atpakaļskaitīšanas vērtība aizkaves apakšprogrammā. DLYCNT. Kopa 0x30000

Pievienojiet jaunu aizkaves funkciju:

kavēšanās:.asmfunc; “kavēšanās” apakšprogrammas vai funkcijas sākums.

MOV R5, #DLYCNT; ielādējiet centrālo procesora reģistru R5 ar vērtību, kas piešķirta “DLYCNT”. dlyloop; tas iezīmē kavēšanās cikla sākumu. montētājs nosaka adresi. SUB R5, #0x1; atņemiet 1 no pašreizējās vērtības centrālajā CPU reģistrā R5. CMP R5, #0x0; salīdzināt pašreizējo vērtību R5 ar 0. BGT dlyloop; atzars, ja R5 vērtība ir lielāka par 0, lai iezīmētu (adrese) “dlyloop”. BX LR; ja mēs nokļuvām šeit, tas nozīmē, ka R5 vērtība bija 0. atdeve no apakšprogrammas..endasmfunc; iezīmē apakšprogrammas beigas.

Pēc tam galvenajā korpusā, galvenajā cilpā, izsauciet vai izsauciet šo aizkaves funkciju:

; tas ir koda fragments no galvenās daļas vai galvenās funkcijas (sk. failu 'main.asm').

; šī ir cilpa “galvenajā” un parāda, kā mēs izsaucam vai izmantojam šo jauno “aiztures” funkciju.; '#REDON' un '#GRNON' ir arī deklarācijas (konstantes) (sk. 'main.asm' augšdaļu).; tie ir vienkāršs veids, kā iestatīt norādīto RGB LED krāsu. cilpa MOV R0, #REDON; sarkans - iestatiet galveno CPU reģistru R0 ar vērtību, kas piešķirta 'REDON'. STRB R0, [R4]; galvenais reģistrs R4 iepriekš bija iestatīts ar GPIO izejas adresi.; uzrakstiet R0 norādīto adresi R4 norādītajā adresē. BL aizkave; atzars uz jauno “aizkaves” funkciju. BL ledsoff; atzars uz jau esošo “ledsoff” funkciju. BL aizkave; tāpat MOV R0, #GRNON; zaļa - tāpat STRB R0, [R4]; un tā tālāk. BL aizture BL ledsoff BL aizture

Video ir detalizēts.

4. darbība: ARM arhitektūras procedūras izsaukuma standarts (AAPCS)

Iespējams, ir īstais laiks kaut ko ieviest. Tā ir montāžas valodas konvencija. Pazīstams arī kā procedūras izsaukuma standarts ARM arhitektūrai.

Šeit ir daudz, bet tas ir tikai standarts. Tas netraucē mums apgūt montāžas programmēšanu, un mēs varam pieņemt šī standarta gabalus, kad ejam, kad jūtamies ērti ar dažiem jēdzieniem, kurus mācāmies.

Pretējā gadījumā mums varētu šķist, ka dzeram no milzīgas ūdens šļūtenes. Pārāk daudz informācijas.

Galvenie reģistri

Tā kā esam iepazinušies ar MSP432 galvenajiem reģistriem, mēģināsim tagad pieņemt dažus no šiem standartiem. Mēs to ievērosim, rakstot nākamo funkciju (ieslēgt / izslēgt LED).

1) Mums ir jāizmanto R0 kā funkcijas parametrs. Ja mēs vēlamies funkcijai (apakšprogrammai) nodot vērtību, mums jāizmanto R0.

2) Mums ir jāizmanto saišu reģistrs paredzētajam mērķim - tajā ir adrese, kas norāda, kur atgriezties pēc apakšprogrammas pabeigšanas.

Jūs redzēsit, kā mēs tos piemērojam.

5. darbība: funkcija ar parametru - ligzdotas funkcijas

Mēs varam sakopt savu kodu un samazināt atmiņas apjomu, ko tas aizņem, apvienojot atkārtotas sadaļas vienā funkcijā. Vienīgā atšķirība galvenajā cilpas korpusā ir tāda, ka mums ir nepieciešams parametrs, lai mēs varētu nodot dažādas RGB gaismas diodes dažādās krāsās.

Lai iegūtu sīkāku informāciju, apskatiet videoklipu. (atvainojos par garumu)

6. darbība: GPIO ievade - pievienojiet slēdžus

Padarīsim to interesantāku. Ir pienācis laiks mūsu montāžas programmai pievienot slēdzi.

Šajā pamācībā ir attēli, kas parāda, kā divi borta slēdži ir savienoti ar MSP432.

Būtībā: 1. slēdzis (SW1 vai S1) ir pievienots P1.1, un 2. slēdzis (SW2 vai S2) ir pievienots P1.4.

Tas padara lietas mazliet interesantas ne tikai tāpēc, ka mēs nodarbojamies ar ieejām, nevis izejām, bet arī tāpēc, ka šie divi slēdži aizņem vai aizņem divus bitus no viena un tā paša reģistra adrešu bloka, kā arī viena sarkanā gaismas diode, kas ir izeja.

Šajā instrukcijā mēs izskatījām viena sarkanā gaismas diodes pārslēgšanu, tāpēc mums vienkārši jāpievieno kods, lai apstrādātu slēdžus.

1. ports Reģistrēt adrešu bloku

Atcerieties, ka mēs tos apskatījām iepriekšējā Instructable, bet mums ir jāiekļauj jauns:

  • 1. porta ievades reģistra adrese = 0x40004C00
  • 1. porta izejas reģistra adrese = 0x40004C02
  • 1. porta virziena reģistra adrese = 0x40004C04
  • 1. porta rezistors Iespējot reģistra adresi = 0x40004C06
  • 1. ports Izvēlieties 0 Reģistrēt adresi = 0x40004C0A
  • Ports 1 Izvēlieties 1 Reģistrēt adresi = 0x40004C0C

Izmantojot portus kā ieejas, ir labi izmantot MSP432 iekšējos pievilkšanas vai nolaišanas rezistorus.

Tā kā Launchpad izstrādes dēlis ir savienojis abus slēdžus ar zemi (nospiežot LOW), tas nozīmē, ka mums jāizmanto pull UP rezistori, lai pārliecinātos, ka mums ir stabils HIGH, kad tie netiek nospiesti.

Velciet uz augšu / uz leju rezistorus

Ir nepieciešamas divas dažādas 1. porta reģistra adreses, lai šīs slēdža ieejas piesaistītu pievelkamiem rezistoriem.

1) Izmantojiet 1. porta rezistoru iespējošanas reģistru (0x40004C06), lai vienkārši norādītu, ka vēlaties rezistorus (šiem diviem bitiem), 2) un pēc tam izmantojiet 1. izejas izvades reģistru (0x40004C02), lai iestatītu rezistorus vai nu uz leju, vai uz leju. Var šķist mulsinoši, ka mēs ieejās izmantojam izvades reģistru. Izvades reģistram ir gandrīz divējāds mērķis.

Tātad, lai atkārtoti norādītu citā veidā, izvades reģistrs var nosūtīt HIGH vai LOW uz izeju (piemēram, vienu sarkanu gaismas diodi), un / vai to izmanto, lai iestatītu ieejas atvilkšanas vai nolaišanas rezistorus, BET TIKAI, ja šī funkcija ir iespējota, izmantojot rezistoru iespējošanas reģistru.

Svarīgi iepriekš-nosūtot/iestatot LOW vai HIGH uz jebkuru izvades bitu, jums vienlaikus jāuztur ievades bitu vilkšanas/nolaišanas stāvoklis.

(video mēģina izskaidrot)

Porta ievades bita lasīšana

  • GPIO funkcionalitātei iestatiet SEL0 / SEL1
  • Iestatiet DIR reģistru kā slēdža bitu ievadi, bet kā gaismas diodes izeju (vienlaicīgi vienā baitā)
  • Iespējot rezistorus
  • Iestatiet tos kā pievilkšanas rezistorus
  • Lasiet ostu
  • Iespējams, vēlēsities filtrēt nolasīto vērtību, lai izolētu tikai nepieciešamos bitus (1. un 2. slēdzis)

Ieteicams: