Isi kandungan:

PERSATUAN ARM GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah
PERSATUAN ARM GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah

Video: PERSATUAN ARM GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah

Video: PERSATUAN ARM GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah
Video: Alternative Controller [Maker Update] 2024, November
Anonim
PERSATUAN ARM GPIO - T. I. KIT PEMBELAJARAN SISTEM ROBOTIK - MAKMAL 6
PERSATUAN ARM GPIO - T. I. KIT PEMBELAJARAN SISTEM ROBOTIK - MAKMAL 6

Helo, Dalam Instructable sebelumnya mengenai pembelajaran pemasangan ARM menggunakan Texas Instruments TI-RSLK (menggunakan mikrokontroler MSP432), aka Lab 3 jika anda melakukan T. I. tentu saja, kami membaca beberapa arahan yang sangat asas seperti menulis ke daftar, dan perulangan bersyarat. Kami melalui eksekusi menggunakan Eclipse IDE.

Program remaja yang kami jalankan tidak ada hubungannya dengan dunia luar.

Jenis yang membosankan.

Mari cuba mengubahnya sedikit hari ini dengan mempelajari sedikit mengenai port input / output, khususnya pin GPIO digital.

Kebetulan MSP432 ini hadir di papan pengembangan yang sudah mempunyai dua tombol tekan, LED RGB, dan LED merah, semuanya terikat pada beberapa port GPIO.

Ini bermaksud bahawa semasa kita belajar mengatur dan memanipulasi pin ini melalui pemasangan, kita dapat melihat kesannya secara visual.

Jauh lebih menarik daripada hanya melalui debugger.

(Kami masih akan melangkah - ini akan menjadi fungsi 'kelewatan' kami):-D

Langkah 1: Mari Cuba Menulis ke / Membaca Dari RAM

Sebelum kita memasuki dan mengawal GPIO, kita harus mengambil langkah kecil.

Mari mulakan dengan hanya membaca dan menulis ke alamat memori standard. Kami tahu dari Instructable sebelumnya (lihat gambar di sana) bahawa RAM bermula pada 0x2000 0000, jadi mari kita gunakan alamat itu.

Kami akan memindahkan data antara register teras (R0) dan 0x2000 0000.

Kita mulakan dengan struktur fail asas atau kandungan program pemasangan. Sila rujuk Instructable ini untuk membuat projek pemasangan menggunakan TI's Code Composer Studio (CCS), dan beberapa contoh projek.

.badan

.text.align 2 utama global.thumbfunc utama utama:.asmfunc; ---------------------------------- -----------------------------------------------; (kod kami akan pergi ke sini); ------------------------------------------ ---------------------------------------.endasmfunc.end

Saya ingin menambahkan sesuatu yang baru ke bahagian atas, adakah terdapat beberapa pernyataan (arahan). Ia akan menjadi lebih jelas kemudian.

ACONST.set 0x20000000; kita akan menggunakan ini lebih jauh (ini adalah pemalar)

; jelas, '0x' menunjukkan apa yang berikut adalah nilai hex.

Oleh itu, kandungan fail permulaan kami kini kelihatan seperti:

.badan

.text.align 2 ACONST.set 0x20000000; kita akan menggunakan ini lebih jauh (ini adalah pemalar); jelas, '0x' menunjukkan apa yang berikut adalah nilai hex..global utama.thumbfunc utama utama:.asmfunc; --------------------------------------- ------------------------------------------; (kod kami akan pergi ke sini); ------------------------------------------ ---------------------------------------.endasmfunc.end

Sekarang kita mempunyai perkara di atas, mari kita tambahkan kod di antara garis putus-putus.

Kita mulakan dengan menulis ke lokasi RAM. Mula-mula kita akan menetapkan corak data, nilai, yang akan kita tulis ke dalam RAM. Kami menggunakan register teras untuk menetapkan nilai atau data tersebut.

Catatan: ingat bahawa dalam kod, mana-mana baris yang mempunyai titik koma (';') bermaksud semuanya adalah komen selepas titik koma.

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

; MENULIS; ------------------------------------------------ ----------------------------------------------- MOV R0, # 0x55; teras teras R0 akan mengandungi data yang ingin kami tulis ke lokasi RAM.; jelas, '0x' menunjukkan apa yang berikut adalah nilai hex.

Seterusnya, mari kita perhatikan pernyataan bahawa JANGAN berfungsi.

; MOV MOV tidak boleh digunakan untuk menulis data ke lokasi RAM.

; MOV hanya untuk data segera ke dalam daftar,; atau dari satu daftar ke daftar yang lain; iaitu, MOV R1, R0.; STR mesti menggunakan STR.; STR R0, = ACONST; Istilah buruk dalam ungkapan (the '='); STR R0, 0x20000000; Mod pengalamatan tidak sah untuk arahan kedai; STR R0, ACONST; Mod pengalamatan tidak sah untuk arahan kedai

Tanpa menjelaskan terlalu banyak, kami cuba menggunakan 'ACONST' di atas. Pada dasarnya, ia adalah stand-in atau pemalar dan bukannya menggunakan nilai literal seperti 0x20000000.

Kami tidak dapat menulis untuk menulis ke lokasi RAM menggunakan perkara di atas. Mari cuba yang lain.

; nampaknya kita mesti menggunakan daftar lain yang mengandungi lokasi RAM di

; memesan untuk menyimpan ke lokasi RAM itu MOV R1, # 0x20000000; tetapkan lokasi RAM (bukan isinya, tetapi lokasi) ke R1.; jelas, '0x' menunjukkan apa yang berikut adalah nilai hex. STR R0, [R1]; tulis apa yang ada di R0 (0x55) ke dalam RAM (0x20000000) menggunakan R1.; kami menggunakan register lain (R1) yang mempunyai alamat lokasi RAM; untuk menulis ke lokasi RAM itu.

Cara lain untuk melakukan perkara di atas, tetapi menggunakan 'ACONST' dan bukannya nilai alamat harfiah:

; mari lakukan perkara di atas sekali lagi, tetapi mari gunakan simbol dan bukannya nilai lokasi RAM literal.

; kami mahu menggunakan 'ACONST' sebagai stand-in untuk 0x20000000.; kita masih perlu melakukan '#' untuk menandakan nilai segera,; jadi (lihat di atas), kita harus menggunakan arahan '.set'.; untuk membuktikan ini, mari kita ubah corak data di R0. MOV R0, # 0xAA; ok kita sedia menulis ke RAM menggunakan simbol dan bukannya nilai alamat harfiah MOV R1, #ACONST STR R0, [R1]

Video ini menerangkan dengan lebih terperinci, serta membaca melalui lokasi memori.

Anda juga dapat melihat fail.asm sumber yang dilampirkan.

Langkah 2: Beberapa Maklumat Pelabuhan Asas

Image
Image
Beberapa Maklumat Pelabuhan Asas
Beberapa Maklumat Pelabuhan Asas
Beberapa Maklumat Pelabuhan Asas
Beberapa Maklumat Pelabuhan Asas

Sekarang kita mempunyai idea yang baik bagaimana menulis ke / membaca dari lokasi RAM, ini akan membantu kita memahami dengan lebih baik cara mengawal dan menggunakan pin GPIO

Jadi bagaimana kita berinteraksi dengan pin GPIO? Dari pandangan sebelumnya mengenai mikrokontroler ini dan arahan ARMnya, kita tahu bagaimana menangani daftar dalamannya, dan kita tahu bagaimana berinteraksi dengan alamat memori (RAM). Tetapi pin GPIO?

Kebetulan pin tersebut dipetakan dengan memori, jadi kami dapat memperlakukannya sama seperti alamat memori.

Ini bermaksud kita perlu mengetahui apakah alamat tersebut.

Berikut adalah alamat permulaan port. By the way, untuk MSP432, "port" adalah kumpulan pin, dan bukan hanya satu pin. Sekiranya anda biasa dengan Raspberry Pi, saya percaya itu berbeza daripada keadaan di sini.

Lingkaran biru pada gambar di atas menunjukkan tulisan di papan untuk dua suis dan LED. Garis biru menunjukkan LED sebenar. Kami tidak perlu menyentuh pelompat header.

Saya membuat port yang menjadi perhatian kami dengan huruf tebal di bawah.

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

Kami belum selesai. Kami memerlukan lebih banyak maklumat.

Untuk mengawal pelabuhan, kami memerlukan beberapa alamat. Itulah sebabnya dalam senarai di atas, kita melihat "alamat genap" atau "alamat ganjil".

Blok Alamat Daftar I / O

Kami memerlukan alamat lain, seperti:

  • Alamat Daftar Input Port 1 = 0x40004C00
  • Port 1 Output Register address = 0x40004C02
  • Port 1 Direction Register address = 0x40004C04
  • Port 1 Pilih 0 Alamat pendaftaran = 0x40004C0A
  • Port 1 Pilih 1 Alamat pendaftaran = 0x40004C0C

Dan kita mungkin memerlukan orang lain.

Ok, kita sekarang mengetahui rangkaian alamat GPIO untuk mengawal LED merah tunggal.

Catatan yang sangat penting: Setiap Pelabuhan I / O pada papan LaunchPad MSP432 adalah kumpulan beberapa (biasanya 8) pin atau garis, dan masing-masing boleh ditetapkan secara individu sebagai input atau output.

Ini bermaksud, sebagai contoh, jika anda menetapkan nilai untuk "Port 1 Direction Register Address", anda perlu prihatin dengan bit (atau bit) mana yang anda tetapkan atau ubah di alamat tersebut. Lebih lanjut mengenai ini kemudian.

Urutan Pengaturcaraan Pelabuhan GPIO

Bahagian terakhir yang kita perlukan, adalah proses atau algoritma untuk digunakan, untuk mengawal LED.

Permulaan sekali:

  • Konfigurasikan P1.0 (P1SEL1REG: Daftar P1SEL0REG) <--- 0x00, 0x00 untuk fungsi GPIO biasa.
  • Tetapkan bit register Direction 1of P1DIRREG sebagai output, atau TINGGI.

Gelung:

Tulis TINGGI hingga bit 0 dari daftar P1OUTREG untuk menghidupkan LED Merah

  • Panggil fungsi kelewatan
  • Tulis RENDAH ke bit 0 dari daftar P1OUTREG untuk mematikan LED Merah
  • Panggil fungsi kelewatan
  • Ulangi Gelung

Fungsi Input / Output yang mana (Konfigurasikan SEL0 dan SEL1)

Banyak pin di LaunchPad mempunyai banyak kegunaan. Contohnya, pin yang sama boleh menjadi GPIO digital standard, atau juga dapat digunakan dalam komunikasi bersiri UART, atau I2C.

Untuk menggunakan fungsi tertentu untuk pin itu, anda perlu memilih fungsi tersebut. Anda perlu mengkonfigurasi fungsi pin.

Terdapat gambar di atas untuk langkah ini yang cuba menjelaskan konsep ini dalam bentuk visual.

Alamat SEL0 dan SEL1 membentuk kombinasi pasangan yang bertindak sebagai semacam pemilihan fungsi / ciri.

Untuk tujuan kami, kami mahukan GPIO digital standard untuk bit 0. Ini bermaksud kami memerlukan bit 0 untuk SEL0 dan SEL1 menjadi RENDAH.

Urutan Pengaturcaraan Pelabuhan (Lagi)

1. Tulis 0x00 hingga P1 SEL 0 Daftar (alamat 0x40004C0A). Ini menetapkan RENDAH untuk bit 0

2. Tulis 0x00 hingga P1 SEL 1 Daftar (alamat 0x40004C0C). Ini menetapkan RENDAH untuk bit 0, menetapkan untuk GPIO.

3. Tulis 0x01 hingga P1 DIR Register (alamat 0x40004C04). Ini menetapkan TINGGI untuk bit 0, bermaksud OUTPUT.

4. Hidupkan LED dengan menulis Daftar 0x01 hingga P1 OUTPUT (alamat 0x40004C02)

5. Lakukan beberapa kelewatan (atau hanya melalui satu langkah semasa melakukan debug)

6. Matikan LED dengan menulis Daftar 0x00 hingga P1 OUTPUT (alamat 0x40004C02)

7. Lakukan beberapa kelewatan (atau hanya melalui satu langkah semasa melakukan debug)

8. Ulangi langkah 4 hingga 7.

Video yang berkaitan untuk langkah ini membawa kita melalui keseluruhan proses dalam demo langsung, ketika kita melangkah dan bercakap melalui setiap arahan pemasangan, dan menunjukkan tindakan LED. Mohon maaf sepanjang video.

Langkah 3: Adakah Anda Menangkap Satu Kelemahan dalam Video?

Dalam video yang melalui seluruh proses pemrograman dan menyalakan LED, ada langkah tambahan dalam gelung utama, yang dapat dipindahkan ke inisialisasi satu kali.

Terima kasih kerana meluangkan masa untuk menjalani Instructable ini.

Yang seterusnya memperluaskan apa yang telah kita mulakan di sini.

Disyorkan: