Isi kandungan:
- Langkah 1: Mari Melompat ke kanan
- Langkah 2: Tingkatkan Kod - Tambahkan Fungsi
- Langkah 3: Tambahkan Kelewatan Busy-Loop
- Langkah 4: Standard Panggilan Prosedur Senibina ARM (AAPCS)
- Langkah 5: Fungsi Dengan Parameter - Fungsi Bersarang
- Langkah 6: Input GPIO - Tambah Suis
Video: BAHAGIAN 2 - PERTANDINGAN ARM GPIO - RGB - PANGGILAN FUNGSI - Suis: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
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
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:
Raspberry PI 3 - Aktifkan Komunikasi Bersiri ke TtyAMA0 hingga BCM GPIO 14 dan GPIO 15: 9 Langkah
Raspberry PI 3 - Aktifkan Komunikasi Bersiri ke TtyAMA0 ke BCM GPIO 14 dan GPIO 15: Saya baru-baru ini berminat untuk mengaktifkan UART0 pada Raspberry Pi (3b) saya supaya saya dapat menghubungkannya terus ke peranti tahap isyarat RS-232 menggunakan standard 9 -pin d-sub penyambung tanpa perlu melalui penyesuai USB ke RS-232. Sebahagian daripada minat saya
Bahagian 1 Perhimpunan ARM TI RSLK Makmal Kurikulum Pembelajaran Robotik 7 STM32 Nucleo: 16 Langkah
Bahagian 1 Perhimpunan ARM TI RSLK Robotik Pembelajaran Makmal Kurikulum 7 STM32 Nucleo: Fokus yang diajar ini adalah pengawal mikro STM32 Nucleo. Motivasi untuk ini dapat membuat projek pemasangan dari tulang kosong. Ini akan membantu kita menyelami lebih mendalam dan memahami projek Launchpad MSP432 (TI-RSLK) yang mempunyai
Bahagian 3: GPIO: Pemasangan ARM: Pengikut Talian: TI-RSLK: 6 Langkah
Bahagian 3: GPIO: Pemasangan ARM: Pengikut Talian: TI-RSLK: Helo. Ini adalah ansuran seterusnya di mana kami terus menggunakan pemasangan ARM (bukannya bahasa peringkat tinggi). Inspirasi untuk Instructable ini adalah Makmal 6 Kit Pembelajaran Sistem Robotik Texas Instruments, atau TI-RSLK. Kami akan menggunakan mikrofon
CARA MENGUMPULKAN ARM ROBOT KAYU YANG PENTING (BAHAGIAN 3: ARM ROBOT) - BERDASARKAN MICRO: BITN: 8 Langkah
CARA MENGUMPULKAN ARM ROBOT KAYU YANG PENTING (BAHAGIAN 3: ARM ROBOT) - BERDASARKAN MIKRO: BITN: Proses pemasangan seterusnya adalah berdasarkan penyelesaian mod penghalang yang boleh dihindari. Proses pemasangan di bahagian sebelumnya sama dengan proses pemasangan dalam mod penjejakan garis. Kemudian mari kita lihat bentuk akhir A
CARA MENGUMPULKAN ARM ROBOT KAYU YANG PENTING (BAHAGIAN 2: ROBOT UNTUK Mengelakkan Halangan) - BERDASARKAN MIKRO: BIT: 3 Langkah
CARA MENGUMPULKAN ARM ROBOT KAYU YANG PENTING (BAHAGIAN 2: ROBOT UNTUK Mengelakkan Halangan) - BERDASARKAN MIKRO: BIT: Sebelum ini kami memperkenalkan Armbit dalam mod penjejakan garis. Seterusnya, kami memperkenalkan cara memasang Armbit dalam mengelakkan mod halangan