|
1. Menghubungkan tingkat atas dan bawah Pada artikel sebelumnya, kita belajar bersama tentang penerapan interupsi eksternal sederhana. Sekarang setelah kita memiliki pengalaman langsung dengan interupsi, mari kita bicara tentang interupsi pengatur waktu di bagian ini. CC2430 memiliki total 4 timer, yang dapat dibagi menjadi 3 kategori: timer 1, timer 2, timer 3/4 (penggunaan 3 dan 4 sama). Karena penulis juga baru mengenal CC2430 dan pada dasarnya tidak memiliki pengalaman praktis dalam proyek yang melibatkan timer, saya tidak berniat (dan tidak dapat berbuat apa-apa) untuk menganalisis timer secara mendalam. Artikel ini hanya memberikan eksplorasi eksperimental singkat tentang penggunaan timer 1 dalam interupsi count overflow, dan tidak menyebutkan fungsi penangkapan/output input/PWM-nya. Timer 2 dan Timer 3/4 hanyalah pengenalan fungsi sederhana. Setelah keterampilan penulis mencapai tingkat panas tertentu, saya akan berdiri di puncak pengalaman praktis Zigbee untuk meningkatkan esai ini. 2. Pengatur waktu 1Timer 1 adalah pengatur waktu 16-bit dengan modulasi pengatur waktu/penghitung/lebar pulsa. Ini memiliki 3 saluran perbandingan tangkapan/output input yang dapat diprogram secara individual, yang masing-masing dapat digunakan sebagai output PWM atau sebagai waktu tepi untuk menangkap sinyal input (untuk informasi tentang apa itu perbandingan tangkapan/output input dan cara mengimplementasikan output PWM, pembaca dapat merujuk ke manual Cina CC2430). Pengatur waktu memiliki konsep yang sangat penting:Mode operasi。 Mode operasi meliputi: Mode operasi gratis (berjalan bebas), mode cetakan (modulo) dan Mode Hitung Positif/Hitung Mundur (Atas-Bawah)。 Berikut ini adalah kutipan dari manual Cina CC2430 untuk pengenalan 3 mode:
Membandingkan ketiga mode, dapat dilihat bahwa nilai luapan dari mode operasi bebas 0xFFFF tidak dapat diubah; Dua mode lainnya memungkinkan kontrol yang tepat dari nilai luapan pengatur waktu dengan menetapkan nilai ke T1CC0. Eksperimen ini menggunakan fitur ini untuk memicu interupsi setiap 1 detik oleh pengatur waktu melalui T1CC0 tertentu, sehingga dapat secara akurat mengontrol interval berkedip lampu LED hingga 1 detik. (1) Pengantar percobaanDalam mode modulo timer, interval berkedip lampu LED dikontrol secara tepat oleh 1 detik, yaitu: 0,5 detik terang → 0,5 detik gelap → 0,5 detik → 0,5 detik redup ...... → Terang 0,5 detik → Gelap 0,5 detik (yaitu, interval waktu dari gelap ke terang adalah 1 detik). Inversi cahaya/gelap dicapai dengan interupsi yang meluap. (2) Bagan alir program
(3) Perhitungan yang relevanSeperti disebutkan sebelumnya, status lampu LED adalah: terang 0,5 detik → gelap 0,5 detik → terang 0,5 detik → redup 0,5 detik ...... → 0,5 detik terang → 0,5 detik gelap, dan perlu diterapkan dengan interupsi luap, sehingga periode luapan pengatur waktu harus 0,5 detik. Untuk melakukan ini, nilai luapan yang sesuai perlu dihitung (diatur sementara ke N). Frekuensi clock sistem dipilih sebagai 32MHz, dan frekuensi clock yang diberikan diberikan adalah 16MHz secara default (keduanya ditentukan oleh register fungsi khusus).CLKCONUntuk detailnya, silakan lihat manual bahasa Cina CC2430). Untuk Timer 1, atur crossover jamnya ke 128 divisi. Singkatnya, daftarnya adalah sebagai berikut:
Untuk menemukan N=62500, heksadesimalnya adalah 0xF424, yaitu, Anda perlu mengatur T1CC0H=0xF4, T1CC0L=0x24 . (4) Kode sumber dan analisis eksperimental/*
Deskripsi percobaan: Eksperimen Timer Timer1, jumlah timer meluap, LED1 berkedip
*/
#include
#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
kosongxtal_init(kosong)
{ TIDUR &= ~0x04; //都上电
sementara(! (TIDUR &0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; Pilih osilator kristal 32MHz TIDUR |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
kosongled_init(kosong)
{ P1SEL =0x00; P1 adalah port I/O normal P1DIR |=0x0F; Keluaran P1.0 P1.1 P1.2 P1.3
led1 =1; //关闭所有LED led2 =1; led3 =1; led4 =1;
}
/*T1初始化
-------------------------------------------------------*/
kosongtimer1_init(kosong)
{ EA =1; //开总中断 T1IE=1; //开T1中断 OVFIM =1; //开T1溢出中断
T1CC0L =0x24; //溢出值低8位 T1CC0H =0xF4; //溢出值高8位
T1CTL =0x0e; 128 persilangan; mode modulo (0x0000->T1CC0); Mulai berlari; T1JIKA =0; Menghapus tanda interupsi
}
/*主函数
-------------------------------------------------------*/
kosongutama(kosong)
{ xtal_init(); led_init(); timer1_init();
sementara(1); //等待溢出中断
}
/*T1终端服务子程序
-------------------------------------------------------*/
#pragma vektor = T1_VECTOR __interruptkosongT1_ISR(kosong)
{ EA =0; //关中断
led1 = !led1; //LED灯反转
EA =1; //开中断
T1CTL &= ~0x10; //清中断标志
}
Oke, kompilasi program dan debug online, LED1 pada papan pengembangan berkedip sesuai jadwal, dan rasanya interval berkedip sekitar 1 detik. Tapi ini tidak cukup untuk membuktikan keberhasilan percobaan, jika interval dapat ditentukan secara ketat menjadi 1s, itu akan sempurna ~ Jadi saya menyalakan jam WIN 7 (klik waktu di sisi kanan bilah tugas). Sambil melihat jarum detik, dia melihat kedipan LED1 dari sudut matanya. Hasilnya: dalam dua menit, kecepatan keduanya pada dasarnya persis sama (presisi ini dapat ditoleransi ~). Pada titik ini, percobaan pada dasarnya dapat dikatakan selesai, hehe ~ 3. Pengatur Waktu 2Timer 2 juga disebutPengatur waktu MAC, dirancang khusus untuk mendukung protokol pelacakan peristiwa di IEEE 802.15.4 MAC. Pengatur waktu memiliki penghitung luapan 8 digit yang dapat digunakan untuk merekam jumlah siklus yang telah terjadi; Ada register pengambilan 16-bit yang mencatat waktu yang tepat dari frame mulai diterima/dikirim atau waktu yang tepat transmisi selesai. Ini juga berisi register perbandingan output 16-bit yang menghasilkan berbagai sinyal gerbang perintah (mulai menerima, mulai mengirim, dll.) ke modul nirkabel pada waktu tertentu. 4. Pengatur waktu 3/4Timer 3/4 adalah pengatur waktu 8-bit dengan fungsi timer/counter/PWM. T3 / T4 memiliki 2 saluran perbandingan output, yang masing-masing dapat digunakan sebagai output PWM. 5. KesimpulanBagian ini terutama mempelajari metode interupsi luapan hitungan pengatur waktu 1, dan mewujudkan kontrol yang tepat dari interval berkedip lampu LED 1 detik. Hanya beberapa pengatur waktu lain hanya sekedar goresan, dan saya akan kembali untuk menambahkannya nanti. Di bagian selanjutnya, kami akan memperkenalkan komunikasi port serial CC2430.
|