Isi kandungan:

BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis: 6 Langkah
BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis: 6 Langkah

Video: BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis: 6 Langkah

Video: BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis: 6 Langkah
Video: Arduino, Raspberry Pi dan micro:bit | Klinik #DigitalMaking 2024, Julai
Anonim
BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis
BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis

Pada Bahagian 1, kami belajar bagaimana menukar satu LED Merah pada papan pengembangan MSP432 LaunchPad dari Texas Instruments, menggunakan pemasangan dan bukannya C / C ++.

Dalam Instructable ini, kami akan melakukan sesuatu yang serupa - mengawal LED RGB yang juga terdapat di papan yang sama.

Sepanjang perjalanan, kami berharap dapat menambah pengetahuan mengenai pemasangan ARM, dan tidak hanya bersenang-senang menyalakan beberapa LED.

Langkah 1: Mari Melompat ke kanan

Sungguh, video pertama mengatakan semuanya. Tidak banyak lagi yang perlu ditambahkan.

Perkara utama adalah untuk membawa pulang idea bahawa setiap port I / O pada MSP432 terdiri dari sekumpulan alamat "register", yang pada gilirannya terdiri dari beberapa bit masing-masing.

Selanjutnya, bit dikumpulkan secara ortogonal. Maksudnya, bit 0 dari setiap alamat daftar merujuk pada pin I / O luaran yang sama.

Kami mengulangi idea bahawa memerlukan beberapa alamat pendaftaran untuk port itu, untuk melakukan sesuatu dengan hanya satu bit atau pin.

Tetapi dalam kes ini, kerana kita berurusan dengan LED RGB, kita perlu menangani tiga bit untuk setiap alamat pendaftaran.

Kami menegaskan bahawa kami memerlukan beberapa daftar: daftar DIR, daftar SEL0, daftar SEL1, dan daftar OUTPUT. Dan tiga bit setiap kali.

Langkah 2: Tingkatkan Kod - Tambahkan Fungsi

Image
Image

Seperti yang anda lihat di Langkah di atas, gelung program utama mempunyai banyak kod berulang, iaitu ketika kita mematikan LED.

Oleh itu, kita boleh menambah fungsi pada program. Kita masih harus memanggil fungsi itu setiap kali kita mahu mematikan LED, tetapi menyebabkan beberapa kod runtuh menjadi satu pernyataan.

Sekiranya kod LED mati kami lebih terlibat dengan lebih banyak arahan, ini akan menjadi penjimat memori sebenar.

Sebahagian daripada pengaturcaraan tertanam dan pengawal mikro lebih mengetahui ukuran program.

Video tersebut menerangkan.

Pada asasnya, kami menambah pernyataan bercabang ke kod utama kami, dan kami mempunyai sekatan kod lain yang merupakan fungsi yang menjadi percabangan. Dan setelah kita selesai, atau pada akhir fungsi, kita kembali ke penyataan seterusnya dalam program utama.

Langkah 3: Tambahkan Kelewatan Busy-Loop

Di bahagian Deklarasi kod, tambahkan pemalar untuk memudahkan tweet untuk masa yang diinginkan:

; sebarang perkataan selepas titik koma (';') memulakan komen.

; kod di bahagian ini memberikan nama kepada nilai.; anda juga boleh menggunakan '.equ' tetapi mereka sedikit berbeza.; '.equ' (saya rasa) tidak boleh diubah, sedangkan '.set' bermaksud anda boleh; ubah nilai 'DLYCNT' kemudian dalam kod jika anda mahu.; 'DLYCNT' akan digunakan sebagai nilai undur dalam subrutin penundaan. DLYCNT.set 0x30000

Tambahkan fungsi kelewatan baru:

kelewatan:.asmfunc; permulaan subrutin atau fungsi 'delay'.

MOV R5, #DLYCNT; memuatkan core core register R5 dengan nilai yang diberikan kepada 'DLYCNT'. dlyloop; ini menandakan permulaan gelung penundaan. penghimpun menentukan alamat. SUB R5, # 0x1; tolak a 1 dari nilai semasa dalam teras cpu register R5. CMP R5, # 0x0; bandingkan nilai semasa dalam R5 hingga 0. BGT dlyloop; cabang jika nilai dalam R5 lebih besar 0, ke label (alamat) 'dlyloop'. BX LR; jika kita sampai di sini, bermakna nilai R5 adalah 0. kembali dari subrutin..endasmfunc; menandakan akhir subrutin.

Kemudian di badan utama, dalam gelung utama, memanggil atau memanggil fungsi kelewatan:

; ini adalah pecahan kod, dari badan utama atau fungsi utama (lihat fail 'main.asm').

; ini adalah gelung dalam 'utama', dan menunjukkan bagaimana kita memanggil atau menggunakan fungsi 'kelewatan' baru itu.; '#REDON' dan '#GRNON' juga merupakan deklarasi (pemalar) (lihat bahagian atas 'main.asm').; mereka hanya cara mudah untuk menetapkan warna LED RGB yang ditentukan. gelung MOV R0, #REDON; Red - set inti cpu register R0 dengan nilai yang diberikan kepada 'REDON'. STRB R0, [R4]; register teras R4 sebelumnya ditetapkan dengan alamat output GPIO.; tulis apa yang ada di R0, ke alamat yang ditentukan oleh R4. BL delay; cabang ke fungsi 'delay' baru. BL ledsoff; cabang ke fungsi 'ledsoff' yang sudah ada. Kelewatan BL; ditto MOV R0, #GRNON; Hijau - ditto STRB R0, [R4]; dan sebagainya. BL delay BL ledsoff BL delay

Video ini diperincikan.

Langkah 4: Standard Panggilan Prosedur Senibina ARM (AAPCS)

Ia mungkin masa yang tepat untuk memperkenalkan sesuatu. Ini adalah konvensyen bahasa perhimpunan. Juga dikenali sebagai Prosedur Panggilan Piawai untuk Senibina ARM.

Ada banyak perkara ini, tetapi ini hanyalah standard. Itu tidak menghalangi kita untuk belajar pengaturcaraan pemasangan, dan kita dapat menerapkan standard yang sesuai ketika kita berjalan, setelah kita merasa nyaman dengan beberapa konsep yang kita pelajari.

Jika tidak, kita mungkin merasa seperti minum dari selang air yang besar. Terlalu banyak maklumat.

Daftar Teras

Oleh kerana kita sudah biasa dengan daftar teras MSP432, mari cuba sekarang menggunakan beberapa standard ini. Kami akan mematuhi ini semasa kami menulis fungsi seterusnya (hidupkan / matikan LED).

1) Kita seharusnya menggunakan R0 sebagai parameter fungsi. Sekiranya kita ingin memasukkan nilai ke dalam fungsi (subrutin), kita harus menggunakan R0 untuk melakukannya.

2) Kami akan menggunakan Daftar Pautan untuk tujuan yang dimaksudkan - ia menyimpan alamat yang menunjukkan ke mana harus kembali setelah subrutin selesai.

Anda akan melihat bagaimana kami menerapkannya.

Langkah 5: Fungsi Dengan Parameter - Fungsi Bersarang

Kami dapat membersihkan kod kami dan mengurangkan jumlah memori yang dimilikinya dengan menggabungkan bahagian berulang menjadi satu fungsi. Satu-satunya perbezaan dalam gelung utama ialah kita memerlukan parameter supaya kita dapat melewati pelbagai warna yang kita mahu lihat dari LED RGB.

Lihat video untuk maklumat lanjut. (maaf lama)

Langkah 6: Input GPIO - Tambah Suis

Mari menjadikannya lebih menarik. Sudah tiba masanya untuk menambahkan beberapa kawalan suis ke program pemasangan kami.

Instructable ini mempunyai gambar yang menunjukkan bagaimana dua suis on-board disambungkan ke MSP432.

Pada asasnya: Suis 1 (SW1 atau S1) disambungkan ke P1.1, dan Suis 2 (SW2 atau S2) disambungkan ke P1.4.

Ini menjadikan perkara menjadi sedikit menarik bukan hanya kerana kita berurusan dengan input dan bukannya output, tetapi juga kerana kedua suis ini menempati atau mengambil dua bit dari blok alamat pendaftaran yang sama seperti LED merah tunggal yang merupakan output.

Kami berurusan dengan menukar LED merah tunggal dalam Instructable ini, jadi kami hanya perlu menambahkan kod untuk mengendalikan suis.

Port 1 Daftar Blok Alamat

Ingatlah bahawa kami telah membahas perkara ini dalam Instructable sebelumnya, tetapi kami harus memasukkan yang baru:

  • Alamat Daftar Input Port 1 = 0x40004C00
  • Port 1 Output Register address = 0x40004C02
  • Port 1 Direction Register address = 0x40004C04
  • Pelabuhan 1 Perintang Aktifkan alamat Pendaftaran = 0x40004C06
  • Port 1 Pilih 0 Alamat pendaftaran = 0x40004C0A
  • Port 1 Pilih 1 Alamat pendaftaran = 0x40004C0C

Semasa menggunakan port sebagai input, ada baiknya menggunakan perintang pull-up atau pull-down dalaman MSP432.

Oleh kerana papan pengembangan Launchpad telah memasang dua suis ke tanah (RENDAH ketika ditekan), itu bermakna kita harus menggunakan perintang tarik UP untuk memastikan kita mempunyai TINGGI padat ketika tidak ditekan.

Perintang Pull Up / Pull Down

Ia memerlukan dua alamat Port 1 Register yang berbeza untuk mengikat input suis ke resistor pull-up.

1) Gunakan daftar Port 1 Resistor-Enable (0x40004C06) untuk menunjukkan bahawa anda mahukan perintang (untuk dua bit), 2) dan kemudian gunakan Port Output register (0x40004C02) untuk menetapkan resistor sebagai pull-up atau pull -down. Mungkin kelihatan membingungkan bahawa kita menggunakan Output register pada input. Output register hampir seperti dua tujuan.

Oleh itu, untuk menyatakan semula dengan cara lain, daftar Output boleh menghantar HIGH atau LOW ke output (seperti LED merah tunggal), dan / atau ia digunakan untuk mengatur resistor pull-up atau pull-down untuk input, TETAPI HANYA jika ciri tersebut telah diaktifkan melalui daftar Resistor-Enable.

Penting di atas - semasa menghantar / menetapkan RENDAH atau TINGGI ke mana-mana bit output, anda perlu mengekalkan keadaan penarikan / penarikan bit input secara serentak.

(video cuba menerangkan)

Membaca Bit Input Port

  • Tetapkan fungsi SEL0 / SEL1 untuk GPIO
  • Tetapkan daftar DIR sebagai input untuk bit suis, tetapi sebagai output untuk LED (serentak dalam bait yang sama)
  • Dayakan perintang
  • Tetapkannya sebagai perintang penarik
  • Baca port
  • Anda mungkin ingin menyaring nilai yang dibaca untuk mengasingkan bit yang anda perlukan (beralih 1 dan 2)

Disyorkan: