Sadržaj:

DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka

Video: DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka

Video: DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači: 6 koraka
Video: P1 ESP01 4CH Relay Module (Subtittled) 2024, Srpanj
Anonim
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači
DIO 2 - SKLOP GPIO ARM - RGB - FUNKCIONI POZIVI - Prekidači

U prvom dijelu naučili smo kako prebaciti jednu crvenu LED lampicu na razvojnu ploču MSP432 LaunchPad iz Texas Instruments, koristeći sklop umjesto C / C ++.

U ovom Instructableu ćemo učiniti nešto slično - upravljati RGB LED diodom koja je također na istoj ploči.

Usput se nadamo da ćemo proširiti svoje znanje o ARM montaži, a ne samo se zabaviti paljenjem nekih LED dioda.

Korak 1: Idemo odmah

Zaista, prvi video govori sve. Nema se puno više za dodati.

Njegova glavna točka je potaknuti ideju da se svaki I/O port na MSP432 sastoji od bloka adresa "registra", koje se zauzvrat sastoje od nekoliko bitova.

Nadalje, bitovi su grupirani na ortogonalni način. To jest, bit 0 svake adrese registra odnosi se na isti vanjski I/O pin.

Ponovili smo ideju da je za taj port potrebno nekoliko adresa registra, da bi se učinilo nešto samo s jednim bitom ili pin -om.

No, u ovom slučaju, budući da imamo posla s RGB LED, moramo se pozabaviti s tri bita za svaku adresu registra.

Pojačali smo da nam je potrebno nekoliko registara: DIR registar, SEL0 registar, SEL1 registar i OUTPUT registar. I svaki put po tri bita.

Korak 2: Poboljšajte kôd - dodajte funkciju

Image
Image

Kao što ste vidjeli u prethodnom koraku, glavna programska petlja imala je mnogo ponavljanog koda, naime, kada isključimo LED.

Dakle, programu možemo dodati funkciju. I dalje moramo pozivati tu funkciju svaki put kad želimo isključiti LED diode, ali to uzrokuje da se dio koda sruši u jednu izjavu.

Da je naš LED-off kod bio više uključen u mnogo više uputa, ovo bi zaista uštedjelo memoriju.

Dio ugrađenog programiranja i mikrokontrolera mnogo je svjesniji veličine programa.

Video objašnjava.

U biti, našem glavnom kodu dodajemo naredbu o grananju, a imamo i drugi blok koda koji je funkcija na koju se granamo. I onda kad završimo ili na kraju funkcije, vraćamo se na sljedeću naredbu unutar glavnog programa.

Korak 3: Dodajte kašnjenje zauzetosti

U odjeljku Deklaracije koda dodajte konstantu kako biste olakšali ugađanje za željeno vrijeme:

; sve riječi iza točke sa zarezom (';') započinju komentar.

; kôd u ovom dijelu dodjeljuje ime vrijednosti.; mogli ste koristiti i '.equ', ali oni su malo drugačiji.; '.equ' (mislim) se ne može promijeniti, dok '.set' znači da možete; promijenite vrijednost 'DLYCNT' kasnije u kodu ako želite.; 'DLYCNT' će se koristiti kao vrijednost odbrojavanja u potprogrami odgode. DLYCNT.postavljeno 0x30000

Dodajte novu funkciju odgode:

kašnjenje:.asmfunc; početak podprograma ili funkcije 'odgode'.

MOV R5, #DLYCNT; učitati jezgru procesora učitavanja jezgre R5 s vrijednošću dodijeljenom 'DLYCNT'. dlyloop; ovo označava početak petlje odgode. asembler određuje adresu. SUB R5, #0x1; oduzeti 1 od trenutne vrijednosti u registru jezgre procesora R5. CMP R5, #0x0; usporedite trenutnu vrijednost u R5 s 0. BGT dlyloop; granati ako je vrijednost u R5 veća 0, za označavanje (adresu) 'dlyloop'. BX LR; ako smo došli ovdje, znači da je vrijednost R5 bila 0. povratak iz potprograma..endasmfunc; označava kraj potprograma.

Zatim u glavnom tijelu, unutar glavne petlje, pozovite ili pozovite tu funkciju odgode:

; ovo je fragment koda, glavnog tijela ili glavne funkcije (vidi datoteku 'main.asm').

; ovo je petlja u 'main' i pokazuje kako zovemo ili koristimo tu novu 'delay' funkciju.; "#REDON" i "#GRNON" također su deklaracije (konstante) (vidi vrh "main.asm").; oni su samo jednostavan način za postavljanje određene boje RGB LED. petlja MOV R0, #REDON; Crveno - postavlja registar procesora jezgre R0 s vrijednošću dodijeljenom 'REDON'. STRB R0, [R4]; registar jezgre R4 prethodno je postavljen s izlaznom adresom GPIO.; upišite ono što je u R0, na adresu navedenu u R4. BL kašnjenje; pređite na novu funkciju 'odgode'. BL ledsoff; grana na već postojeću funkciju 'ledsoff'. BL kašnjenje; isto MOV R0, #GRNON; zeleno - isto tako STRB R0, [R4]; i tako dalje. BL kašnjenje BL ledsoff BL kašnjenje

Video ide u detalje.

Korak 4: Standard poziva za proceduru ARM arhitekture (AAPCS)

Vjerojatno je dobro vrijeme da nešto predstavite. To je konvencija na skupštinskom jeziku. Također poznat kao Standard poziva procedura za ARM arhitekturu.

Ima tu puno toga, ali to je samo standard. To nas ne sprječava u učenju programiranja montaže i možemo usvojiti dijelove tog standarda u hodu, nakon što se osjećamo ugodno s nekim konceptima koje učimo.

U suprotnom bismo se mogli osjećati kao da pijemo iz ogromnog crijeva za vodu. Previše informacija.

Temeljni registri

Budući da smo se upoznali s jezgrenim registrima MSP432, pokušajmo sada usvojiti neke od ovih standarda. Skladit ćemo se s tim kad upišemo sljedeću funkciju (uključivanje / isključivanje LED diode).

1) Trebali bismo koristiti R0 kao parametar funkcije. Ako želimo prenijeti vrijednost u funkciju (potprogram), za to bismo trebali koristiti R0.

2) Link Register koristit ćemo za njegovu namjenu - on sadrži adresu koja pokazuje kamo se vratiti nakon što potprogram dovrši.

Vidjet ćete kako ih primjenjujemo.

Korak 5: Funkcija s parametrom - ugniježđene funkcije

Naš kôd možemo očistiti i smanjiti količinu memorije koju zauzima kombiniranjem ponovljenih odjeljaka u jednu funkciju. Jedina razlika u tijelu glavne petlje je ta što nam je potreban parametar kako bismo mogli proslijediti različite boje koje želimo vidjeti RGB LED.

Za detalje pogledajte video. (oprostite na duljini)

Korak 6: GPIO ulaz - Dodajte prekidače

Učinimo to zanimljivijim. Vrijeme je da u naš montažni program dodamo kontrolu prekidača.

Ovaj Instructable ima slike koje prikazuju kako su dva ugrađena prekidača spojena na MSP432.

U biti: Prekidač 1 (SW1 ili S1) spojen je na P1.1, a Prekidač 2 (SW2 ili S2) spojen je na P1.4.

To čini stvari pomalo zanimljivima ne samo zato što se bavimo ulazima umjesto izlazima, već i zato što ova dva prekidača zauzimaju ili zauzimaju dva bita istog bloka adrese registra kao i jedna crvena LED dioda koja je izlaz.

Bavili smo se prebacivanjem jedne crvene LED diode u ovom Instructableu, pa samo moramo dodati kôd za rukovanje prekidačima.

Blok adresa porta 1 registra

Upamtite da smo ovo pokrili u prethodnom Instructable, ali moramo uključiti novi:

  • Port 1 Ulazna adresa registra = 0x40004C00
  • Port 1 Izlazna adresa registra = 0x40004C02
  • Luka 1 Adresa registra smjera = 0x40004C04
  • Omogući otpornik priključka 1 Adresa registra = 0x40004C06
  • Ulaz 1 Odaberite 0 Adresa registra = 0x40004C0A
  • Ulaz 1 Odaberite 1 Adresa registra = 0x40004C0C

Kada koristite portove kao ulaze, dobro je koristiti unutarnje pull-up ili pull-down otpornike MSP432.

Budući da je razvojna ploča Launchpada ožičila dva prekidača na masu (LOW pri pritisku), to znači da bismo trebali koristiti pull UP otpornike kako bismo bili sigurni da imamo čvrstu HIGH kad nisu pritisnuti.

Povucite / povucite otpornike

Potrebne su dvije različite adrese registra 1 porta za povezivanje tih ulaza prekidača s otpornicima.

1) Pomoću registra Port 1 Resistor-Enable (0x40004C06) samo označite da želite otpornike (za ta dva bita), 2), a zatim pomoću izlaznog registra porta 1 (0x40004C02) postavite otpornike na povlačenje ili na povlačenje. Može se činiti zbunjujućim da koristimo izlazni registar na ulazima. Izlazni registar ima gotovo dvostruku namjenu.

Dakle, za ponovno postavljanje na drugi način, izlazni registar može ili poslati HIGH ili LOW na izlaz (kao što je pojedinačna crvena LED), i / ili se koristi za postavljanje pull-up ili pull-down otpornika za ulaze, ALI SAMO ako je ta značajka omogućena preko registra Resistor-Enable.

Važno u gore navedenom-prilikom slanja/postavljanja LOW ili HIGH na bilo koji izlazni bit, morate istovremeno održavati pull-up/pull-down stanje ulaznih bitova.

(video pokušava objasniti)

Očitavanje ulaznog bita porta

  • Postavite SEL0 / SEL1 za GPIO funkcionalnost
  • Postavite DIR registar kao ulaz za bitove prekidača, ali kao izlaz za LED (istovremeno u istom bajtu)
  • Omogućite otpornike
  • Postavite ih kao pull-up otpornike
  • Pročitajte port
  • Možda ćete htjeti filtrirati očitanu vrijednost kako biste izdvojili samo potrebne bitove (prekidač 1 i 2)

Preporučeni: