Bir mikrodenetleyicinin clock tree yapısını ve PLL yapılandırmasını açıklayın. Sistem saatini artırırken nelere dikkat edersiniz?
Cevap
Clock tree, saat kaynaklarından (osilatörler) başlayıp PLL ve bölücüler üzerinden CPU, bus'lar ve çevre birimlerine giden saat dağıtım ağıdır. STM32 örneğiyle anlatırsak:
Saat kaynakları
- HSI: Dahili RC osilatör (ör. 16 MHz). Hemen hazırdır ama sıcaklıkla yaklaşık %1 kayar.
- HSE: Harici kristal veya osilatör (ör. 8/25 MHz). Hassastır; USB, Ethernet ve UART için tercih edilir.
- LSI / LSE: Düşük hızlı kaynaklar. LSE 32.768 kHz kristaldir ve RTC için kullanılır; LSI ise bağımsız watchdog'u besler.
- PLL: Giriş frekansını çarparak yüksek sistem saati üretir.
PLL hesabı (STM32F4 örneği)
f_VCO = f_in / M * N, SYSCLK = f_VCO / P, USB_CLK = f_VCO / Q
HSE = 8 MHz, M = 8, N = 336, P = 2, Q = 7 için: VCO = 336 MHz, SYSCLK = 168 MHz, USB = 48 MHz.
Bus'lar ve bölücüler
SYSCLK → AHB prescaler (HCLK) → APB1 / APB2 prescaler. Her bus'ın maksimum frekansı vardır (F4'te APB1 en fazla 42 MHz). APB prescaler 1'den farklıysa timer'lar bus saatinin 2 katıyla çalışır; PWM hesaplarında sık yapılan hata budur.
Saat artırırken sıra
- Gerekirse voltage scaling / güç modunu ayarla.
- Flash wait state'lerini yeni frekansa göre artır (F4'te 168 MHz/3.3 V için 5 WS). Bu yapılmazsa CPU Flash'tan bozuk talimat okur ve çöker.
- HSE'yi aç, hazır olmasını bekle (timeout ile).
- PLL'i yapılandır, aç, kilitlenmesini (lock) bekle.
- AHB/APB bölücülerini ayarla, sonra SYSCLK kaynağını PLL'e geçir ve geçişi doğrula.
- Çevre birimlerinin saatlerini (
RCC->AHB1ENRvb.) sadece kullanılacakları zaman aç.
Ek noktalar
- Clock Security System (CSS): HSE arızalanırsa sistemi otomatik olarak HSI'ya geçirir ve NMI üretir.
- Saati değiştirdikten sonra
SystemCoreClockdeğişkenini güncellemek (SystemCoreClockUpdate()) gerekir; SysTick ve UART baud hesapları buna dayanır. - MCO pini ile saati osiloskopta dışarıdan doğrulayabilirsiniz.
İlgili Mikrodenetleyiciler soruları
- Kesme (interrupt) nedir? ISR yazarken nelere dikkat edilir?
- Watchdog timer nedir, ne işe yarar?
- Bir bootloader nasıl çalışır? Uygulamaya atlama ve güvenli firmware güncellemesi nasıl tasarlanır?
- Mekanik bir butonun debounce işlemi neden gereklidir ve yazılımda nasıl yapılır?
- DMA nedir, ne zaman kullanılır? DMA kullanırken cache coherency ve double buffering gibi konularda nelere dikkat edilmelidir?
- ADC çözünürlüğü, referans voltajı ve örnekleme hızı nedir? ADC okumasında doğruluğu etkileyen faktörler nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.