Initialize( )

İşlemcinin başlatılmasına sistem saatini ayarlayarak başlıyorum. 12MHz kristal ile 120MHz osilatör çalıştıracağım (bu 60MHz sistem saati demek).
Mevcut ayarlarla bende sorun olmuyor ama PLL’i konfigüre ederken çarpım/bölüm işlemlerinin hiçbir ara adımında belirtilen sınırların dışına çıkmamanız gerekiyor. Bu, özellikle düşük harici kristal değerleri için olanaksız olabilir. Böyle durumlarda en mantıklı olan işlemciyi RC osilatörle başlatıp sonra kristale geçmek ve PLL’i açmak.

PLL bloğunun kristal girişini sistem saati çıkışına dönüştürmesi aşağıdaki sıralamayla oluyor:

XTAL >>>> /N1 (PLLPRE+2) >>>> xM (PLLDIV+2) >>>> /N2 (2*PLLPOST+1) >>>> Fosc


// PLL konfigürasyonu:
PLLFBD = 38;              // (2) : M=40  : 6*40  = 240
CLKDIVbits.PLLPRE = 0;    // (1) : N1=2  : 12/2  = 6
CLKDIVbits.PLLPOST = 0;   // (3) : N2=2  : 240/2 = 120 MHz

// Bu PLL ayari bize 60MHz komut cycle'i veriyor..
// Clock Switch: Primary Oscillator with PLL (NOSC=0b011)
__builtin_write_OSCCONH(0x03);
__builtin_write_OSCCONL(OSCCON | 0x01);
// Clock switch bekle:
while (OSCCONbits.COSC!= 0b011);
// PLL'in kilitlenmesini bekle:
while (OSCCONbits.LOCK!= 1);

Düşüncelerinizi yazın...

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.