Daftar Isi:

PERAKITAN LENGAN GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah
PERAKITAN LENGAN GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah

Video: PERAKITAN LENGAN GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah

Video: PERAKITAN LENGAN GPIO - T.I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6: 3 Langkah
Video: Belajar Robot Mulai dari Sini #6 (Part 2): Program Lengan Robot Sederhana 2024, Juli
Anonim
PERAKITAN LENGAN GPIO - T. I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6
PERAKITAN LENGAN GPIO - T. I. KIT PEMBELAJARAN SISTEM ROBOTIK - LAB 6

Halo, Dalam Instruksi sebelumnya tentang mempelajari perakitan ARM menggunakan Texas Instruments TI-RSLK (menggunakan mikrokontroler MSP432), alias Lab 3 jika Anda melakukan T. I. Tentu saja, kami membahas beberapa instruksi yang sangat mendasar seperti menulis ke register, dan perulangan bersyarat. Kami melangkah melalui eksekusi menggunakan Eclipse IDE.

Program kecil yang kami jalankan tidak melakukan apa pun untuk berinteraksi dengan dunia luar.

Agak membosankan.

Mari kita coba mengubahnya sedikit hari ini dengan mempelajari sedikit tentang port input/output, khususnya, pin GPIO digital.

Kebetulan MSP432 ini hadir di papan pengembangan yang sudah memiliki dua sakelar tombol tekan, LED RGB, dan LED merah, yang semuanya terhubung ke beberapa port GPIO.

Ini berarti bahwa saat kita belajar mengatur dan memanipulasi pin ini melalui perakitan, kita dapat melihat efek tersebut secara visual.

Jauh lebih menarik daripada hanya melangkah melalui debugger.

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

Langkah 1: Mari Coba Menulis ke / Membaca Dari RAM

Sebelum kita melompat ke mengakses dan mengontrol GPIO, kita harus mengambil langkah kecil.

Mari kita mulai dengan hanya membaca dan menulis ke alamat memori standar. Kita tahu dari Instruksi sebelumnya (lihat gambar di sana) bahwa RAM dimulai pada 0x2000 0000, jadi mari kita gunakan alamat itu.

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

Kita mulai dengan struktur file dasar atau isi dari program assembly. Silakan merujuk ke Instruksi ini untuk membuat proyek perakitan menggunakan Code Composer Studio (CCS) TI, dan beberapa proyek sampel.

.ibu jari

.text.align 2.global main.thumbfunc main utama:.asmfunc;---------------------------------- -----------------------------------------------; (kode kami akan masuk ke sini); ------------------------------------------ ---------------------------------------.endasmfunc.end

Saya ingin menambahkan sesuatu yang baru ke bagian atas, apakah ada beberapa deklarasi (arahan). Ini akan menjadi lebih jelas nanti.

ACONST.set 0x20000000; kita akan menggunakan ini lebih jauh ke bawah (ini adalah konstanta)

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

Jadi konten file awal kami sekarang terlihat seperti ini:

.ibu jari

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

Sekarang kita memiliki di atas, mari tambahkan kode di antara garis putus-putus.

Kita mulai dengan menulis ke lokasi RAM. Pertama kita akan membuat pola data, sebuah nilai, yang akan kita tulis ke dalam RAM. Kami menggunakan register inti untuk menetapkan nilai atau data itu.

Catatan: ingat bahwa dalam kode, setiap baris yang memiliki titik koma (';') berarti itu semua adalah komentar setelah titik koma itu.

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

; MENULIS;------------------------------------------------ ---------------------------------------------------------- MOV R0, #0x55; register inti R0 akan berisi data yang ingin kita tulis ke lokasi RAM.; jelas, '0x' menunjukkan apa yang berikut adalah nilai hex.

Selanjutnya, mari kita lihat pernyataan yang TIDAK berfungsi.

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

; MOV hanya untuk data langsung ke register,; atau dari satu register ke register lain; yaitu, MOV R1, R0.; STR harus menggunakan STR.; STR R0, =ACONST; Istilah buruk dalam ekspresi ('='); STR R0, 0x20000000; Mode pengalamatan ilegal untuk instruksi toko; STR R0, SEKALI; Mode pengalamatan ilegal untuk instruksi toko

Tanpa menjelaskan terlalu banyak, kami mencoba menggunakan 'ACONST' di atas. Pada dasarnya, ini adalah stand-in atau konstan daripada menggunakan nilai literal seperti 0x20000000.

Kami tidak dapat menulis untuk menulis ke lokasi RAM menggunakan yang di atas. Mari kita coba sesuatu yang lain.

; sepertinya kita harus menggunakan register lain yang berisi lokasi RAM di

; perintah untuk menyimpan ke lokasi RAM tersebut MOV R1, #0x20000000; atur 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 memiliki alamat lokasi RAM; untuk menulis KE lokasi RAM itu.

Cara lain untuk melakukan hal di atas, tetapi menggunakan 'ACONST' alih-alih nilai alamat literal:

; mari kita lakukan hal di atas lagi, tetapi mari kita gunakan simbol alih-alih nilai lokasi RAM literal.

; kami ingin menggunakan 'ACONST' sebagai pengganti untuk 0x20000000.; kita masih harus melakukan '#' untuk menandakan nilai langsung,; jadi (lihat di atas), kita harus menggunakan direktif '.set'.; untuk membuktikannya, mari kita ubah pola data di R0. MOV R0, #0xAA; ok kita siap menulis ke RAM menggunakan simbol alih-alih nilai alamat literal MOV R1, #ACONST STR R0, [R1]

Video masuk ke beberapa detail lebih lanjut, serta melangkah melalui membaca dari lokasi memori.

Anda juga dapat melihat file.asm sumber terlampir.

Langkah 2: Beberapa Informasi Port Dasar

Image
Image
Beberapa Informasi Port Dasar
Beberapa Informasi Port Dasar
Beberapa Informasi Port Dasar
Beberapa Informasi Port Dasar

Sekarang kita memiliki ide yang baik bagaimana menulis ke / membaca dari lokasi RAM, ini akan membantu kita lebih memahami bagaimana mengontrol dan menggunakan pin GPIO

Jadi bagaimana kita berinteraksi dengan pin GPIO? Dari pandangan kita sebelumnya pada mikrokontroler ini dan instruksi ARM-nya, kita tahu bagaimana menangani register internalnya, dan kita tahu bagaimana berinteraksi dengan alamat memori (RAM). Tapi pin GPIO?

Kebetulan pin-pin tersebut dipetakan memori, jadi kita bisa memperlakukannya sama seperti alamat memori.

Ini berarti kita perlu tahu apa alamat-alamat itu.

Di bawah ini adalah alamat awal port. Omong-omong, untuk MSP432, "port" adalah kumpulan pin, dan bukan hanya satu pin. Jika Anda akrab dengan Raspberry Pi, saya yakin itu berbeda dari situasi di sini.

Lingkaran biru pada gambar di atas menunjukkan tulisan di papan untuk dua sakelar dan LED. Garis biru menunjuk ke LED yang sebenarnya. Kita tidak perlu menyentuh jumper header.

Saya membuat port yang kami maksud dengan huruf tebal di bawah ini.

  • 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 membutuhkan lebih banyak informasi.

Untuk mengontrol sebuah port, kita memerlukan beberapa alamat. Itu sebabnya dalam daftar di atas, kita melihat "alamat genap" atau "alamat ganjil".

Blok Alamat Pendaftaran I/O

Kami akan membutuhkan alamat lain, seperti:

  • Port 1 Input Alamat register = 0x40004C00
  • Port 1 Output Alamat register = 0x40004C02
  • Port 1 Arah Alamat register = 0x40004C04
  • Port 1 Pilih 0 Alamat pendaftaran = 0x40004C0A
  • Port 1 Pilih 1 Alamat register = 0x40004C0C

Dan kita mungkin membutuhkan orang lain.

Ok, sekarang kita tahu kisaran alamat register GPIO untuk mengontrol LED merah tunggal.

Catatan yang sangat penting: Setiap Port I/O pada papan LaunchPad MSP432 adalah kumpulan dari beberapa (biasanya 8) pin atau jalur, dan masing-masing dapat diatur secara individual sebagai input atau output.

Ini berarti, misalnya, jika Anda menyetel nilai untuk "Alamat Register Arah Port 1", Anda perlu memperhatikan bit (atau bit) mana yang Anda atur atau ubah di alamat itu. Lebih lanjut tentang ini nanti.

Urutan Pemrograman Port GPIO

Bagian terakhir yang kita butuhkan, adalah proses atau algoritma yang digunakan, untuk mengontrol LED.

Inisialisasi satu kali:

  • Konfigurasi P1.0 (P1SEL1REG:P1SEL0REG Register) <--- 0x00, 0x00 untuk fungsionalitas GPIO normal.
  • Atur bit register Direction 1 dari P1DIRREG sebagai output, atau HIGH.

Lingkaran:

Tulis HIGH ke bit 0 dari register P1OUTREG untuk menyalakan LED Merah

  • Panggil fungsi penundaan
  • Tulis LOW ke bit 0 dari register P1OUTREG untuk mematikan LED Merah
  • Panggil fungsi penundaan
  • Ulangi Loop

Fungsi Input / Output Yang Mana (Konfigurasi SEL0 dan SEL1)

Banyak pin di LaunchPad memiliki banyak kegunaan. Contoh, pin yang sama dapat berupa GPIO digital standar, atau dapat juga digunakan dalam komunikasi serial UART, atau I2C.

Untuk menggunakan fungsi khusus apa pun untuk pin itu, Anda harus memilih fungsi itu. Anda perlu mengkonfigurasi fungsi pin.

Ada gambar di atas untuk langkah ini yang mencoba menjelaskan konsep ini dalam bentuk visual.

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

Untuk tujuan kami, kami ingin GPIO digital standar untuk bit 0. Itu berarti kami membutuhkan bit 0 untuk SEL0 dan SEL1 menjadi LOW.

Urutan Pemrograman Port (Lagi)

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

2. Tulis 0x00 ke P1 SEL 1 Register (alamat 0x40004C0C). Ini menetapkan LOW untuk bit 0, pengaturan untuk GPIO.

3. Tulis 0x01 ke P1 DIR Register (alamat 0x40004C04). Ini menetapkan TINGGI untuk bit 0, yang berarti OUTPUT.

4. Nyalakan LED dengan menuliskan 0x01 ke P1 OUTPUT Register (alamat 0x40004C02)

5. Lakukan semacam penundaan (atau hanya satu langkah saat debugging)

6. Matikan LED dengan menuliskan 0x00 ke P1 OUTPUT Register (alamat 0x40004C02)

7. Lakukan semacam penundaan (atau hanya satu langkah saat debugging)

8. Ulangi langkah 4 sampai 7.

Video terkait untuk langkah ini membawa kita melalui seluruh proses dalam demo langsung, saat kita melangkah melalui dan berbicara melalui setiap instruksi perakitan, dan menunjukkan tindakan LED. Mohon maaf kepanjangan videonya.

Langkah 3: Apakah Anda Menangkap Satu Kelemahan dalam Video?

Dalam video yang menjelaskan seluruh proses pemrograman dan menyalakan LED, ada langkah tambahan di loop utama, yang dapat dipindahkan ke inisialisasi satu kali.

Terima kasih telah meluangkan waktu untuk mengikuti Instruksi ini.

Yang berikutnya memperluas apa yang telah kita mulai di sini.

Direkomendasikan: