| I. Melanjutkan dari artikel sebelumnya Pada bagian sebelumnya, kita telah mempelajari implementasi interupsi eksternal sederhana secara bersama-sama. Setelah memiliki pengalaman praktis dengan interupsi, kita akan membahas interupsi timer pada bagian ini. CC2430 memiliki 4 buah timer, yang dapat dibagi menjadi 3 kategori: Timer1, Timer2, Timer3/4 (penggunaan 3 dan 4 sama). Karena penulis juga baru saja menyentuh CC2430, proyek yang melibatkan pengalaman pengatur waktu pada dasarnya adalah nol, jadi saya tidak bermaksud untuk (dan tidak dapat membantu) analisis mendalam tentang pengatur waktu. Artikel ini hanya membahas penggunaan interupsi penghitung timer 1 count overflow untuk melakukan eksplorasi eksperimental sederhana, karena fungsi pengambilan input/pembandingan output/PWM-nya dihilangkan. Timer 2 dan Timer 3/4 juga hanya diperkenalkan secara singkat. Menunggu kekuatan penulis untuk mencapai tingkat api tertentu, dan kemudian berdiri di puncak pengalaman tempur Zigbee untuk meningkatkan esai ini. Pengatur waktu 1 Timer1 adalah pengatur waktu 16-bit dengan fungsi timer / penghitung / modulasi lebar pulsa. Ini memiliki tiga saluran perbandingan input / output yang dapat diprogram secara individual, yang masing-masing dapat digunakan sebagai output PWM atau digunakan untuk menangkap waktu tepi sinyal input (untuk informasi lebih lanjut tentang apa itu input capture / output comparison dan bagaimana menerapkan output PWM, pembaca dapat merujuk ke manual bahasa Mandarin CC2430 sendiri). Pengatur waktu memiliki konsep yang sangat penting: mode operasi. Mode operasi meliputi: berjalan bebas, modulo dan naik-turun. Berikut ini adalah pengenalan tiga mode dari manual bahasa Mandarin CC2430:
Membandingkan ketiga mode, dapat dilihat bahwa: nilai luapan dari mode berjalan bebas adalah 0xFFFF yang tidak dapat diubah; sedangkan dua mode lainnya dapat dikontrol secara akurat dengan memberikan nilai ke T1CC0 untuk mengontrol nilai luapan timer secara tepat. Eksperimen ini memanfaatkan fitur ini untuk membuat timer memicu interupsi setiap 1 detik melalui T1CC0 tertentu, sehingga dapat secara tepat mengontrol interval kedipan LED 1 detik. (1) Pengantar percobaan Dalam mode modulo pengatur waktu, interval kedipan LED dikontrol secara tepat menjadi 1 detik, yaitu: terang 0,5 detik → gelap 0,5 detik → terang 0,5 detik → gelap 0,5 detik ...... → terang 0,5 detik → gelap 0,5 detik (yaitu, momen transisi dari gelap ke terang adalah 1 detik). Pembalikan terang/gelap direalisasikan dengan interupsi overflow. (2) Diagram alir program (3) Perhitungan terkait Seperti yang telah disebutkan sebelumnya, keadaan LED adalah: terang 0,5 detik → gelap 0,5 detik → terang 0,5 detik → gelap 0,5 detik ...... terang 0,5 detik → terang 0,5 detik → gelap 0,5 detik, dan perlu dicapai dengan interupsi luapan, sehingga periode luapan pengatur waktu harus 0,5 detik. Untuk tujuan ini, nilai luapan yang sesuai perlu dihitung (untuk sementara disetel ke N). Frekuensi clock sistem dipilih sebagai 32MHz, dan frekuensi clock yang disediakan untuk timer adalah 16MHz secara default (keduanya dikonfigurasikan oleh register fungsi khusus CLKCON, yang dapat ditemukan dalam manual bahasa Mandarin CC2430). Untuk timer 1, tetapkan frekuensi clock ke 128 divisi. Singkatnya, rumusnya adalah sebagai berikut:
c
Cari tahu N = 62500, heksadesimalnya adalah 0xF424, yaitu, Anda perlu mengatur T1CC0H = 0xF4, T1CC0L = 0x24 yaitu .
(4) kode sumber dan analisis percobaan/* Deskripsi percobaan: Percobaan Timer1, penghitung waktu meluap, LED1 berkedip */ #include #define led1 P1_0 # define led2 P1_1 #define led3 P1_0 #define led3 P1_1
1 #define led3 P1_2 #define led4 P1_3 &
n bsp; /* inisialisasi jam sistem-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;& nbsp; // keduanya menyalawhile (! (SLEEP & 0x40 )); // osilator kristal aktif dan stabil CLKCON &=~x47; &
nbsp; //pilih osilator kristal 32MHz SLEEP |=0x04; }/*Inisialisasi LED-------------------------------------------------------*/void led_init( void ) { & P1SEL = 0x00; //P1 adalah port I/O normal P1DIR |=0x0F; & nbsp; //P1.0 P1.1 P1.2 P1.3 output led1 =1; &
nbsp; //Mematikan semua LED led2 =1; led3 =1; led4 =1; }/* Inisialisasi T1---------------------------
- ---------------------------*/void timer1_init( void ) {EA=1; // nyalakan interupsi total & T 1IE=1; // nyalakan interupsi T1OVFIM=1; // nyalakan T1 overflow
i nterupsiT1CC0L =0x24; //nilai overflow rendah 8 bit T1CC0H =0xF4; //nilai overflow tinggi 8 bit & &
T1CTL = 0x0e; //128 divisi; mode modulo (0x0000->T1CC0); mulai berjalan;T1IF=0; &
nbsp; // clear interrupt flag }/* fungsi utama-------------------------------------------------------*/void main( void
) { xtal_init(); led_init(); timer1_init();while ( 1 ); &
nbsp; //menunggu interupsi overflow }/*Subrutin layanan terminal T1-------------------------------------------------------*/#pragma vektor = T1_VECTOR__interupsi
v oid T1_ISR( void ) {EA=0; //off interrupt led1 = !
led1; //LED dibalikEA=1; //On interrupt  
T1CTL &= ~0x10; // menghapus flag interupsi } OK, kompilasi program dan debugging online, papan pengembangan pada LED1 berkedip seperti yang diharapkan, rasakan interval berkedip sekitar 1 detik. Tetapi ini tidak cukup untuk membuktikan keberhasilan percobaan, jika Anda dapat dengan ketat menentukan interval 1 detik akan menjadi sempurna ~ jadi saya membuka jam WIN 7 (klik di sisi kanan taskbar waktu bisa). Sewaktu mengamati jarum detik, saya melirik ke arah LED1 yang berkedip-kedip dari sudut mata saya. Hasilnya adalah: dalam dua menit, kecepatan keduanya pada dasarnya sama (akurasi ini bisa ditoleransi ~). Pada titik ini, percobaan pada dasarnya bisa dikatakan selesai, hehehe~ Ketiga, Pengatur Waktu 2 Timer2, juga dikenal sebagai timer MAC, dirancang khusus untuk mendukung protokol pelacakan peristiwa dalam IEEE 802.15.4 MAC. Timer memiliki penghitung luapan 8-bit yang dapat digunakan untuk mencatat jumlah siklus yang telah terjadi; memiliki register pengambilan 16-bit yang digunakan untuk mencatat waktu yang tepat ketika pembatas awal frame diterima / dikirim atau waktu yang tepat ketika transmisi selesai; dan juga berisi register perbandingan keluaran 16-bit yang digunakan untuk menghasilkan berbagai sinyal komunikasi selektif-perintah ke modul nirkabel pada waktu tertentu (mulai menerima, mulai mengirim, dll.). Pengatur Waktu 3/4 Timer 3/4 adalah timer 8-bit dengan fungsi timer / penghitung / PWM. t3 / t4 memiliki dua saluran perbandingan output, yang masing-masing dapat digunakan sebagai output PWM. V. Kesimpulan Pada bagian ini, kita telah mempelajari metode penghitungan interupsi overflow dari timer 1, dan mencapai kontrol yang tepat dari interval kedipan LED 1 detik. Kami hanya akan membahas timer lainnya, dan kemudian kembali menambahkannya nanti. Pada bagian berikutnya, kami akan memperkenalkan tentang komunikasi port serial CC2430. |