![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](https://i.howwhatproduce.com/images/002/image-3456-49-j.webp)
Satura rādītājs:
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59
![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](https://i.howwhatproduce.com/images/002/image-3456-50-j.webp)
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šā
![](https://i.ytimg.com/vi/Q24ellFqF5s/hqdefault.jpg)
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](https://i.howwhatproduce.com/images/002/image-3456-54-j.webp)
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
![](https://i.ytimg.com/vi/RaIEwUl5big/hqdefault.jpg)
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
![](https://i.ytimg.com/vi/sCYKMlXPAFM/hqdefault.jpg)
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:
AM radio uztvērēja komplekta montāža: 9 soļi (ar attēliem)
![AM radio uztvērēja komplekta montāža: 9 soļi (ar attēliem) AM radio uztvērēja komplekta montāža: 9 soļi (ar attēliem)](https://i.howwhatproduce.com/images/002/image-4619-j.webp)
AM radio uztvērēja komplekta montāža: Man patīk montēt dažādus elektroniskos komplektus. Mani fascinē radio. Pirms mēnešiem es internetā atradu lētu AM radio uztvērēja komplektu. Es to pasūtīju, un pēc standarta gaidīšanas apmēram mēnesi tas nāca. Komplekts ir DIY septiņu tranzistoru superhet
1. daļa ARM asambleja TI RSLK Robotikas apguves mācību programma 7. STM32 kodols: 16 soļi
![1. daļa ARM asambleja TI RSLK Robotikas apguves mācību programma 7. STM32 kodols: 16 soļi 1. daļa ARM asambleja TI RSLK Robotikas apguves mācību programma 7. STM32 kodols: 16 soļi](https://i.howwhatproduce.com/images/009/image-25594-j.webp)
1. daļa ARM asambleja TI RSLK Robotikas apguves mācību programma 7. STM32 Nucleo: Šīs pamācības uzmanības centrā ir STM32 Nucleo mikrokontrolleris. Motivācija tam, lai varētu izveidot montāžas projektu no kailiem kauliem. Tas palīdzēs mums iedziļināties un izprast MSP432 Launchpad projektu (TI-RSLK), kuram ir
Interaktīvi vēja zvani: 4 soļi (ar attēliem)
![Interaktīvi vēja zvani: 4 soļi (ar attēliem) Interaktīvi vēja zvani: 4 soļi (ar attēliem)](https://i.howwhatproduce.com/images/002/image-3858-11-j.webp)
Interaktīvie vēja zvani: mūžīgie zvani ir paplašinātu vēja zvanu komplekts, kas piedāvā eskapistisku pieredzi, kur jūsu sadarbība veido skaņu ainavu. Tā kā iekštelpās nav vēja, zvaniem ir nepieciešama auditorijas mijiedarbība, lai maigi tiem pieskartos vai vilktos un mudinātu/n
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 soļi
![Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 soļi Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM: 4 soļi](https://i.howwhatproduce.com/images/004/image-10492-21-j.webp)
Xbox 360 ROBOTIC ARM [ARDUINO]: AXIOM ARM:
Automātiskie cauruļveida zvani: 6 soļi (ar attēliem)
![Automātiskie cauruļveida zvani: 6 soļi (ar attēliem) Automātiskie cauruļveida zvani: 6 soļi (ar attēliem)](https://i.howwhatproduce.com/images/003/image-8193-46-j.webp)
Automātiskie cauruļveida zvani: šajā pamācībā ir izskaidroti galvenie soļi, kurus es veicu, lai izveidotu 2006. gadā uzbūvēto automātisko cauruļveida zvanu komplekta pirmo prototipu. Automātisko mūzikas instrumentu funkcijas ir šādas: - 12 zvani (12 cauruļveida zvani) - Katrs zvana signāls atskaņo vienu Nē