Sisällysluettelo:

OSA 2 - GPIO ARM ASENNUS - RGB - TOIMINNOT - Kytkimet: 6 vaihetta
OSA 2 - GPIO ARM ASENNUS - RGB - TOIMINNOT - Kytkimet: 6 vaihetta

Video: OSA 2 - GPIO ARM ASENNUS - RGB - TOIMINNOT - Kytkimet: 6 vaihetta

Video: OSA 2 - GPIO ARM ASENNUS - RGB - TOIMINNOT - Kytkimet: 6 vaihetta
Video: BTT Manta M8P v2 - Basics with CB1 v2.2 2024, Marraskuu
Anonim
OSA 2 - GPIO ARM ASENNUS - RGB - TOIMINNOT - Kytkimet
OSA 2 - GPIO ARM ASENNUS - RGB - TOIMINNOT - Kytkimet

Osassa 1 opimme vaihtamaan yhden punaisen LED -valon Texas Instrumentsin MSP432 LaunchPad -kehityskortilla käyttämällä kokoonpanoa C / C ++: n sijasta.

Tässä Instructable -ohjelmassa teemme jotain vastaavaa - ohjaamme RGB -LEDiä, joka on myös samassa kortissa.

Matkan varrella toivomme, että lisätään tietämystämme ARM -kokoonpanosta emmekä vain pidä hauskaa joidenkin LED -valojen sytyttämisestä.

Vaihe 1: Hyppäämme sisään

Tosiaan, ensimmäinen video kertoo kaiken. Ei paljon lisättävää.

Pääasia on ajaa kotiin ajatus siitä, että jokainen MSP432: n I/O -portti koostuu "rekisteri" -osoitteiden lohkosta, joka puolestaan koostuu useista biteistä.

Lisäksi bitit ryhmitellään kohtisuoraan. Toisin sanoen jokaisen rekisteriosoitteen bitti 0 viittaa samaan ulkoiseen I/O -nastaan.

Toistimme ajatuksen, että portille tarvitaan useita rekisteriosoitteita tehdäkseen jotain vain yhdellä bitillä tai nastalla.

Mutta tässä tapauksessa, koska kyseessä on RGB -LED, meidän on käsiteltävä kolme bittiä kutakin rekisteriosoitetta kohden.

Vahvistimme, että tarvitsemme useita rekistereitä: DIR -rekisterin, SEL0 -rekisterin, SEL1 -rekisterin ja OUTPUT -rekisterin. Ja kolme bittiä joka kerta.

Vaihe 2: Paranna koodia - lisää toiminto

Image
Image

Kuten huomasit yllä olevassa vaiheessa, pääohjelmasilmukassa oli paljon toistuvaa koodia, nimittäin kun sammutamme LEDit.

Joten voimme lisätä toiminnon ohjelmaan. Meidän on edelleen kutsuttava tämä toiminto joka kerta, kun haluamme sammuttaa LEDit, mutta se saa osan koodista romahtamaan yhdeksi lauseeksi.

Jos LED-off-koodimme olisi ollut enemmän mukana monissa muissa ohjeissa, tämä olisi ollut todellinen muistin säästö.

Osa sulautetuista ohjelmoinneista ja mikro-ohjaimista on paljon tietoisempi ohjelman koosta.

Video selittää.

Pohjimmiltaan lisäämme haarautuvan lausekkeen pääkoodiimme, ja meillä on toinen koodilohko, joka on haarautuva funktio. Ja sitten kun olemme valmiit tai toiminnon lopussa, siirrymme takaisin pääohjelman seuraavaan lausuntoon.

Vaihe 3: Lisää varattu silmukka -viive

Lisää koodin Ilmoitukset -osioon vakio, jotta halutun ajoituksen löytäminen on helppoa:

; kaikki sanat puolipisteen (';') jälkeen aloittaa kommentin.

; tämän osan koodi antaa arvon arvon.; olisit voinut käyttää myös ".equ", mutta ne ovat hieman erilaisia.; '.equ' (mielestäni) ei voi muuttaa, kun taas '.set' tarkoittaa, että voit; muuta DLYCNT -arvon arvoa myöhemmin koodissa, jos haluat.; 'DLYCNT': tä käytetään viivealiohjelman laskuri -arvona. DLYCNT.setti 0x30000

Lisää uusi viivefunktio:

viive:.asmfunc; viive -aliohjelman tai -toiminnon alku.

MOV R5, #DLYCNT; lataa ydin CPU -rekisteri R5, jonka arvoksi on määritetty 'DLYCNT'. dlyloop; tämä merkitsee viiveen alkua. kokoonpanija määrittää osoitteen. SUB R5, #0x1; vähennä 1 ydinprosessorirekisterin R5 nykyisestä arvosta. CMP R5, #0x0; vertaa R5: n nykyistä arvoa arvoon 0. BGT dlyloop; haara, jos R5: n arvo on suurempi kuin 0, otsikkoon (osoite) 'dlyloop'. BX LR; Jos pääsemme tänne, R5 -arvo oli 0. paluu aliohjelmasta..endasmfunc; merkitsee aliohjelman loppua.

Sitten päärungossa, pääsilmukassa, kutsu tai soita viivästystoimintoon:

; tämä on koodiosa päärungosta tai päätoiminnosta (katso tiedosto 'main.asm').

; tämä on silmukka "main": ssa ja näyttää, kuinka me kutsumme tai käytämme uutta "delay" -toimintoa.; '#REDON' ja '#GRNON' ovat myös deklaraatioita (vakioita) (katso 'main.asm' -alku).; ne ovat vain helppo tapa asettaa määritetty RGB -LED -väri. silmukka MOV R0, #REDON; Punainen - aseta ydin CPU -rekisteri R0, jonka arvo on 'REDON'. STRB R0, [R4]; ydinrekisteri R4 oli aiemmin asetettu GPIO -lähtöosoitteella.; kirjoita R0: n sisältö R4: n määrittämään osoitteeseen. BL -viive; haaraudu uuteen "delay" -toimintoon. BL ledsoff; haara olemassa olevaan ledsoff-toimintoon. BL -viive; sama MOV R0, #GRNON; vihreä - sama STRB R0, [R4]; ja niin edelleen. BL viive BL ledsoff BL viive

Video menee yksityiskohtiin.

Vaihe 4: ARM -arkkitehtuurimenettelyn kutsustandardi (AAPCS)

On varmaan hyvä hetki esitellä jotain. Se on kokoonpanokielen sopimus. Tunnetaan myös nimellä ARM -arkkitehtuurin menettelysopimusstandardi.

Tässä on paljon, mutta se on vain standardi. Se ei estä meitä oppimasta kokoonpano -ohjelmointia, ja voimme hyväksyä tämän standardin palaset, kun menemme, kun tunnemme olomme mukavaksi joidenkin oppimiemme käsitteiden suhteen.

Muuten saatamme tuntea, että juomme valtavasta vesiletkusta. Liian paljon tietoa.

Ydinrekisterit

Koska olemme perehtyneet MSP432: n ydinrekistereihin, yritetään nyt ottaa käyttöön joitakin näistä standardeista. Noudatamme tätä, kun kirjoitamme seuraavan toiminnon (kytke LED päälle / pois).

1) Meidän on tarkoitus käyttää funktioparametrina R0. Jos haluamme välittää arvon funktioon (aliohjelmaan), käytämme R0: ta.

2) Käytämme linkkirekisteriä aiottuun tarkoitukseen - se sisältää osoitteen, joka osoittaa minne palata aliohjelman valmistuttua.

Näet, kuinka käytämme näitä.

Vaihe 5: Toiminto parametrilla - sisäkkäiset toiminnot

Voimme puhdistaa koodimme ja vähentää sen käyttämää muistia yhdistämällä toistuvat osiot yhdeksi funktioksi. Ainoa ero pääsilmukan rungossa on se, että tarvitsemme parametrin, jotta voimme välittää RGB -LED -valon eri värit.

Katso lisätietoja videolta. (anteeksi pituus)

Vaihe 6: GPIO -tulo - Lisää kytkimiä

Tehdään siitä mielenkiintoisempaa. On aika lisätä kytkinohjaus kokoonpano-ohjelmaan.

Tässä oppaassa on kuvia, jotka osoittavat, kuinka kaksi sisäistä kytkintä on kytketty MSP432-laitteeseen.

Pohjimmiltaan: Kytkin 1 (SW1 tai S1) on kytketty liittimeen P1.1 ja kytkin 2 (SW2 tai S2) on kytketty liittimeen P1.4.

Tämä tekee asioista hieman mielenkiintoisia paitsi siksi, että käsittelemme tuloja lähtöjen sijasta, vaan myös siksi, että nämä kaksi kytkintä käyttävät tai vievät kaksi bittiä samasta rekisteriosoitelohosta kuin yksittäinen punainen LED, joka on lähtö.

Käsittelimme yksittäisen punaisen LED -valon vaihtamista tässä Instructable -ohjelmassa, joten meidän tarvitsee vain lisätä koodi kytkimien käsittelemiseksi.

Portti 1 Rekisteröi osoitelohko

Muista, että olemme käsitelleet näitä edellisessä Instructable -ohjelmassa, mutta meidän on sisällytettävä uusi:

  • Portin 1 tulorekisterin osoite = 0x40004C00
  • Portin 1 lähtörekisterin osoite = 0x40004C02
  • Portin 1 suuntarekisterin osoite = 0x40004C04
  • Portin 1 vastus käytössä Rekisterin osoite = 0x40004C06
  • Portti 1 Valitse 0 Rekisteröi osoite = 0x40004C0A
  • Portti 1 Valitse 1 Rekisteröi osoite = 0x40004C0C

Kun käytät portteja tulona, on hyvä käyttää MSP432: n sisäisiä vetovarsi- tai alasvetovastauksia.

Koska Launchpad -kehityskortti on kytkenyt molemmat kytkimet maahan (LOW, kun niitä painetaan), meidän on käytettävä vetäviä UP -vastuksia varmistaaksemme, että meillä on kiinteä KORKEA, kun niitä ei paineta.

Vedä ylös / vedä alas vastukset

Kytkentulojen sitominen vetovastusihin vaatii kaksi eri portti 1 -rekisteriosoitetta.

1) Käytä Port 1 Resistor-Enable -rekisteriä (0x40004C06) vain osoittamaan, että haluat vastuksia (näille kahdelle bitille), 2) ja käytä sitten portin 1 lähtörekisteriä (0x40004C02) asettaaksesi vastukset joko vedettäväksi tai vedettäväksi. Saattaa tuntua hämmentävältä, että käytämme tulorekisteriä tuloissa. Lähtörekisterillä on melkein kaksikäyttöinen tarkoitus.

Joten toisin sanoen toisella tavalla, lähtörekisteri voi joko lähettää HIGH tai LOW -lähdön (kuten yksittäisen punaisen LED-valon), ja / tai sitä käytetään asettamaan sisään- tai ulosvetovastuksia tuloille, VAIN VAIN jos tämä ominaisuus on otettu käyttöön Resistor-Enable-rekisterin kautta.

Tärkeää edellä-kun lähetät/asetat LOW- tai HIGH-arvoa mille tahansa lähtöbitille, sinun on säilytettävä syöttöbittien ylös-/alas-tila samanaikaisesti.

(video yrittää selittää)

Porttitulon bitin lukeminen

  • Aseta SELIO / SEL1 GPIO -toiminnoille
  • Aseta DIR -rekisteri kytkinbittien tuloksi, mutta LEDin ulostuloksi (samanaikaisesti samassa tavussa)
  • Ota vastukset käyttöön
  • Aseta ne vetovastuksiksi
  • Lue portti
  • Voit halutessasi suodattaa luetun arvon eristääksesi vain tarvitsemasi bitit (kytkimet 1 ja 2)

Suositeltava: