Sisällysluettelo:

GPIO ARM ASENNUS - T.I. ROBOTIIKKAJÄRJESTELMÄN OPITUSSARJA - LAB 6: 3 vaihetta
GPIO ARM ASENNUS - T.I. ROBOTIIKKAJÄRJESTELMÄN OPITUSSARJA - LAB 6: 3 vaihetta

Video: GPIO ARM ASENNUS - T.I. ROBOTIIKKAJÄRJESTELMÄN OPITUSSARJA - LAB 6: 3 vaihetta

Video: GPIO ARM ASENNUS - T.I. ROBOTIIKKAJÄRJESTELMÄN OPITUSSARJA - LAB 6: 3 vaihetta
Video: Основы программирования микроконтроллеров. Лекция в МИРЭА 2024, Heinäkuu
Anonim
GPIO ARM ASENNUS - T. I. ROBOTIIKKAJÄRJESTELMÄN OBJETTISARJA - LAB 6
GPIO ARM ASENNUS - T. I. ROBOTIIKKAJÄRJESTELMÄN OBJETTISARJA - LAB 6

Hei, Aiemmassa ohjeessa ARM-kokoonpanon oppimisesta Texas Instruments TI-RSLK: lla (käyttää MSP432-mikrokontrolleria), eli Lab 3, jos teet T. I. tietenkin, kävimme läpi joitakin hyvin perusohjeita, kuten kirjoittaminen rekisteriin ja ehdollinen silmukointi. Kävimme suorituksen läpi Eclipse IDE: n avulla.

Suorittamamme pienet ohjelmat eivät tehneet mitään vuorovaikutusta ulkomaailman kanssa.

Jotenkin tylsää.

Yritetään muuttaa sitä hieman tänään oppimalla hieman tulo-/lähtöporteista, erityisesti digitaalisista GPIO -nastoista.

Näin tapahtuu, että tässä MSP432: ssa on kehityskortti, jossa on jo kaksi painikekytkintä, RGB-LED ja punainen LED, jotka kaikki on sidottu joihinkin GPIO-portteihin.

Tämä tarkoittaa, että kun opimme asettamaan ja käsittelemään näitä tappeja kokoonpanon avulla, voimme nähdä nämä vaikutukset visuaalisesti.

Paljon mielenkiintoisempaa kuin vain astua vianetsinnän läpi.

(Me jatkamme vielä askelta - tämä on "viive" -toimintomme):-D

Vaihe 1: Yritetään kirjoittaa RAM -muistiin tai lukea sitä

Ennen kuin siirrymme käyttämään ja hallitsemaan GPIO: ta, meidän pitäisi ottaa pieni askel.

Aloitetaan lukemalla ja kirjoittamalla tavalliseen muistiosoitteeseen. Tiedämme edellisestä Instructable -ohjelmasta (katso kuvat sieltä), että RAM alkaa 0x2000 0000, joten käytämme tätä osoitetta.

Siirrämme tietoja ydinrekisterin (R0) ja 0x2000 0000 välillä.

Aloitamme perustiedostorakenteella tai kokoonpano -ohjelman sisällöllä. Katso tästä ohjekirjasta, kun haluat luoda kokoonpanoprojektin TI: n Code Composer Studiota (CCS) käyttäen, ja joitakin näyteprojekteja.

.peukalo

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (koodimme tulee tänne); ------------------------------------------ ---------------------------------------.endasmfunc.end

Haluan lisätä yläosaan jotain uutta, jos siellä oli joitakin julistuksia (direktiivejä). Se selviää myöhemmin.

ACONST.setti 0x20000000; käytämme tätä edelleen (se on vakio)

; ilmeisesti '0x' tarkoittaa sitä, että seuraava on heksadesimaali.

Joten aloitustiedoston sisältö näyttää nyt tältä:

.peukalo

.text.align 2 ACONST.set 0x20000000; käytämme tätä edelleen (se on vakio); ilmeisesti "0x" tarkoittaa sitä, että seuraava on heksadesimaali..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (koodimme tulee tänne); ------------------------------------------ ---------------------------------------.endasmfunc.end

Nyt kun meillä on edellä mainittu, lisätään koodi katkoviivojen väliin.

Aloitamme kirjoittamalla RAM -paikkaan. Ensin määritämme datakuvion, arvon, jonka kirjoitamme RAM -muistiin. Käytämme ydinrekisteriä arvon tai tietojen määrittämiseen.

Huomaa: muista, että koodissa mikä tahansa rivi, jossa on puolipiste (';'), tarkoittaa, että se on kommentti puolipisteen jälkeen.

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

; KIRJOITTAMINEN; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; ydinrekisteri R0 sisältää tiedot, jotka haluamme kirjoittaa RAM -sijaintiin.; ilmeisesti '0x' tarkoittaa sitä, että seuraava on heksadesimaali.

Katsotaan seuraavaksi lausuntoja, jotka eivät toimi.

; MOV MOV ei ole käytettävissä tietojen kirjoittamiseen RAM -paikkaan.

; MOV on tarkoitettu vain välittömiin tietoihin rekisteriin; tai rekisteristä toiseen; eli MOV R1, R0.; STR: n on käytettävä STR: ää.; STR R0, = VASTAAN; Huono termi ilmaisussa ('='); STR R0, 0x20000000; Laiton osoitetila kauppaohjeille; STR R0, VASTAAN; Laiton osoitetila myymäläohjeille

Selittämättä liikaa, yritimme käyttää yllä olevaa "ACONST". Pohjimmiltaan se on stand-in tai vakio sen sijaan, että käytetään kirjaimellista arvoa, kuten 0x20000000.

Emme voineet kirjoittaa kirjoittaaksesi RAM -sijaintiin käyttämällä yllä olevaa. Kokeillaan jotain muuta.

; näyttää siltä, että meidän on käytettävä toista rekisteriä, joka sisältää RAM -sijainnin

; tallentaaksesi kyseiseen RAM -paikkaan MOV R1, #0x20000000; aseta RAM -sijainti (ei sen sisältö, mutta sijainti) R1: ksi.; ilmeisesti '0x' tarkoittaa sitä, että seuraava on heksadesimaali. STR R0, [R1]; kirjoita R0: n (0x55) sisältö RAM -muistiin (0x20000000) R1: llä.; käytämme toista rekisteriä (R1), jolla on RAM -sijaintiosoite; kirjoittaaksesi tähän RAM -paikkaan.

Toinen tapa tehdä yllä oleva, mutta käyttää 'ACONST' -sanaa kirjaimellisen osoitteen arvon sijaan:

; Tehdään yllä oleva uudelleen, mutta käytämme symbolia kirjaimellisen RAM -sijainnin arvon sijasta.

; haluamme käyttää "ACONST" -laitetta 0x20000000 -standardina.; meidän on vielä tehtävä#-merkki merkitsemään välitöntä arvoa; joten (katso ylhäältä) meidän täytyi käyttää.set -direktiiviä.; tämän todistamiseksi muutetaan datamallia R0: ssa. MOV R0, #0xAA; ok, olemme valmiita kirjoittamaan RAM -muistiin käyttämällä symbolia kirjaimellisen osoitearvon MOV R1, #ACONST STR R0, [R1] sijaan

Videossa käsitellään tarkemmin ja luetaan muistipaikasta.

Voit myös tarkastella liitteenä olevaa.asm -lähdetiedostoa.

Vaihe 2: Portin perustietoja

Image
Image
Jotkut perustiedot portista
Jotkut perustiedot portista
Jotkut perustiedot portista
Jotkut perustiedot portista

Nyt kun meillä on hyvä idea kirjoittaa tai lukea RAM -paikasta, tämä auttaa meitä ymmärtämään paremmin GPIO -nastan ohjaamista ja käyttöä

Joten miten olemme vuorovaikutuksessa GPIO -nastojen kanssa? Aiemmasta tarkastelustamme tähän mikrokontrolleriin ja sen ARM -ohjeisiin tiedämme, miten käsitellä sen sisäisiä rekistereitä, ja tiedämme, miten olla vuorovaikutuksessa muistin (RAM) osoitteiden kanssa. Mutta GPIO -nastat?

Tapahtuu niin, että nämä nastat on kartoitettu muistiin, joten voimme käsitellä niitä paljon samalla tavalla kuin muistiosoitteita.

Tämä tarkoittaa, että meidän on tiedettävä, mitkä ovat nämä osoitteet.

Alla on portin aloitusosoitteet. Muuten, MSP432: lle "portti" on kokoelma nastoja, eikä vain yksi nasta. Jos olet tutustunut Raspberry Pi: hen, uskon, että se on erilainen kuin tilanne täällä.

Yllä olevan kuvan siniset ympyrät osoittavat taululle kahden kytkimen ja LED -valon kirjoitukset. Siniset viivat osoittavat todellisia LED -valoja. Meidän ei tarvitse koskea otsikon hyppääjiä.

Tein alla olevat lihavoidut satamat, joista olemme huolissamme.

  • GPIO P1: 0x4000 4C00 + 0 (parilliset osoitteet)
  • GPIO P2: 0x4000 4C00 + 1 (parittomat osoitteet)
  • GPIO P3: 0x4000 4C00 + 20 (parilliset osoitteet)
  • GPIO P4: 0x4000 4C00 + 21 (parittomat osoitteet)
  • GPIO P5: 0x4000 4C00 + 40 (parilliset osoitteet)
  • GPIO P6: 0x4000 4C00 + 41 (parittomat osoitteet)
  • GPIO P7: 0x4000 4C00 + 60 (parilliset osoitteet)
  • GPIO P8: 0x4000 4C00 + 61 (parittomat osoitteet)
  • GPIO P9: 0x4000 4C00 + 80 (parilliset osoitteet)
  • GPIO P10: 0x4000 4C00 + 81 (parittomat osoitteet)

Emme ole vielä valmiita. Tarvitsemme lisätietoja.

Portin hallitsemiseksi tarvitsemme useita osoitteita. Siksi yllä olevassa luettelossa näemme "parillisia osoitteita" tai "parittomia osoitteita".

I/O -rekisterin osoitelohko

Tarvitsemme muita osoitteita, kuten:

  • Portin 1 tulorekisterin osoite = 0x40004C00
  • Portin 1 lähtörekisterin osoite = 0x40004C02
  • Portin 1 suuntarekisterin osoite = 0x40004C04
  • Portti 1 Valitse 0 Rekisteröi osoite = 0x40004C0A
  • Portti 1 Valitse 1 Rekisteröi osoite = 0x40004C0C

Ja saatamme tarvita muita.

Ok, nyt tiedämme GPIO -rekisteriosoitteiden valikoiman yksittäisen punaisen LED -valon ohjaamiseksi.

Erittäin tärkeä huomautus: Jokainen MSP432 LaunchPad -kortin I/O -portti on kokoelma useista (yleensä 8) nastoista tai linjoista, ja jokainen voidaan asettaa tuloksi tai lähdöksi erikseen.

Tämä tarkoittaa esimerkiksi sitä, että jos olet asettamassa arvoja "Port 1 Direction Register Address" -portille, sinun on huolehdittava siitä, mitä bittiä (tai bittejä) asetat tai muutat kyseisessä osoitteessa. Tästä lisää myöhemmin.

GPIO -portin ohjelmointijärjestys

Viimeinen osa, jota tarvitsemme, on prosessi tai algoritmi, jota käytetään LEDin ohjaamiseen.

Kertaluonteinen alustus:

  • Määritä P1.0 (P1SEL1REG: P1SEL0REG-rekisteri) <--- 0x00, 0x00 normaalille GPIO-toiminnolle.
  • Aseta lähtörekisterin P1DIRREG suuntarekisteribitti 1 tai HIGH.

Silmukka:

Kirjoita HIGH P1OUTREG -rekisterin bittiin 0 sytyttääksesi punaisen LED -valon

  • Kutsu viive
  • Kirjoita LOW P1OUTREG -rekisterin bittiin 0 sammuttaaksesi punaisen LED -valon
  • Kutsu viive
  • Toista silmukka

Mikä tulo- / lähtötoiminto (määritä SEL0 ja SEL1)

Monilla LaunchPadin nastoilla on useita käyttötarkoituksia. Esimerkiksi sama nasta voi olla tavallinen digitaalinen GPIO, tai sitä voidaan käyttää myös UART- tai I2C -sarjaliikenteessä.

Jotta voit käyttää mitä tahansa toimintoa kyseiselle nastalle, sinun on valittava kyseinen toiminto. Sinun on määritettävä tapin toiminto.

Tässä vaiheessa on kuva, joka yrittää selittää tämän käsitteen visuaalisessa muodossa.

SEL0- ja SEL1 -osoitteet muodostavat pariyhdistelmän, joka toimii jonkinlaisena toiminto- / ominaisuusvalintana.

Tarkoituksemme on, että haluamme standardin digitaalisen GPIO: n bitille 0. Tämä tarkoittaa, että tarvitsemme bitin 0, jotta SEL0 ja SEL1 ovat LOW.

Portin ohjelmointijärjestys (jälleen)

1. Kirjoita 0x00 P1 SEL 0 -rekisteriin (osoite 0x40004C0A). Tämä asettaa LOW bitille 0

2. Kirjoita 0x00 P1 SEL 1 -rekisteriin (osoite 0x40004C0C). Tämä asettaa LOW bitille 0, asetus GPIO: lle.

3. Kirjoita 0x01 P1 DIR -rekisteriin (osoite 0x40004C04). Tämä asettaa HIGH bitille 0, mikä tarkoittaa OUTPUT.

4. Kytke LED -valo päälle kirjoittamalla 0x01 - P1 OUTPUT Register (osoite 0x40004C02)

5. Tee jonkinlainen viive (tai vain yksi vaihe läpi virheenkorjauksen aikana)

6. Sammuta LED kirjoittamalla 0x00 - P1 OUTPUT Register (osoite 0x40004C02)

7. Tee jonkinlainen viive (tai vain yksi vaihe läpi virheenkorjauksen aikana)

8. Toista vaiheet 4-7.

Tähän vaiheeseen liittyvä video vie meidät läpi koko prosessin live-esittelyssä, kun käymme läpi ja puhumme läpi kaikki asennusohjeet ja näytämme LED-toiminnon. Anteeksi videon pituus.

Vaihe 3: Löysitkö videon yhden virheen?

Videossa, joka kulkee läpi koko LED-ohjelmointi- ja sytytysprosessin, pääsilmukassa oli ylimääräinen vaihe, joka olisi voitu siirtää kertaluontoiseen alustukseen.

Kiitos, että käytit aikaa tämän opetusohjelman läpikäymiseen.

Seuraava tarkentaa sitä, mitä olemme aloittaneet täällä.

Suositeltava: