Timer A
Timer A; clock pulselarını sayan, 16-bit register TAR'a sahip bir zamanlayıcıdır. Genellikle tetikleme ve çıkışları doğrudan sürmede kullanılan birkaç capture/compare (yakalama/karşılaştırma) kanalına da sahiptir. Donanımsal olarak iki ana parçadan oluşur.
Zamanlayıcı Bloğu
16-bit register TAR'a sahip çekirdektir. Frekansları ölçeklendirilebilen clock seçeneği vardır. Sayıcı 0 döndürüp TAIFG flagi aktif olmadığı sürece zamanlayıcı bloğu herhangi bir çıkış vermez.
Capture/Compare Kanalları
Çoğu olayın gerçekleştiği bu kanallar TACCRx registerlarına dayanır. TACCR0 hariç hepsi benzer bir çalışma yapısına sahiptir. Tüm kanallar aşağıdaki eylemleri gerçekleştirebilir.
Capture (Giriş Yakalama)
Girişin TACCRx'teki değerini yani zamanı sayma.
Compare (Karşılaştırma)
TAR'daki anlık değeri TACCRx'teki değerle karşılaştırıp eşit olduklarında çıkışı değiştirme. Çıkış harici veya dahili olabilir.
Interrupt Oluşturma
Seçili CCIFG flagini değiştirerek interrupt oluşturulabilir.
Sample Alma
Karşılaştırma yaparken girişi sample alma. Özel bir arayüzü olmayan bir cihazda seri haberleşirken A zamanlayıcısı kullanıldığında özellikle kullanışlıdır.
Sabit Gecikme Oluşturma
Sabit bir gecikme oluşturmanın en basit yolu TAR'ı beklemektir. Timer_A Control Register TACTL'ye ihtiyaç duyulur.
Clocklar
Bitler
- TAR (Timer Counter Register): Timer A'daki anlık değeri tutar.
- TACCRx (Timer Capture/Compare Register): Compare modunda, TAR'a karşı karşılaştırılacak değeri tutar. Capture modunda ise capture edildikten sonra anlık TAR değerini tutar. 16 bit register kullanıldığı için maksimum değeri 0xFFFF'tir.
- TACTL (Control Register): Timer A'yı konfigüre etmek için kullanılır. Bu register aşağıdaki gibi bölünür:
- Bit[0] – TAIFG: Timer_A Interrupt Flagi. 0 iken interrupt yoktur, 1 iken interrupt gönderilir.
- Bit[1] – TAIE: Timer_A Interrupt Enable. 0 iken interrupt devre dışı bırakılır, 1 iken interrupt oluşturulmasına izin verilir.
- Bit[2] – TACLR: Timer_A clear. 1 olarak ayarlamak TAR'ı, bölücüyü ve sayma yönünü sıfırlar. Otomatik olarak sıfırlanır ve her zaman 0 olarak okunur.
- Bits[5:4] – MCx – Mode Control bits. Timer 4 moda sahiptir.
- Stop(0): Güç tasarrufu için varsayılan olarak seçilidir. Tüm registerlar (TAR da dahil) zamanlayıcı tekrar çalıştığında kaldıkları yerden devam etmek için değerlerini korurlar.
- Continuous (2): Sayıcı 0x0000'ten 0xFFFF'e sürekli bir şekilde sayar ve sonrasında tekrar 0'dan yeniden sayar. Periyot
yani 65,536'dır. - Up(1): Sayıcı 0'dan TACCRx'teki değere kadar yukarı sayar. Bitiminde tekrar 0 değerini alır. Periyot TACCRx + 1'dir. Örneğin TACCRx 3 değerini aldığında 0, 1, 2, 3, 0... şeklinde devam eder. Bu mod PWM'deki gibi genellikle tüm kanallar aynı frekansta çıkış sağladığında kullanılır.
- Up/Down(3): Sayıcı 0'dan TACCRx'teki değere kadar yukarı sayar, sonrasında tekrar 0'a doğru aşağı sayar. Periyot 2*TACCRx'tir. Örneğin TACCRx 3 değerini aldığında 0, 1, 2, 3, 2, 1, 0, 1... şeklinde devam eder.
- Bit[7:6] – IDx – Input divider. Clock girişi bölücüsünü seçer.
- [00] = ID_0 – /1
- [01] = ID_1 – /2
- [10] = ID_2 – /4
- [11] = ID_3 – /8
- Bits[9:8] TASSELx: Timer_A clock source select. Kaynak için 4 seçenek vardır: iç kaynaklardan SMCLK veya ACLK ya da dış kaynaklardan TACLK veya INCLK.
- [00] = TASSEL_0 – TACLK
- [01] = TASSEL_1 – ACLK
- [10] = TASSEL_2 – SMCLK
- [11] = TASSEL_3 – INCLK
- TACCTLx – Capture/Compare Control Register: Capture/Compare seçeneklerini konfigüre etmek için kullanılır. Burada sadece bazı kısımlarına değineceğiz. Diğer detayları PWM'i anlatırken göstereceğiz.
- Bit[0] – CCIFG : Capture/compare interrupt flag. 0 iken interrupt yoktur, 1 iken interrupt gönderilir.
- Bit[4] – CCIE : Capture/compare interrupt enable. 0 iken İlgili flagin interrupt isteği devre dışı bırakılır, 1 iken interrupt oluşturulmasına izin verilir.
- Bit[8] – CAP : Capture mode. Compare veya Capture modunu seçmek için kullanılır. 0 = Compare, 1 = Capture.
- TAIV – Interrupt Vector Register: Hangi flagin interrupt istediğini anlamak için kullanılır. Sadece okunabilir ve TAIVx ile adlandırılan 3 biti kullanır. TAIVx'in değerleri ve anlamları aşağıdaki gibidir.
- 0x00 = No Interrupt Pending.
- 0x02 = Capture/Compare 1 – TACCR1 CCIFG.
- 0x04 = Capture/Compare 2 – TACCR2 CCIFG.
- 0x0A = Timer(TAR) Overflow – TAIFG.
- Diğerleri – Rezerve.
Adlandırma
DİKKAT!
Register isimlerini kullanıcı kılavuzundaki gibi kullanmak Timer0_A3 özgüdür. Örneğin TACTL TA0CTL ile aynıdır. Timer registerlarının TAxCTL, TAxCCR0 gibi adlandırıldığını unutmayın(x = Timer modül numarası). Örneğin Timer1_A3 için bu isimler TA1CTL, TA1CCR0 şeklinde olacaktır. TA0CTL ve diğer Timer0_A3; kullanım kolaylığı için TACTL, TACCR0 şeklinde bir daha tanımlanmıştır.
Delay Hesapları için Kullanışlı Formüller
TAR değerini 1 artırmak için gerekli zaman aşağıdaki gibidir.
- TAR Başına Gecikme
DIV Input Clock (Hz) - DIV = Input Clock divider. 1, 2, 4 veya 8.
TAR değerinin 0'dan TACCR0'a ulaşana kadar geçen süre aşağıdaki gibidir.
Periyot (saniye)
- Örneğin bölücü 2, clock 4Mhz ve TACCR0 999 olarak girildiğinde
Periyot