Satura rādītājs:

GPIO ROKU SAVIENOŠANA - T.I. ROBOTIKAS SISTĒMAS MĀCĪŠANAS KOMPLEKTS - LAB 6: 3 soļi
GPIO ROKU SAVIENOŠANA - T.I. ROBOTIKAS SISTĒMAS MĀCĪŠANAS KOMPLEKTS - LAB 6: 3 soļi

Video: GPIO ROKU SAVIENOŠANA - T.I. ROBOTIKAS SISTĒMAS MĀCĪŠANAS KOMPLEKTS - LAB 6: 3 soļi

Video: GPIO ROKU SAVIENOŠANA - T.I. ROBOTIKAS SISTĒMAS MĀCĪŠANAS KOMPLEKTS - LAB 6: 3 soļi
Video: 🔶 Flipper Zero Fake Videos | everywhere... #shorts 2024, Jūlijs
Anonim
GPIO ROKU SAVIENOŠANA - T. I. ROBOTIKAS SISTĒMAS MĀCĪŠANAS KOMPLEKTS - LAB 6
GPIO ROKU SAVIENOŠANA - T. I. ROBOTIKAS SISTĒMAS MĀCĪŠANAS KOMPLEKTS - LAB 6

Sveiki, Iepriekšējā pamācībā par ARM montāžas apguvi, izmantojot Texas Instruments TI-RSLK (izmanto MSP432 mikrokontrolleru), aka Lab 3, ja veicat T. I. Protams, mēs apskatījām dažus ļoti vienkāršus norādījumus, piemēram, ierakstīšanu reģistrā un nosacītu cilpu. Mēs izpildījām izpildi, izmantojot Eclipse IDE.

Mazās programmas, kuras mēs izpildījām, neko nedarīja, lai mijiedarbotos ar ārpasauli.

Kaut kā garlaicīgi.

Mēģināsim to mazliet mainīt šodien, nedaudz uzzinot par ievades/izvades portiem, īpaši par digitālajām GPIO tapām.

Tā notiek, ka šim MSP432 ir pieejams izstrādes dēlis, kuram jau ir divi spiedpogu slēdži, RGB gaismas diode un sarkana gaismas diode, kas visi ir piesaistīti dažiem GPIO portiem.

Tas nozīmē, ka, iemācoties uzstādīt un manipulēt ar šīm tapām, izmantojot montāžu, mēs varam vizuāli redzēt šos efektus.

Daudz interesantāk nekā vienkārši iziet caur atkļūdotāju.

(Mēs vēl ejam soli - tā būs mūsu “aizkavēšanās” funkcija):-D

1. darbība: Mēģināsim rakstīt / lasīt RAM

Pirms sākam piekļūt GPIO un to kontrolēt, mums vajadzētu spert nelielu soli.

Sāksim tikai ar lasīšanu un rakstīšanu uz standarta atmiņas adresi. Mēs zinām no iepriekšējā Instructable (skatīt attēlus tur), ka RAM sākas ar 0x2000 0000, tāpēc izmantosim šo adresi.

Mēs pārvietosim datus starp galveno reģistru (R0) un 0x2000 0000.

Mēs sākam ar pamata failu struktūru vai montāžas programmas saturu. Lūdzu, skatiet šo pamācību, lai izveidotu montāžas projektu, izmantojot TI Code Composer Studio (CCS), un dažus projektu paraugus.

. īkšķis

.text.align 2.global main.thumbfunc main main:.asmfunc; ---------------------------------- -----------------------------------------------; (mūsu kods būs šeit); ------------------------------------------ ---------------------------------------.endasmfunc.end

Es vēlos augšējai sadaļai pievienot kaut ko jaunu, ja bija dažas deklarācijas (direktīvas). Vēlāk tas kļūs skaidrāks.

PRET.komplekts 0x20000000; mēs to izmantosim tālāk (tā ir nemainīga)

; acīmredzot, “0x” apzīmē heksadecimālo vērtību.

Tātad mūsu sākuma faila saturs tagad izskatās šādi:

. īkšķis

.text.align 2 ACONST.set 0x20000000; mēs to izmantosim tālāk (tā ir nemainīga); acīmredzot, “0x” apzīmē heksadecimālo vērtību..global main.thumbfunc main main:.asmfunc; --------------------------------------- ------------------------------------------; (mūsu kods būs šeit); ------------------------------------------ ---------------------------------------.endasmfunc.end

Tagad, kad mums ir iepriekš minētais, pievienosim kodu starp punktētām līnijām.

Mēs sākam ar rakstīšanu uz RAM vietu. Vispirms mēs izveidosim datu modeli, vērtību, kuru mēs ierakstīsim RAM. Mēs izmantojam pamatreģistru, lai noteiktu šo vērtību vai datus.

Piezīme: atcerieties, ka kodā jebkura rindiņa ar semikolu (';') nozīmē, ka tas viss ir komentārs aiz šī semikola.

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

; RAKSTA; ------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; pamata reģistrā R0 būs dati, kurus mēs vēlamies ierakstīt RAM atrašanās vietā.; acīmredzot, “0x” apzīmē heksadecimālo vērtību.

Tālāk aplūkosim apgalvojumus, ka NEDRĪKST.

; MOV MOV nevar izmantot, lai ierakstītu datus uz RAM atrašanās vietu.

; MOV ir paredzēts tikai tūlītējiem datiem reģistrā; vai no viena reģistra uz citu; ti, MOV R1, R0.; STR ir jāizmanto STR.; STR R0, = PRET; Slikts termins izteiksmē ('='); STR R0, 0x20000000; Nelegāls adresēšanas režīms veikala norādījumiem; STR R0, PRET; Nelegāls adresēšanas režīms veikala norādījumiem

Pārāk daudz nepaskaidrojot, mēs mēģinājām izmantot iepriekš minēto “ACONST”. Būtībā tā ir pastāvīga vai nemainīga, nevis burtiska vērtība, piemēram, 0x20000000.

Mēs nevarējām rakstīt, lai rakstītu uz RAM atrašanās vietu, izmantojot iepriekš minēto. Mēģināsim kaut ko citu.

; šķiet, ka mums jāizmanto cits reģistrs, kurā ir RAM atrašanās vieta

; lai saglabātu šajā RAM vietā MOV R1, #0x20000000; iestatiet RAM atrašanās vietu (nevis tās saturu, bet atrašanās vietu) uz R1.; acīmredzot, “0x” apzīmē heksadecimālo vērtību. STR R0, [R1]; ierakstiet R0 (0x55) saturu RAM (0x20000000), izmantojot R1.; mēs izmantojam citu reģistru (R1), kuram ir RAM atrašanās vietas adrese; lai rakstītu uz šo RAM vietu.

Vēl viens veids, kā veikt iepriekš minēto, bet burtiskās adreses vērtības vietā izmantot “ACONST”:

; darīsim vēlreiz iepriekš minēto, bet burtiskās RAM atrašanās vietas vērtības vietā izmantosim simbolu.

; mēs vēlamies izmantot “ACONST” kā rezerves daļu 0x20000000.; mums joprojām ir jādara “#”, lai apzīmētu tūlītēju vērtību; tāpēc (sk. augšā) mums bija jāizmanto direktīva.set.; lai to pierādītu, mainīsim datu modeli R0. MOV R0, #0xAA; labi, mēs esam gatavi rakstīt RAM, izmantojot simbolu, nevis burtisko adreses vērtību MOV R1, #ACONST STR R0, [R1]

Videoklipā ir sīkāka informācija, kā arī lasīšana no atmiņas vietas.

Varat arī apskatīt pievienoto avota.asm failu.

2. solis: daži pamatinformācija par ostu

Image
Image
Daži pamatinformācija par ostu
Daži pamatinformācija par ostu
Daži pamatinformācija par ostu
Daži pamatinformācija par ostu

Tagad, kad mums ir laba ideja, kā rakstīt / lasīt RAM vietā, tas palīdzēs mums labāk saprast, kā kontrolēt un izmantot GPIO tapu

Tātad, kā mēs mijiedarbojamies ar GPIO tapām? Iepriekš apskatot šo mikrokontrolleri un tā ARM instrukcijas, mēs zinām, kā rīkoties ar tā iekšējiem reģistriem, un mēs zinām, kā mijiedarboties ar atmiņas (RAM) adresēm. Bet GPIO tapas?

Tā notiek, ka šīs tapas ir kartētas ar atmiņu, tāpēc mēs varam pret tām izturēties tāpat kā pret atmiņas adresēm.

Tas nozīmē, ka mums ir jāzina, kas ir šīs adreses.

Zemāk ir ostas sākuma adreses. Starp citu, MSP432 "ports" ir tapas, nevis tikai viena tapa. Ja esat iepazinies ar Raspberry Pi, es uzskatu, ka tas ir savādāk nekā šeit.

Zilie apļi iepriekš redzamajā attēlā parāda divu slēdžu un gaismas diodes rakstīšanu uz tāfeles. Zilās līnijas norāda uz faktiskajām gaismas diodēm. Mums nebūs jāpieskaras galvenes džemperiem.

Tālāk es treknrakstā norādīju ostas, kas mūs satrauc.

  • GPIO P1: 0x4000 4C00 + 0 (pat adreses)
  • GPIO P2: 0x4000 4C00 + 1 (nepāra adreses)
  • GPIO P3: 0x4000 4C00 + 20 (pat adreses)
  • GPIO P4: 0x4000 4C00 + 21 (nepāra adreses)
  • GPIO P5: 0x4000 4C00 + 40 (pat adreses)
  • GPIO P6: 0x4000 4C00 + 41 (nepāra adreses)
  • GPIO P7: 0x4000 4C00 + 60 (pat adreses)
  • GPIO P8: 0x4000 4C00 + 61 (nepāra adreses)
  • GPIO P9: 0x4000 4C00 + 80 (pat adreses)
  • GPIO P10: 0x4000 4C00 + 81 (nepāra adreses)

Mēs vēl neesam pabeiguši. Mums vajag vairāk informācijas.

Lai kontrolētu ostu, mums ir vajadzīgas vairākas adreses. Tāpēc iepriekš minētajā sarakstā mēs redzam "pāra adreses" vai "nepāra adreses".

I/O reģistra adrešu bloki

Mums būs vajadzīgas citas adreses, piemēram:

  • 1. porta ievades reģistra adrese = 0x40004C00
  • 1. porta izejas reģistra adrese = 0x40004C02
  • 1. porta virziena reģistra adrese = 0x40004C04
  • 1. ports Izvēlieties 0 Reģistrēt adresi = 0x40004C0A
  • Ports 1 Izvēlieties 1 Reģistrēt adresi = 0x40004C0C

Un mums var būt vajadzīgi citi.

Labi, tagad mēs zinām GPIO reģistra adrešu diapazonu, lai kontrolētu vienu sarkano gaismas diodi.

Ļoti svarīga piezīme. Katrs MSP432 LaunchPad plates I/O ports ir vairāku (parasti 8) tapu vai līniju kolekcija, un katru no tām var atsevišķi iestatīt kā ievadi vai izvadi.

Tas nozīmē, piemēram, ka, ja iestatāt vērtības "1. porta virziena reģistra adrese", jums ir jāuztraucas par to, kuru bitu (vai bitus) jūs iestatāt vai maināt šajā adresē. Vairāk par šo vēlāk.

GPIO portu programmēšanas secība

Visbeidzot, mums nepieciešamais gabals ir process vai algoritms, ko izmantot, lai kontrolētu LED.

Vienreizēja inicializācija:

  • Konfigurējiet P1.0 (P1SEL1REG: P1SEL0REG reģistrs) <--- 0x00, 0x00 normālai GPIO funkcionalitātei.
  • Iestatiet P1DIRREG virziena reģistra bitu 1 kā izvadi vai HIGH.

Cilpa:

Ierakstiet HIGH uz P1OUTREG reģistra 0. bitu, lai ieslēgtu sarkano gaismas diodi

  • Izsaukt aizkaves funkciju
  • Lai izslēgtu sarkano gaismas diodi, ierakstiet LOW uz P1OUTREG reģistra 0
  • Izsaukt aizkaves funkciju
  • Atkārtojiet cilpu

Kuras ievades / izvades funkcija (SEL0 un SEL1 konfigurēšana)

Daudzām LaunchPad tapām ir vairāki pielietojumi. Piemēram, tā pati tapa var būt standarta digitālais GPIO, vai arī to var izmantot UART vai I2C seriālajos sakaros.

Lai šai tapai izmantotu kādu konkrētu funkciju, šī funkcija ir jāizvēlas. Jums ir jākonfigurē tapas funkcija.

Šim solim ir attēls, kas mēģina vizuāli izskaidrot šo jēdzienu.

SEL0 un SEL1 adreses veido pāru kombināciju, kas darbojas kā sava veida funkciju / funkciju izvēle.

Mūsu nolūkiem mēs vēlamies standarta digitālo GPIO bitam 0. Tas nozīmē, ka mums ir nepieciešams 0 bits, lai SEL0 un SEL1 būtu LOW.

Ostas programmēšanas secība (atkal)

1. Uzrakstiet 0x00 uz P1 SEL 0 reģistru (adrese 0x40004C0A). Tas nosaka LOW bitam 0

2. Uzrakstiet 0x00 uz P1 SEL 1 reģistru (adrese 0x40004C0C). Tas nosaka LOW bitam 0, iestatījumu GPIO.

3. Ierakstiet 0x01 uz P1 DIR reģistru (adrese 0x40004C04). Tas nosaka HIGH bitam 0, kas nozīmē OUTPUT.

4. Ieslēdziet LED, ierakstot 0x01 līdz P1 OUTPUT Register (adrese 0x40004C02)

5. Veiciet kādu kavēšanos (vai veiciet tikai vienu darbību, veicot atkļūdošanu)

6. Izslēdziet LED, ierakstot 0x00 līdz P1 OUTPUT Register (adrese 0x40004C02)

7. Veiciet kaut kādu kavēšanos (vai veiciet tikai vienu soli, veicot atkļūdošanu)

8. Atkārtojiet 4. līdz 7. darbību.

Saistītais video šim solim mūs iepazīstina ar visu procesu tiešraides demonstrācijā, kad mēs veicam un izrunājam visas montāžas instrukcijas, kā arī parādām LED darbību. Lūdzu, atvainojiet videoklipa garumu.

3. darbība. Vai pamanījāt videoklipa vienu trūkumu?

Videoklipā, kas apraksta visu LED programmēšanas un iedegšanas procesu, galvenajā cilpā bija papildu solis, ko varēja pārvietot uz vienreizēju inicializāciju.

Paldies, ka veltījāt laiku šīs instrukcijas izskatīšanai.

Nākamais paplašina to, ko mēs šeit esam sākuši.

Ieteicams: