Orodha ya maudhui:

SEHEMU YA 2 - Mkutano wa GPIO ARM - RGB - WITO WA KAZI - Swichi: 6 Hatua
SEHEMU YA 2 - Mkutano wa GPIO ARM - RGB - WITO WA KAZI - Swichi: 6 Hatua

Video: SEHEMU YA 2 - Mkutano wa GPIO ARM - RGB - WITO WA KAZI - Swichi: 6 Hatua

Video: SEHEMU YA 2 - Mkutano wa GPIO ARM - RGB - WITO WA KAZI - Swichi: 6 Hatua
Video: Fysetc Spider v1.1 – Основы 2024, Julai
Anonim
SEHEMU YA 2 - Mkutano wa GPIO ARMEMBLY - RGB - WITO WA KAZI - Swichi
SEHEMU YA 2 - Mkutano wa GPIO ARMEMBLY - RGB - WITO WA KAZI - Swichi

Katika Sehemu ya 1, tulijifunza jinsi ya kubadilisha LED moja Nyekundu kwenye bodi ya maendeleo ya MSP432 LaunchPad kutoka kwa Hati za Texas, ukitumia mkutano badala ya C / C ++.

Katika Agizo hili, tutafanya kitu kama hicho - kudhibiti RGB LED ambayo pia iko kwenye bodi hiyo hiyo.

Njiani, tunatumahi kuendeleza maarifa yetu ya mkutano wa ARM, na sio tu kuwa na taa za kufurahisha za taa za LED.

Hatua ya 1: Wacha Tukimbilie Hapo

Kweli, video ya kwanza inasema yote. Sio zaidi ya kuongeza.

Jambo kuu ni kusukuma wazo kwamba kila bandari ya I / O kwenye MSP432 ina kizuizi cha anwani za "rejista", ambazo zinajumuisha bits kadhaa kila moja.

Kwa kuongezea, bits zinajumuishwa kwa njia ya orthogonal. Hiyo ni, kidogo 0 ya kila anwani ya rejista inarejelea pini ile ile ya nje ya I / O.

Tulirudia wazo kwamba inachukua anwani kadhaa za usajili kwa bandari hiyo, kufanya kitu na hata kidogo au pini.

Lakini hiyo katika kesi hii, kwa kuwa tunashughulika na RGB LED, tunahitaji kushughulikia bits tatu kwa kila anwani ya rejista.

Tuliimarisha kwamba tunahitaji rejista kadhaa: rejista ya DIR, rejista ya SEL0, rejista ya SEL1, na rejista ya OUTPUT. Na bits tatu kila wakati.

Hatua ya 2: Boresha Msimbo - Ongeza Kazi

Image
Image

Kama ulivyoona katika Hatua iliyo hapo juu, kitanzi kuu cha programu kilikuwa na nambari nyingi za kurudiwa, ambayo ni, wakati tunazima LED.

Kwa hivyo tunaweza kuongeza kazi kwenye programu. Bado tunalazimika kuita kazi hiyo kila wakati tunataka kuzima taa za taa, lakini inasababisha nambari nyingine kuanguka kwa taarifa moja.

Ikiwa nambari yetu ya kuzima ya LED ingehusika zaidi na maagizo mengi zaidi, hii ingekuwa kiokoa kumbukumbu halisi.

Sehemu ya programu iliyoingia na vidhibiti vidogo ni kufahamu zaidi ukubwa wa programu.

Video inaelezea.

Kwa kweli, tunaongeza taarifa ya tawi kwa nambari yetu kuu, na tunayo kificho kingine cha nambari ambayo ni kazi tunayoipata. Na kisha tukimaliza, au mwisho wa kazi, tunarudi kwenye taarifa inayofuata ndani ya programu kuu.

Hatua ya 3: Ongeza Ucheleweshaji wa shughuli nyingi

Katika sehemu ya Azimio la nambari, ongeza kila wakati ili iwe rahisi kuteka kwa muda unaotakiwa:

; maneno yoyote baada ya nusu koloni (';') huanza maoni.

; nambari katika sehemu hii inapeana jina kwa thamani.; unaweza pia kutumia '.equ' lakini ni tofauti kidogo.; '. equ' (nadhani) haiwezi kubadilishwa, ilhali '.set' inamaanisha unaweza; badilisha thamani ya 'DLYCNT' baadaye kwenye nambari ikiwa unataka.; 'DLYCNT' itatumika kama thamani ya kuhesabu nyuma katika njia ndogo ya kuchelewesha. DLYCNT.seti 0x30000

Ongeza kazi mpya ya kuchelewesha:

kuchelewesha:.asmfunc; kuanza kwa subroutine au kazi ya 'kuchelewesha'.

MOV R5, #DLYCNT; mzigo msingi cpu rejista R5 na thamani iliyopewa 'DLYCNT'. dlyloop; alama hizi zinaanza kitanzi cha kuchelewesha. kukusanyika huamua anwani. SUB R5, # 0x1; toa 1 kutoka kwa thamani ya sasa katika daftari la msingi la cpu R5. CMP R5, # 0x0; linganisha thamani ya sasa katika R5 hadi 0. BGT dlyloop; tawi ikiwa thamani katika R5 ni kubwa 0, kuweka lebo (anwani) 'dlyloop'. BX LR; ikiwa tumefika hapa, inamaanisha thamani ya R5 ilikuwa 0. kurudi kutoka kwa njia ndogo..endasmfunc; inaashiria mwisho wa subroutine.

Halafu kwenye mwili kuu, ndani ya kitanzi kuu, omba au piga kazi hiyo ya kuchelewesha:

; hii ni kipande cha nambari, ya mwili kuu au kazi kuu (angalia faili 'main.asm').

; hii ni kitanzi katika 'kuu', na inaonyesha jinsi tunavyoita au kutumia kazi hiyo mpya ya "kuchelewesha".; '#REDON' na '#GRNON' pia ni maazimio (msimamo) (angalia juu ya 'main.asm').; ni njia rahisi tu ya kuweka rangi maalum ya RGB LED. kitanzi MOV R0, #REDON; Nyekundu - weka msingi cpu rejista R0 na thamani iliyopewa 'REDON'. STRB R0, [R4], rejista ya msingi R4 hapo awali iliwekwa na anwani ya pato ya GPIO.; andika kilicho katika R0, kwa anwani iliyoainishwa na R4. Ucheleweshaji wa BL; tawi kwa kazi mpya ya "kuchelewesha". BL ledsoff; tawi kwa kazi iliyopo ya 'ledsoff'. Kuchelewa kwa BL; ditto MOV R0, #GRNON; Kijani - ditto STRB R0, [R4]; Nakadhalika. Ucheleweshaji wa BL BL ledsoff kucheleweshwa kwa BL

Video inaenda kwa undani.

Hatua ya 4: Utaratibu wa Usanifu wa ARM Kiwango cha Simu (AAPCS)

Labda ni wakati mzuri wa kuanzisha kitu. Ni mkutano wa lugha ya kusanyiko. Pia inajulikana kama Utaratibu wa Kupiga simu kwa Usanifu wa ARM.

Kuna mengi kwa hii, lakini ni kiwango tu. Haituzuii kujifunza programu ya kusanyiko, na tunaweza kuchukua vipande vya kiwango hicho tunapoenda, mara tu tutakapojisikia vizuri na dhana kadhaa ambazo tunajifunza.

Vinginevyo, tunaweza kuhisi kama tunakunywa kutoka bomba kubwa la maji. Habari nyingi.

Rejista kuu

Kwa kuwa tumefahamiana na rejista za msingi za MSP432, wacha tujaribu sasa kupitisha baadhi ya viwango hivi. Tutafuata hii tunapoandika kazi inayofuata (washa / zima LED).

1) Tunatakiwa kutumia R0 kama kigezo cha kazi. Ikiwa tunataka kupitisha thamani katika kazi (subroutine), tunapaswa kutumia R0 kufanya hivyo.

2) Tunatakiwa kutumia Rejista ya Kiungo kwa madhumuni yaliyokusudiwa - inashikilia anwani inayoonyesha mahali pa kurudi baada ya sehemu ndogo kukamilika.

Utaona jinsi tunavyotumia haya.

Hatua ya 5: Kazi na Kigezo - Kazi za Nested

Tunaweza kusafisha nambari yetu na kupunguza idadi ya kumbukumbu ambayo inachukua kwa kuchanganya sehemu zinazorudiwa kuwa kazi moja. Tofauti pekee katika mwili kuu wa kitanzi ni kwamba tunahitaji parameta ili tuweze kupitisha rangi anuwai ambazo tunataka kuona za RGB LED.

Angalia video kwa maelezo. (samahani kwa urefu)

Hatua ya 6: Ingizo la GPIO - Ongeza Swichi

Wacha tuifanye kupendeza zaidi. Ni wakati wa kuongeza udhibiti wa kubadili kwenye programu yetu ya mkutano.

Inayoweza kufundishwa ina picha zinazoonyesha jinsi swichi mbili kwenye bodi zimeunganishwa na MSP432.

Kwa kweli: Badilisha 1 (SW1 au S1) imeunganishwa na P1.1, na switch 2 (SW2 au S2) imeunganishwa na P1.4.

Hii inafanya vitu kupendeza sio tu kwa sababu tunashughulika na pembejeo badala ya matokeo, lakini pia kwa sababu swichi hizi mbili huchukua au kuchukua vipande viwili vya kizuizi cha anwani sawa na vile vile LED moja nyekundu ambayo ni pato.

Tulishughulikia kugeuza LED moja nyekundu katika hii inayoweza kufundishwa, kwa hivyo tunahitaji tu kuongeza nambari ya kushughulikia swichi.

Bandari ya 1 ya Usajili wa Anwani

Kumbuka kwamba tuliangazia haya katika Agizo lililopita, lakini lazima tujumuishe mpya:

  • Anwani ya Usajili wa Ingizo ya Port 1 = 0x40004C00
  • Anwani ya Usajili wa Pato la Port 1 = 0x40004C02
  • Anwani ya Usajili wa Bandari 1 = 0x40004C04
  • Kizuizi cha Port 1 Wezesha anwani ya Usajili = 0x40004C06
  • Bandari 1 Chagua anwani ya Usajili 0 = 0x40004C0A
  • Bandari 1 Chagua anwani 1 ya Usajili = 0x40004C0C

Unapotumia bandari kama pembejeo, ni vizuri kutumia vipinga-ndani vya MSP432 vya kuvuta au kuvuta-chini.

Kwa kuwa bodi ya maendeleo ya Launchpad imeunganisha swichi mbili hadi chini (LOW wakati imeshinikizwa), hiyo inamaanisha tunapaswa kutumia vizuizi vya UP ili kuhakikisha kuwa tuna JUU thabiti wakati hawajashinikizwa.

Vuta Juu / Vuta chini Resistors

Inachukua anwani mbili tofauti za Usajili wa Port 1 ili kufunga pembejeo hizo za kubadili vifaa vya kupinga.

1) Tumia Port 1 Resistor-Wezesha rejista (0x40004C06) kuonyesha tu kwamba unataka vipinga (kwa hizo bits mbili), 2) halafu tumia rejista ya Pato la Port 1 (0x40004C02) kuweka vipinga kama kuvuta au kuvuta. Inaweza kuonekana kutatanisha kuwa tunatumia rejista ya Pato kwenye pembejeo. Rejista ya Pato ina karibu kama kusudi mbili.

Kwa hivyo, kusema tena kwa njia nyingine, rejista ya Pato inaweza kutuma juu au chini kwa pato (kama vile moja nyekundu ya LED), na / au inatumika kuweka vipinga-kuvuta au kuvuta-chini kwa pembejeo, LAKINI TU ikiwa huduma hiyo imewezeshwa kupitia Rejista-Wezesha rejista.

Muhimu katika hapo juu - wakati wa kutuma / kuweka CHINI au Juu kwa kiwango chochote cha pato, utahitaji kudumisha hali ya kuvuta / kuvuta-chini ya bits za kuingiza wakati huo huo.

(video inajaribu kuelezea)

Kusoma Pembejeo ya Bandari

  • Weka SEL0 / SEL1 kwa utendaji wa GPIO
  • Weka rejista ya DIR kama pembejeo ya bits za kubadili, lakini kama pato kwa LED (wakati huo huo kwa baiti moja)
  • Wezesha vipinga
  • Weka kama vipinga vya kuvuta
  • Soma bandari
  • Unaweza kutaka kuchuja thamani iliyosomwa ili kutenga tu bits unayohitaji (badilisha 1 na 2)

Ilipendekeza: