| I. Melanjutkan dari yang sebelumnya ke yang berikutnya Pada kuliah sebelumnya, kita telah membiasakan diri dengan proses dasar pengembangan program CC2430 di IAR melalui percobaan kecil dengan kedipan LED yang paling sederhana. Pisau setidaknya sudah diasah (meskipun saya tidak terlalu pandai menggunakan batu asah ini), dan sekarang saatnya untuk mulai membantai serangga :). Selanjutnya, mari kita pelajari beberapa eksperimen dasar CC2430. Setiap percobaan kecil, dibagi menjadi "pengenalan percobaan", "diagram alir program", "kode sumber percobaan dan analisis" tiga bagian deskripsi. Artikel ini menjelaskan interupsi eksternal. Kedua, interupsi eksternal(1) Pengantar eksperimen Interupsi adalah mikrokontroler waktu nyata untuk menangani peristiwa internal atau eksternal, mekanisme internal. Ketika beberapa jenis peristiwa internal atau eksternal terjadi, sistem interupsi mikrokontroler akan memaksa CPU untuk menghentikan sementara program yang sedang dieksekusi, tetapi untuk pergi ke pemrosesan peristiwa interupsi, pemrosesan interupsi selesai, dan kemudian kembali untuk disela oleh program, terus dieksekusi. Interupsi dibagi menjadi interupsi eksternal dan interupsi internal, CC2430 berisi total 18 sumber interupsi (deskripsi interupsi spesifik dan definisi vektor interupsi, Anda dapat merujuk ke " CC2430 Chinese Manual "). Sekarang mari kita lihat diagram sirkuit papan pengembangan ini:
Development board telah terhubung ke tombol S1 dan P0.1, efek yang ingin dicapai oleh percobaan ini adalah memicu interupsi P0.1 dengan menekan tombol S1, dan kemudian mengontrol nyala/mati LED1 dalam subrutin layanan interupsi. (2) Prinsip eksperimen dan diagram alir Diagram alir percobaan adalah sebagai berikut:
c
(3) Kode sumber percobaan// file header#include // subfungsi delay#define led1 P1_0#define led2 P1_1#define led3 P1_2#define led4 P1_3void Delay( unsigned n) { & &
u nsigned tt;for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); & &
nbsp; for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); }// inisialisasi kristal 32Mvoid xtal_init( void ) { TIDUR &=~0x04; & nbsp; //semua daya menyalawhile (! (SLEEP & 0x40 )); // osilator kristal aktif dan stabil CLKCON &=~x47; &
nbsp; //Pilih osilator kristal 32MHz SLEEP |=0x04; }//LED inisialisasivoid led_init( void ) { P1SEL =0x00;  
; //P1 adalah port I/O normal P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Output
led1 = 0; led2 = 0; led3 = 0; led4 = 0; }// inisialisasi inisialisasi I/O dan interupsi eksternalvoid io_init( void ) { P0INP &=~0X02;
/ /P0.1 memiliki pull-up dan pull-down EA =1; //Total interupsi enable P0IE =1; &
P 0 interupsi aktifkan PICTL |=0X09; //P0.1 port interupsi aktifkan, pemicu tepi jatuh P0IFG &=~0x02
; //P0.1 interrupt flag clear 0 };//main functionvoid main( void ) { xtal_init(); led_init();
io_init();while ( 1 ); //menunggu interupsi }//subrutin layanan interupsi#pragma vektor = P0INT_VECTOR__interupsi void P0_ISR( void ) { EA =0;
/ / mematikan interupsi Delay
( 10000 ); Delay(10000 ); Delay(10000 ); Delay(10000 ); Delay(10000 ); &
i f ((P0IFG & 0x02 ) > 0 ) //kunci interupsi { P0IFG &=~0x02; &
nbsp; //P0.1 interupsi flag clear 0 led1 = !led1; } P0IF =0; &
nbsp; //P0 interrupt flag clear 0 EA =1; & nbsp; // menyalakan interupsi } Pertama-tama, inisialisasi Unity Clock: pilih osilator kristal 32MHz. Kemudian inisialisasi LED: atur P1 sebagai port I/O tujuan umum, atur arah P1.0 ~ P1.3 sebagai output, lalu matikan 4 LED. Kemudian konfigurasikan register SFR yang relevan untuk interupsi eksternal dan aktifkan pengaktifan interupsi pada semua level, yang melibatkan 3 SFR: EA, IEN1, PICTL (untuk penjelasan rinci tentang setiap SFR, silakan merujuk ke " Manual Bahasa Mandarin CC2430 "): EA - pengaktifan interupsi total; IEN1.5 - Pengaktifan interupsi P0; PICTL.3 - Pengaktifan interupsi port P0.1; PICTL.0 - setel tepi jatuh input port P0.1 untuk menyebabkan pemicu interupsi. Kemudian gunakan while (1) dalam fungsi utama untuk menunggu interupsi. Tips CC2430(1) Ringkasan Sintaks Penetapan Bit Sangat sering, kita perlu menetapkan nilai (0 atau 1) ke bit dalam SFR byte tunggal untuk mengontrol perangkat keras secara tepat. B eberapa SFR mendukung pengalamatan bit, seperti TCON, P0, dll., Saat ini, penetapan bit sangat sederhana, cukup tanyakan file header ioCC2430.h di bagian Akses Bit SFR dari definisi bit dapat berupa: P0_0 = 0; // P0 bit pertama dari penugasan nilai 0 P0_0 = 1; / / / P0 bit pertama dari penugasan nilai 1 Namun, ada SFR yang tidak mendukung pengalamatan bit, seperti pada kasus bit pertama dari penugasan nilai bit pertama dari bit pertama bit pertama dari bit pertama bit pertama bit kedua . Namun, beberapa SFR tidak mendukung pengalamatan bit, seperti PICTL dalam percobaan ini, ketika Anda ingin menetapkan nilai pada salah satu dari mereka, sintaksnya adalah sebagai berikut: PICTL &= ~ 0x01; //menetapkan nilai 0 ke bit pertama PICTL |= 0x01; //menetapkan nilai 1 ke bit pertama Anda dapat mengingatnya & amp;= ~, |= ~, |= ~, |= P0_0 = 1; //menetapkan nilai 1 ke bit pertama P0 . amp;= ~, |= adalah dua sintaks penugasan bit yang umum. (2) Ringkasan Pengaktifan Interupsi Ketika sebuah interupsi terlibat dalam sebuah program, interupsi tersebut harus diaktifkan sebelum interupsi dipicu. S istem pengaktifan interupsi C51, struktur hirarkinya sangat jelas: bos interupsi: EA adalah bos, bertanggung jawab atas pengaktifan interupsi total: EA = 1; kapten detasemen interupsi: berikutnya adalah untuk setiap komponen fungsional (seperti P0, timer 1, dll.) Mengaktifkan kontrol, SFR seperti itu umumnya dapat dialamatkan bit, penamaan umumnya berisi IE (Interrupt Enable): P0IE = 1; anggota tim interupsi : detasemen, tetapi karena gangguanprogram , interupsi harus diaktifkan sebelum memicu interupsi.
s etiap anggota tim interupsi: tim tetapi karena setiap komponen fungsional juga berisi beberapa interupsi, sehingga level terakhir adalah untuk setiap kontrol pengaktifan interupsi, SFR semacam itu umumnya tidak dapat dialamatkan bit, yang dinamai secara umum mengandung IE (Interrupt Enable) atau IM (Interrupt Mask): PICTL | = 0x01; tidak perlu menghafal SFR interupsi Tidak perlu menghafal SFR interupsi, selama Anda memahami hirarkinya, dan kemudian membaca buku manual atau file header saat Anda menggunakannya. (3) Penulisan Program Interupsi Penggunaan interupsi dalam sebuah program umumnya terdiri dari dua bagian: penulisan subrutin layanan interupsi dan pembukaan pengaktifan interupsi . P engaktifan interupsi telah diperkenalkan di atas, berikut ini adalah pengantar singkat persiapan subrutin layanan interupsi: Pertama-tama, tentukan vektor interupsi, bisa di file header ioCC2430.h di bagian Vektor Interupsi pada bagian kueri, sintaksnya adalah sebagai berikut: # vektor pragma = Vektor Interupsi dan kemudian diikuti dengan persiapan penangan interupsi, strukturnya adalah sebagai berikut: ___ interupsi void Nama Fungsi (___)
i nterupsi void nama fungsi(void) { //on interupsi //penanganan interupsi //interupsi flag clear 0 //off interupsi } III. Kesimpulan Artikel ini memperkenalkan metode implementasi interupsi eksternal sederhana berdasarkan CC2430, dengan dasar interupsi, kemudian kami memperkenalkan modul lain yang sangat penting - timer. CC2430 memiliki total empat buah timer, yang dapat dibagi menjadi tiga kategori: timer 1, timer 2, timer 3/4 (3 dan 4 menggunakan dasar yang) yang sama). </n;tt++). </n;tt++);. </n;tt++). </n;tt++); </n;tt++); </n;tt++); </n;tt++). </n;tt++). |