Orodha ya maudhui:

Mkutano wa GPIO ARM - TI. MFUMO WA ROBOTIKI KITI CHA KUJIFUNZA - LAB 6: 3 Hatua
Mkutano wa GPIO ARM - TI. MFUMO WA ROBOTIKI KITI CHA KUJIFUNZA - LAB 6: 3 Hatua

Video: Mkutano wa GPIO ARM - TI. MFUMO WA ROBOTIKI KITI CHA KUJIFUNZA - LAB 6: 3 Hatua

Video: Mkutano wa GPIO ARM - TI. MFUMO WA ROBOTIKI KITI CHA KUJIFUNZA - LAB 6: 3 Hatua
Video: SARAKASI ZA EMBARAMBAMBA ZIMEFANYA AFUKUZWE KUTOKA KWA MKUTANO WA MC MIGGY 2024, Julai
Anonim
Mkutano wa GPIO ARM - TI. KITI CHA MAFUNZO YA MFUMO WA ROBOTI - LAB 6
Mkutano wa GPIO ARM - TI. KITI CHA MAFUNZO YA MFUMO WA ROBOTI - LAB 6

Halo, Katika Agizo lililofundishwa hapo awali juu ya kujifunza mkutano wa ARM ukitumia Texas Instruments TI-RSLK (inatumia MSP432 microcontroller), aka Lab 3 ikiwa unafanya T. I. kwa kweli, tulienda juu ya maagizo ya msingi sana kama vile kuandika kwa rejista, na utaftaji wa masharti. Tulipitia utekelezaji huo kwa kutumia Eclipse IDE.

Programu ndogo ambazo tulifanya hazikufanya chochote kuingiliana na ulimwengu wa nje.

Aina ya kuchosha.

Wacha tujaribu kuibadilisha kidogo leo kwa kujifunza kidogo juu ya bandari za kuingiza / kutoa, haswa, pini za dijiti za GPIO.

Inatokea kwamba hii MSP432 inakuja kwenye bodi ya maendeleo tayari ina swichi za kushinikiza mbili, RGB LED, na LED nyekundu, zote ambazo zimefungwa kwa bandari zingine za GPIO.

Hii inamaanisha kwamba tunapojifunza kusanidi na kutumia pini hizi kupitia mkutano, tunaweza kuona athari hizo.

Inafurahisha zaidi kuliko kupita tu kwenye utatuzi.

(Bado tutachukua hatua - hii itakuwa kazi yetu ya 'kuchelewesha'): -D

Hatua ya 1: Wacha tujaribu Kuandika kwa / Kusoma Kutoka kwa RAM

Kabla ya kuruka kufikia na kudhibiti GPIO, tunapaswa kuchukua hatua ndogo.

Wacha tuanze kwa kusoma tu na kuandika kwa anwani ya kumbukumbu ya kawaida. Tunajua kutoka kwa Iliyofundishwa hapo awali (tazama picha hapo) kwamba RAM huanza kwa 0x2000 0000, kwa hivyo wacha tutumie anwani hiyo.

Tutahamisha data kati ya rejista ya msingi (R0) na 0x2000 0000.

Tunaanza na muundo wa faili ya msingi au yaliyomo kwenye mpango wa mkutano. Tafadhali rejelea hii Inayoweza kufundishwa kuunda mradi wa mkutano kwa kutumia Studio ya Mtunzi wa TI (CCS) ya TI, na miradi mingine ya sampuli.

kidole

maandishi.jilinganisha 2.global kuu.thumbfunc kuu kuu:.asmfunc; ---------------------------------- -----------------------------------------------; (nambari yetu itaenda hapa); -------------------------- -----------------------------------.endasmfunc. mwisho

Nataka kuongeza kitu kipya kwenye sehemu ya juu, ikiwa kuna maazimio (maagizo). Itakuwa wazi baadaye.

Kuweka kwa ACONST 0x20000000; tutatumia hii zaidi chini (ni mara kwa mara)

; ni wazi, '0x' inaashiria kinachofuata ni thamani ya hex.

Kwa hivyo yaliyomo ndani ya faili sasa yanaonekana kama:

kidole

maandishi. sawa 2 ACONST.set 0x20000000; tutatumia hii zaidi chini (ni mara kwa mara); ni wazi, '0x' inaashiria kinachofuata ni thamani ya hex. kuu duniani.thumbfunc kuu kuu:.asmfunc; -------------------------------- ------------------------------------------; (nambari yetu itaenda hapa); -------------------------- -----------------------------------.endasmfunc. mwisho

Sasa kwa kuwa tuna hapo juu, wacha tuongeze nambari kati ya laini zilizopigwa.

Tunaanza na kuandika kwa eneo la RAM. Kwanza tutaanzisha muundo wa data, thamani, ambayo tutakuwa tukiandika kwenye RAM. Tunatumia rejista ya msingi kuanzisha dhamana au data hiyo.

Kumbuka: kumbuka kuwa katika nambari, laini yoyote iliyo na nusu koloni (';') inamaanisha yote ni maoni baada ya nusu koloni hiyo.

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

; KUANDIKA; ---------------------------------- ----------------------------------------------- MOV R0, # 0x55; rejista ya msingi R0 itakuwa na data tunayotaka kuandika kwa eneo la RAM.; ni wazi, '0x' inaashiria kinachofuata ni thamani ya hex.

Ifuatayo, wacha tuangalie taarifa ambazo DONT inafanya kazi.

; MOV MOV haitumiki kuandika data kwa eneo la RAM.

; MOV ni ya data ya haraka tu kwenye sajili,; au kutoka sajili moja hadi nyingine; yaani, MOV R1, R0.; STR lazima itumie STR.; STR R0, = KARIBU; Neno baya kwa kujieleza ('='); STR R0, 0x20000000; Njia isiyo halali ya kushughulikia maagizo ya duka; STR R0, KARIBU; Njia isiyo halali ya kushughulikia maagizo ya duka

Bila kuelezea mengi, tulijaribu kutumia 'ACONST' hapo juu. Kwa kweli, ni kusimama au mara kwa mara badala ya kutumia dhamana halisi kama 0x20000000.

Hatukuweza kuandika kuandika kwa eneo la RAM kwa kutumia hapo juu. Wacha tujaribu kitu kingine.

; inaonekana tunapaswa kutumia rejista nyingine iliyo na eneo la RAM katika

; kuagiza kuhifadhi kwenye eneo hilo la RAM MOV R1, # 0x20000000; weka eneo la RAM (sio yaliyomo, lakini eneo) kuwa R1.; ni wazi, '0x' inaashiria kinachofuata ni thamani ya hex. STR R0, [R1]; andika kilicho katika R0 (0x55) ndani ya RAM (0x20000000) ukitumia R1.; tunatumia rejista nyingine (R1) ambayo ina anwani ya eneo la RAM; ili kuandika KWA eneo hilo la RAM.

Njia nyingine ya kufanya hapo juu, lakini kutumia 'ACONST' badala ya nambari halisi ya anwani:

; wacha tufanye hapo juu tena, lakini wacha tutumie ishara badala ya thamani halisi ya eneo la RAM.

; tunataka kutumia 'ACONST' kama kusimama kwa 0x20000000.; bado tunapaswa kufanya '#' kuashiria thamani ya haraka,; kwa hivyo (tazama juu), ilibidi tutumie maagizo ya '.set'.; ili kudhibitisha hili, wacha tubadilishe muundo wa data katika R0. MOV R0, # 0xAA; sawa tuko tayari kuandika kwa RAM tukitumia alama badala ya thamani halisi ya anwani MOV R1, #ACONST STR R0, [R1]

Video inaingia kwa undani zaidi, na vile vile kupitia kusoma kutoka eneo la kumbukumbu.

Unaweza pia kuona faili ya chanzo ya.asm.

Hatua ya 2: Habari zingine za Msingi za Bandari

Image
Image
Habari ya Msingi ya Bandari
Habari ya Msingi ya Bandari
Habari ya Msingi ya Bandari
Habari ya Msingi ya Bandari

Sasa kwa kuwa tuna wazo nzuri ya kuandika / kusoma kutoka eneo la RAM, hii itatusaidia kuelewa vizuri jinsi ya kudhibiti na kutumia pini ya GPIO

Kwa hivyo tunashirikiana vipi na pini za GPIO? Kutoka kwa muonekano wetu uliopita kwa microcontroller huyu na maagizo yake ya ARM, tunajua jinsi ya kushughulikia rejista zake za ndani, na tunajua jinsi ya kuingiliana na anwani za kumbukumbu (RAM). Lakini pini za GPIO?

Inatokea kwamba pini hizo zimepangwa kwa kumbukumbu, kwa hivyo tunaweza kuzichukulia sawa na anwani za kumbukumbu.

Hii inamaanisha tunahitaji kujua ni nini anwani hizo.

Chini ni anwani za kuanzia bandari. Kwa njia, kwa MSP432, "bandari" ni mkusanyiko wa pini, na sio pini moja tu. Ikiwa unajua Raspberry Pi, naamini hiyo ni tofauti na hali hapa.

Miduara ya samawati kwenye picha hapo juu inaonyesha maandishi kwenye ubao kwa swichi mbili na LED. Mistari ya hudhurungi inaelekeza kwa LED halisi. Hatutalazimika kugusa vinarukaji vya kichwa.

Nilifanya bandari ambazo tunahusika nazo kwa herufi zilizo chini.

  • GPIO P1: 0x4000 4C00 + 0 (hata anwani)
  • GPIO P2: 0x4000 4C00 + 1 (anwani isiyo ya kawaida)
  • GPIO P3: 0x4000 4C00 + 20 (hata anwani)
  • GPIO P4: 0x4000 4C00 + 21 (anwani zisizo za kawaida)
  • GPIO P5: 0x4000 4C00 + 40 (hata anwani)
  • GPIO P6: 0x4000 4C00 + 41 (anwani isiyo ya kawaida)
  • GPIO P7: 0x4000 4C00 + 60 (hata anwani)
  • GPIO P8: 0x4000 4C00 + 61 (anwani isiyo ya kawaida)
  • GPIO P9: 0x4000 4C00 + 80 (hata anwani)
  • GPIO P10: 0x4000 4C00 + 81 (anwani isiyo ya kawaida)

Bado hatujamaliza. Tunahitaji habari zaidi.

Ili kudhibiti bandari, tunahitaji anwani kadhaa. Ndio sababu katika orodha hapo juu, tunaona "anwani hata" au "anwani zisizo za kawaida".

Sajili Vitalu vya Anwani

Tutahitaji anwani zingine, kama vile:

  • 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
  • Bandari 1 Chagua anwani ya Usajili 0 = 0x40004C0A
  • Bandari 1 Chagua anwani 1 ya Usajili = 0x40004C0C

Na tunaweza kuhitaji wengine.

Sawa, sasa tunajua anuwai ya anwani za rejista za GPIO kudhibiti LED moja nyekundu.

Ujumbe muhimu sana: Kila Bandari ya I / O kwenye bodi ya LaunchPad ya MSP432 ni mkusanyiko wa pini au mistari kadhaa (kawaida 8), na kila moja inaweza kuwekwa kama pembejeo au pato.

Hii inamaanisha, kwa mfano, kwamba ikiwa unaweka maadili ya "Anwani ya Usajili wa Maelekeo ya Port 1", unahitaji kujali ni kipi (au bits) unachoweka au kubadilisha kwenye anwani hiyo. Zaidi juu ya hii baadaye.

Mlolongo wa Programu ya Bandari ya GPIO

Sehemu ya mwisho ambayo tunahitaji, ni mchakato au algorithm ya kutumia, kudhibiti LED.

Uanzishaji wa wakati mmoja:

  • Sanidi P1.0 (P1SEL1REG: Usajili wa P1SEL0REG) <--- 0x00, 0x00 kwa utendaji wa kawaida wa GPIO.
  • Weka rejista ya Mwelekeo kidogo 1of P1DIRREG kama pato, au JUU.

Kitanzi:

Andika HIGH hadi kidogo 0 ya rejista ya P1OUTREG kuwasha LED Nyekundu

  • Piga simu ya kuchelewesha
  • Andika chini hadi kidogo 0 ya rejista ya P1OUTREG kuzima LED Nyekundu
  • Piga simu ya kuchelewesha
  • Rudia Kitanzi

Kazi gani ya Kuingiza / Pato (Sanidi SEL0 na SEL1)

Pini nyingi kwenye LaunchPad zina matumizi mengi. Kwa mfano, pini hiyo hiyo inaweza kuwa GPIO ya kawaida ya dijiti, au inaweza pia kutumika katika UART, au mawasiliano ya serial ya I2C.

Ili kutumia kazi yoyote maalum kwa pini hiyo, unahitaji kuchagua kazi hiyo. Unahitaji kusanidi kazi ya pini.

Kuna picha hapo juu kwa hatua hii ambayo inajaribu kuelezea dhana hii kwa njia ya kuona.

Anwani za SEL0 na SEL1 huunda mchanganyiko wa jozi ambao hufanya kama aina fulani ya uteuzi wa kazi / kipengee.

Kwa madhumuni yetu, tunataka GPIO ya kawaida ya dijiti kwa kidogo 0. Hiyo inamaanisha tunahitaji kidogo 0 kwa SEL0 na SEL1 kuwa chini.

Mlolongo wa Programu ya Bandari (Tena)

1. Andika 0x00 kwa P1 SEL 0 Daftari (anwani 0x40004C0A). Hii inaweka chini kwa kidogo 0

2. Andika 0x00 kwa P1 SEL 1 Daftari (anwani 0x40004C0C). Hii inaweka LOW kwa kidogo 0, kuweka kwa GPIO.

3. Andika 0x01 kwa P1 DIR Daftari (anwani 0x40004C04). Hii inaweka HIGH kwa kidogo 0, ikimaanisha OUTPUT.

Washa LED kwa kuandika 0x01 kwa P1 OUTPUT Daftari (anwani 0x40004C02)

5. Fanya ucheleweshaji wa aina fulani (au hatua moja tu wakati unatatua)

6. Zima LED kwa kuandika 0x00 kwa Usajili wa P1 OUTPUT (anwani 0x40004C02)

7. Fanya ucheleweshaji wa aina fulani (au hatua moja tu wakati unatatua)

8. Rudia hatua 4 hadi 7.

Video inayohusishwa ya hatua hii hutupitisha katika mchakato mzima katika onyesho la moja kwa moja, tunapopitia hatua moja na kuzungumza kwa kila maagizo ya mkutano, na kuonyesha kitendo cha LED. Tafadhali udhuru urefu wa video.

Hatua ya 3: Je! Ulipata Kasoro Moja kwenye Video?

Kwenye video inayotembea kupitia mchakato mzima wa programu na kuwasha LED, kulikuwa na hatua ya ziada kwenye kitanzi kuu, ambacho kingeweza kuhamishwa hadi uanzishaji wa wakati mmoja.

Asante kwa kuchukua muda kupitia hii inayoweza kufundishwa.

Ifuatayo inapanua kile tumeanza hapa.

Ilipendekeza: