| I. Bir önceki makalenin devamı Bir önceki bölümde, basit harici kesmelerin birlikte uygulanmasını öğrendik. Kesmelerle ilgili pratik deneyim kazandıktan sonra, bu bölümde zamanlayıcı kesmelerini tartışacağız.CC2430, 3 kategoriye ayrılabilen 4 zamanlayıcıya sahiptir: Timer1, Timer2, Timer3/4 (3 ve 4'ün kullanımı aynıdır). Yazar da CC2430'a yeni dokunduğundan, zamanlayıcı deneyimini içeren proje temelde sıfırdır, bu nedenle zamanlayıcının derinlemesine analizini yapmak niyetinde değilim (ve yardımcı olamam). Bu makale, basit bir deneysel keşif yapmak için yalnızca zamanlayıcı 1 sayım taşması kesme kullanımı üzerine, giriş yakalama / çıkış karşılaştırması / PWM işlevi için atlanmıştır. Zamanlayıcı 2 ve Zamanlayıcı 3/4 de sadece kısaca tanıtılmıştır. Yazarın gücünün belirli bir ateş seviyesine ulaşmasını ve ardından bu makaleyi geliştirmek için Zigbee savaş deneyiminin yüksekliğinde durmasını bekliyorum. Zamanlayıcı 1 Timer1, zamanlayıcı/sayıcı/darbe genişliği modülasyonu işlevlerine sahip 16 bitlik bir zamanlayıcıdır. Her biri PWM çıkışı olarak kullanılabilen veya giriş sinyalinin kenar süresini yakalamak için kullanılabilen üç ayrı programlanabilir giriş yakalama / çıkış karşılaştırma kanalına sahiptir (giriş yakalama / çıkış karşılaştırmasının ne olduğu ve PWM çıkışlarının nasıl uygulanacağı hakkında daha fazla bilgi için okuyucular CC2430'un Çince kılavuzuna başvurabilirler). Zamanlayıcı çok önemli bir kavrama sahiptir: çalışma modu. Çalışma modları şunları içerir: serbest çalışma, modulo ve yukarı-aşağı. Aşağıda CC2430 Çince kılavuzundan üç modun tanıtımı yer almaktadır:
Üç mod karşılaştırıldığında, serbest çalışma modunun taşma değerinin 0xFFFF olduğu ve değiştirilemediği; diğer iki modun ise zamanlayıcının taşma değerini hassas bir şekilde kontrol etmek için T1CC0'a bir değer atanarak doğru bir şekilde kontrol edilebildiği görülebilir. Bu deney, LED'in 1 saniyelik yanıp sönme aralığını hassas bir şekilde kontrol etmek için zamanlayıcının belirli T1CC0 aracılığıyla her 1 saniyede bir kesme tetiklemesini sağlamak için bu özelliği kullanır. (1) Deneye giriş Zamanlayıcının modulo modunda, LED'in yanıp sönme aralığı tam olarak 1s olacak şekilde kontrol edilir, yani: aydınlık 0.5s → karanlık 0.5s → aydınlık 0.5s → karanlık 0.5s ...... → aydınlık 0,5s → karanlık 0,5s (yani karanlıktan aydınlığa geçiş anı 1s'dir). Aydınlık/karanlığın tersine çevrilmesi taşma kesmesi ile gerçekleştirilir. (2) Program akış şeması (3) İlgili hesaplamalar Daha önce de belirtildiği gibi, LED'in durumu şöyledir: aydınlık 0,5s → karanlık 0,5s → aydınlık 0,5s → karanlık 0,5s ...... → aydınlık 0.5s → karanlık 0.5s ve taşma kesmesi ile elde edilmesi gerekir, bu nedenle zamanlayıcının taşma periyodunun 0.5s olması gerekir. Bu amaçla, ilgili taşma değerinin hesaplanması gerekir (geçici olarak N'ye ayarlanır). Sistem saat frekansı 32MHz olarak seçilir ve zamanlayıcıya sağlanan saat frekansı varsayılan olarak 16MHz'dir (her ikisi de CC2430 Çince kılavuzunda bulunabilen özel işlev kaydı CLKCON tarafından yapılandırılır). Zamanlayıcı 1 için saat frekansını 128 bölüme ayarlayın. Özetlemek gerekirse, formül aşağıdaki gibi olabilir:
c
N = 62500 olduğunu, onaltılık değerinin 0xF424 olduğunu, yani T1CC0H = 0xF4, T1CC0L = 0x24 olarak ayarlamanız gerektiğini öğrenin.
(4) deneysel kaynak kodu ve analizi/* Deney açıklaması: Zamanlayıcı1 deneyi, zamanlayıcı sayısı taşması, LED1 yanıp sönmesi */ #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; /* sistem saati başlatma-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;& nbsp; // her ikisi de güçlenirkenwhile (! (SLEEP & 0x40 )); //kristal osilatör açık ve kararlı CLKCON &=~0x47; &
nbsp; //32MHz kristal osilatörü seçin SLEEP |=0x04; }/*LED başlatma-------------------------------------------------------*/void led_init( void ) { & nbsp; P1SEL = 0x00; //P1 normal bir I/O portudur P1DIR |=0x0F; & nbsp; //P1.0 P1.1 P1.2 P1.3 çıkışları led1 =1; &
nbsp; //Tüm LED'leri kapatın led2 =1; led3 =1; led4 =1; }/*T1 başlatma---------------------------
- ---------------------------*/void timer1_init( void ) {EA=1; // toplam kesmeyi aç & nbsp; T1IE=1; // T1 kesmesini açOVFIM=1; // T1 taşmasını aç
k esmeT1CC0L=0x24; //taşma değeri düşük 8 bit T1CC0H=0xF4; //taşma değeri yüksek 8 bit &
nbsp; T1CTL =0x0e ; //128 bölme; modulo modu (0x0000->T1CC0); çalışmaya başla;T1IF=0 ; &
nbsp; // kesme bayrağını temizle }/* ana fonksiyon-------------------------------------------------------*/void main ( void
) { xtal_init(); led_init(); timer1_init();while ( 1 ); &
nbsp; //taşma kesmesi için bekle }/*T1 terminal servis alt rutini-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt
v oid T1_ISR( void ) {EA=0; //kesme kapalı led1 = !
led1; //LED'ler ters çevrildiEA=1; //Kesmede  
; T1CTL &=~0x10; // kesme bayrağını temizle } Tamam, programı derleyin ve çevrimiçi hata ayıklama, LED1 üzerindeki geliştirme kartı beklendiği gibi yanıp sönüyor, yaklaşık 1 saniyelik yanıp sönme aralığını hissedin. Ancak bu, deneyin başarısını kanıtlamak için yeterli değildir, eğer 1 saniyelik aralığı titizlikle belirleyebilirseniz mükemmel olur ~ bu yüzden WIN 7 saatini açtım (görev çubuğunun sağ tarafına tıklayın zaman olabilir). Saniye ibresini izlerken göz ucuyla yanıp sönen LED1'e baktım. Sonuç: iki dakika içinde, ikisinin hızı temelde aynı (bu doğruluk tolere edilebilir ~). Bu noktada, deneyin temelde tamamlandığı söylenebilir, hehehe~ Üçüncüsü, Zamanlayıcı 2 MAC zamanlayıcısı olarak da bilinen Timer2, IEEE 802.15.4 MAC'deki olay izleme protokolünü desteklemek için özel olarak tasarlanmıştır. Zamanlayıcı, gerçekleşen döngü sayısını kaydetmek için kullanılabilen 8 bitlik bir taşma sayacına sahiptir; bir çerçeve başlangıç sınırlayıcısının alındığı / iletildiği veya bir iletimin tamamlandığı tam zamanı kaydetmek için kullanılan 16 bitlik bir yakalama kaydına sahiptir; ve ayrıca belirli bir zamanda kablosuz modüle çeşitli komut seçici iletişim sinyalleri üretmek için kullanılan 16 bitlik bir çıkış karşılaştırma kaydı içerir (almaya başla, iletmeye başla, vb.). Zamanlayıcı 3/4 Zamanlayıcı 3/4, zamanlayıcı/sayıcı/PWM işlevlerine sahip 8 bitlik bir zamanlayıcıdır. t3/t4, her biri PWM çıkışı olarak kullanılabilen iki çıkış karşılaştırma kanalına sahiptir. V. Sonuç Bu bölümde, zamanlayıcı 1'in taşma kesmesini sayma yöntemini öğrendik ve 1 saniyelik LED yanıp sönme aralığının hassas kontrolünü sağladık. Diğer zamanlayıcıları gözden geçireceğiz ve daha sonra bunları eklemek için geri döneceğiz. Bir sonraki bölümde, CC2430 seri port haberleşmesi hakkında bilgi vereceğiz. |