Turinys:

„GPIO ARM“MONTAVIMAS - T.I. ROBOTIKOS SISTEMOS MOKYMOS RINKINYS - LAB 6: 3 žingsniai
„GPIO ARM“MONTAVIMAS - T.I. ROBOTIKOS SISTEMOS MOKYMOS RINKINYS - LAB 6: 3 žingsniai

Video: „GPIO ARM“MONTAVIMAS - T.I. ROBOTIKOS SISTEMOS MOKYMOS RINKINYS - LAB 6: 3 žingsniai

Video: „GPIO ARM“MONTAVIMAS - T.I. ROBOTIKOS SISTEMOS MOKYMOS RINKINYS - LAB 6: 3 žingsniai
Video: Raspberry Pi 3: GPIO - введение не для начинающих – Часть 5.1 2024, Lapkritis
Anonim
„GPIO ARM“MONTAVIMAS - T. I. ROBOTIKOS SISTEMOS MOKYMOSI RINKINYS - LAB 6
„GPIO ARM“MONTAVIMAS - T. I. ROBOTIKOS SISTEMOS MOKYMOSI RINKINYS - LAB 6

Sveiki, Ankstesnėje instrukcijoje apie ARM surinkimo mokymąsi naudojant „Texas Instruments TI-RSLK“(naudojamas MSP432 mikrovaldiklis), dar žinomą kaip „Lab 3“, jei darote T. I. Žinoma, mes peržiūrėjome kai kurias labai paprastas instrukcijas, tokias kaip rašymas į registrą ir sąlyginis ciklas. Mes vykdėme egzekuciją naudodami „Eclipse IDE“.

Mažos mūsų vykdomos programos nieko nedarė, kad sąveikautų su išoriniu pasauliu.

Kažkaip nuobodu.

Pabandykime tai šiek tiek pakeisti šiandien, šiek tiek sužinodami apie įvesties/išvesties prievadus, ypač apie skaitmeninius GPIO kaiščius.

Taip atsitinka, kad šis MSP432 ateina į kūrimo plokštę, kurioje jau yra du mygtukiniai jungikliai, RGB šviesos diodas ir raudonas šviesos diodas, kurie visi yra susieti su kai kuriais GPIO prievadais.

Tai reiškia, kad mokydamiesi nustatyti ir manipuliuoti šiais kaiščiais per surinkimą, mes galime vizualiai pamatyti tuos efektus.

Daug įdomiau nei tiesiog pereiti per derintuvą.

(Mes vis dar žengsime žingsnį - tai bus mūsų „atidėjimo“funkcija):-D

1 žingsnis: Pabandykime rašyti / skaityti iš RAM

Prieš pradėdami prieiti ir valdyti GPIO, turėtume žengti nedidelį žingsnį.

Pradėkime tiesiog skaitydami ir rašydami standartiniu atminties adresu. Iš ankstesnio „Instructable“(žr. Ten esančius vaizdus) žinome, kad RAM prasideda nuo 0x2000 0000, todėl naudokimės šiuo adresu.

Mes perkelsime duomenis iš pagrindinio registro (R0) į 0x2000 0000.

Mes pradedame nuo pagrindinės failų struktūros ar surinkimo programos turinio. Norėdami sukurti surinkimo projektą naudodami TI „Code Composer Studio“(CCS) ir kai kuriuos pavyzdinius projektus, skaitykite šią instrukciją.

.nykštys

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (mūsų kodas bus čia); ------------------------------------------ ---------------------------------------.endasmfunc.end

Viršutiniame skyriuje noriu pridėti kažką naujo, jei buvo keletas deklaracijų (direktyvų). Vėliau paaiškės.

ACONST. Set 0x20000000; mes tai naudosime toliau (tai yra pastovus)

; Akivaizdu, kad „0x“reiškia tai, kas yra šešioliktainė.

Taigi mūsų pradinis failo turinys dabar atrodo taip:

.nykštys

.text.align 2 ACONST. set 0x20000000; mes tai naudosime toliau (tai yra konstanta); Akivaizdu, kad „0x“reiškia tai, kas nurodyta toliau, yra šešioliktainė reikšmė..global main.thumbfunc main main:.asmfunc; --------------------------------------- -------------------------------------------; (mūsų kodas bus čia); ------------------------------------------ ---------------------------------------.endasmfunc.end

Dabar, kai turime aukščiau pateiktą informaciją, pridėkime kodą tarp punktyrinių eilučių.

Mes pradedame rašyti į RAM vietą. Pirmiausia nustatysime duomenų modelį, vertę, kurią įrašysime į RAM. Šiai vertei ar duomenims nustatyti naudojame pagrindinį registrą.

Pastaba: atminkite, kad kodo atveju bet kuri eilutė su dvitaškiu (';') reiškia, kad visa tai yra komentaras po tos dvitaškio.

;-----------------------------------------------------------------------------------------------

; RAŠYMAS; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; pagrindiniame registre R0 bus duomenys, kuriuos norime įrašyti į RAM vietą.; Akivaizdu, kad „0x“reiškia tai, kas yra šešioliktainė.

Toliau pažvelkime į teiginius, kurie NEGALIMI.

; MOV MOV negalima naudoti norint įrašyti duomenis į RAM vietą.

; MOV skirtas tik neatidėliotiniems registro duomenims; arba iš vieno registro į kitą; y., MOV R1, R0.; STR turi naudoti STR.; STR R0, = PRIEŠ; Netinkamas išraiškos terminas („=“); STR R0, 0x20000000; Neteisėtas parduotuvės instrukcijų adresavimo režimas; STR R0, PRIEŠ; Neteisėtas parduotuvės instrukcijų adresavimo režimas

Per daug nepaaiškinę, mes bandėme naudoti tą „ACONST“aukščiau. Iš esmės tai yra stand-in arba konstanta, o ne pažodinė vertė, tokia kaip 0x20000000.

Mes negalėjome rašyti, kad galėtume rašyti į RAM vietą naudodami aukščiau pateiktą informaciją. Pabandykime ką nors kita.

; atrodo, kad turime naudoti kitą registrą, kuriame yra RAM vieta

; išsaugoti toje RAM vietoje MOV R1, #0x20000000; nustatykite RAM vietą (ne jos turinį, bet vietą) į R1.; Akivaizdu, kad „0x“reiškia tai, kas yra šešioliktainė. STR R0, [R1]; parašykite, kas yra R0 (0x55) į RAM (0x20000000), naudodami R1.; mes naudojame kitą registrą (R1), kuris turi RAM vietos adresą; Norėdami parašyti į tą RAM vietą.

Kitas būdas tai padaryti, bet vietoj pažodinio adreso reikšmės naudojama „ACONST“:

; darysime tai, kas išdėstyta aukščiau, bet vietoj pažodinės RAM vietos vertės naudokime simbolį.

; norime naudoti „ACONST“kaip „0x20000000“stendą.; vis tiek turime padaryti „#“, kad reikštų tiesioginę vertę; Taigi (žr. viršuje) turėjome naudoti „.set“direktyvą.; Norėdami tai įrodyti, pakeiskite duomenų modelį R0. MOV R0, #0xAA; gerai, mes pasiruošę rašyti į RAM naudodami simbolį, o ne pažodinę adreso reikšmę MOV R1, #ACONST STR R0, [R1]

Vaizdo įraše pateikiama išsamesnė informacija, taip pat skaitymas iš atminties vietos.

Taip pat galite peržiūrėti pridėtą šaltinio.asm failą.

2 žingsnis: kai kuri pagrindinė uosto informacija

Image
Image
Kai kuri pagrindinė uosto informacija
Kai kuri pagrindinė uosto informacija
Kai kuri pagrindinė uosto informacija
Kai kuri pagrindinė uosto informacija

Dabar, kai turime gerą idėją, kaip rašyti / skaityti iš RAM vietos, tai padės mums geriau suprasti, kaip valdyti ir naudoti GPIO kaištį

Taigi, kaip mes sąveikaujame su GPIO kaiščiais? Iš ankstesnio žvilgsnio į šį mikrovaldiklį ir jo ARM instrukcijas mes žinome, kaip elgtis su jo vidiniais registrais, ir žinome, kaip sąveikauti su atminties (RAM) adresais. Bet GPIO kaiščiai?

Taip atsitinka, kad tie kaiščiai yra susieti su atmintimi, todėl galime juos traktuoti panašiai kaip atminties adresus.

Tai reiškia, kad turime žinoti, kokie tie adresai.

Žemiau yra uosto pradžios adresai. Beje, MSP432 „prievadas“yra kaiščių rinkinys, o ne tik vienas kaištis. Jei esate susipažinę su „Raspberry Pi“, manau, kad tai kitokia nei čia.

Mėlyni apskritimai aukščiau esančiame paveikslėlyje rodo dviejų jungiklių ir šviesos diodų užrašą lentoje. Mėlynos linijos nurodo tikruosius šviesos diodus. Mums nereikės liesti antgalių antgalių.

Žemiau paryškinti mums rūpimus uostus.

  • GPIO P1: 0x4000 4C00 + 0 (lygūs adresai)
  • GPIO P2: 0x4000 4C00 + 1 (nelyginiai adresai)
  • GPIO P3: 0x4000 4C00 + 20 (lygūs adresai)
  • GPIO P4: 0x4000 4C00 + 21 (nelyginiai adresai)
  • GPIO P5: 0x4000 4C00 + 40 (lygūs adresai)
  • GPIO P6: 0x4000 4C00 + 41 (nelyginiai adresai)
  • GPIO P7: 0x4000 4C00 + 60 (lygūs adresai)
  • GPIO P8: 0x4000 4C00 + 61 (nelyginiai adresai)
  • GPIO P9: 0x4000 4C00 + 80 (lygūs adresai)
  • GPIO P10: 0x4000 4C00 + 81 (nelyginiai adresai)

Mes dar nebaigėme. Mums reikia daugiau informacijos.

Norėdami valdyti uostą, mums reikia kelių adresų. Štai kodėl aukščiau pateiktame sąraše matome „lyginius adresus“arba „nelyginius adresus“.

I/O registro adresų blokai

Mums reikės kitų adresų, tokių kaip:

  • 1 prievado įvesties registro adresas = 0x40004C00
  • 1 prievado išvesties registro adresas = 0x40004C02
  • 1 prievado krypties registro adresas = 0x40004C04
  • 1 prievadas Pasirinkite 0 Registruoti adresą = 0x40004C0A
  • 1 prievadas Pasirinkite 1 Registro adresas = 0x40004C0C

Ir mums gali prireikti kitų.

Gerai, dabar mes žinome GPIO registro adresų diapazoną, kad valdytume vieną raudoną šviesos diodą.

Labai svarbi pastaba: kiekvienas MSP432 „LaunchPad“plokštės įvesties/išvesties prievadas yra kelių (dažniausiai 8) kaiščių ar linijų rinkinys ir kiekvienas gali būti atskirai nustatytas kaip įvestis arba išvestis.

Tai reiškia, kad, pavyzdžiui, jei nustatote reikšmes „1 prievado registro adresui“, turite būti susirūpinę, kurį bitą (ar bitus) nustatote ar keičiate tuo adresu. Daugiau apie tai vėliau.

GPIO prievado programavimo seka

Galutinis gabalas, kurio mums reikia, yra procesas ar algoritmas, kurį reikia naudoti LED valdymui.

Vienkartinis inicijavimas:

  • Konfigūruokite P1.0 (P1SEL1REG: P1SEL0REG registras) <--- 0x00, 0x00 normaliam GPIO funkcionalumui.
  • Nustatykite P1DIRREG krypties registro bitą 1 kaip išvestį arba HIGH.

Ciklas:

Norėdami įjungti raudoną šviesos diodą, įrašykite HIGH į P1OUTREG registro 0 bitą

  • Skambinkite atidėjimo funkciją
  • Įrašykite LOW į P1OUTREG registro bitą 0, kad išjungtumėte raudoną šviesos diodą
  • Skambinkite atidėjimo funkciją
  • Pakartokite ciklą

Kokia įvesties / išvesties funkcija (konfigūruoti SEL0 ir SEL1)

Daugelis „LaunchPad“kaiščių gali būti naudojami kelis kartus. Pavyzdžiui, tas pats kaištis gali būti standartinis skaitmeninis GPIO arba taip pat gali būti naudojamas UART arba I2C nuosekliajame ryšyje.

Norėdami naudoti bet kokią konkrečią to kaiščio funkciją, turite pasirinkti tą funkciją. Turite sukonfigūruoti kaiščio funkciją.

Aukščiau yra šio žingsnio vaizdas, kuriame bandoma vizualiai paaiškinti šią sąvoką.

SEL0 ir SEL1 adresai sudaro porų derinį, kuris atlieka tam tikros funkcijos / funkcijos pasirinkimo funkciją.

Savo tikslams norime standartinio skaitmeninio GPIO bitui 0. Tai reiškia, kad mums reikia 0 bitų, kad SEL0 ir SEL1 būtų LOW.

Uosto programavimo seka (vėl)

1. Įrašykite 0x00 į P1 SEL 0 registrą (adresas 0x40004C0A). Tai nustato LOW bitui 0

2. Įrašykite 0x00 į P1 SEL 1 registrą (adresas 0x40004C0C). Tai nustato LOW bitui 0, nustatymą GPIO.

3. Įrašykite 0x01 į P1 DIR registrą (adresas 0x40004C04). Tai nustato HIGH bitui 0, o tai reiškia OUTPUT.

4. Įjunkite šviesos diodą, parašę 0x01 į P1 OUTPUT Register (adresas 0x40004C02)

5. Atlikite tam tikrą uždelsimą (arba atlikite tik vieną žingsnį derindami)

6. Išjunkite šviesos diodą, parašę 0x00 į P1 OUTPUT Register (adresas 0x40004C02)

7. Atlikite tam tikrą uždelsimą (arba atlikite tik vieną žingsnį derindami)

8. Pakartokite 4–7 veiksmus.

Susijęs vaizdo įrašas, skirtas šiam žingsniui, parodo visą procesą tiesioginėje demonstracinėje versijoje, kai mes vieną žingsnį atliekame ir kalbame apie visas surinkimo instrukcijas ir parodome LED veiksmą. Atleiskite vaizdo įrašo trukmę.

3 veiksmas: ar pastebėjote vieną vaizdo įrašo trūkumą?

Vaizdo įraše, kuriame apžvelgiamas visas šviesos diodų programavimo ir apšvietimo procesas, pagrindiniame cikle buvo papildomas žingsnis, kuris galėjo būti perkeltas į vienkartinį inicijavimą.

Dėkojame, kad skyrėte laiko šiai instrukcijai.

Kitas pratęsia tai, ką mes čia pradėjome.

Rekomenduojamas: