Elektronik / Elektronik Programlar/

ARM PLL Hesaplama programı ARM calculator

Uzun süredir ARM çalışmalarıma bitirme tezi dolayısıyla ara vermiş olsam da ne zamandır aklımda olan bir programı bugün tamamlayabildim: ARM Calculator.

İlgilenenlerin bildiği üzere ARM konusunda kullanıcılara ilk başta en karmaşık gelen ünitelerden biri saat kaynağı seçim bloğudur. LPC1768‘i baz alarak söylersek, bu birim gerek dahili osilatörden gerek dışarıdan beslenecek yapıda dizayn edilmiştir ve bazı bloklar gerekli aralıklarda frekanslarla beslenmeleri gerekmektedir. Aksi halde PLL’ler kitlenmez ve bunun sonucu olarak cihazımız istediğimiz gibi çalışmaz.

Ben de bu konu hakkında ilk çalıştığımda zorlansam da daha sonra Keil‘ın startup.s ve startup.c dosyalarına ve ilgili mikrodenetleyicinin datasheet’ine bakarak bu konuda çok fazla bilgi öğrendim. Hatta bu noktada Keil’da nasıl commentler kullanarak kullanıcı arayüzüne benzer kütüphaneler yazılabildiğini de gördüm.
Yalnız her ne kadar Keil bana hesaplamalarda kolaylık sağlasa da bunu görsel olarak ve debug yapmadan hesaplamak istedim ve sonuç olarak aşağıda ekran görüntüsünü görebileceğiniz programı yazdım.

ARM_Calculator

Yukarıdaki resimde görebileceğiniz üzere başlangıç değerlerini CCLK=12MHz ve USBCLK=48MHz olarak ayarladım. Olası yapılan hatalara karşı da uyarı notlarını programa ekledim.

Tüm ayarları yaptıktan sonra hazır yazılan fonksiyon kodunu kullanmak için ise “Show PLL Function Code” butonuna basmanız yeterli olacaktır. Bunun sonucunda aşağıda görülebilecek kod öbeği ekrana yansıyacaktır.

// FxDev.org
// PLL Function for LPC17xx

#define SCS_Val		0x20
#define CLKSRCSEL_Val	0x1
#define PLL0_SETUP	0x1
#define PLL0CFG_Val	0xb
#define CCLKCFG_Val	0x17
#define PLL1_SETUP	0x0
#define PLL1CFG_Val	0x0
#define USBCLKCFG_Val	0x5

void SystemInit (void)
{
    LPC_SC->SCS       = SCS_Val;
    if (SCS_Val & (1 < < 5))
    {
        while ((LPC_SC->SCS & (1< <6)) == 0);
    }

    LPC_SC->CCLKCFG   = CCLKCFG_Val;

    if (PLL0_SETUP)
    {
        LPC_SC->CLKSRCSEL = CLKSRCSEL_Val;
        LPC_SC->PLL0CFG   = PLL0CFG_Val;
        LPC_SC->PLL0CON   = 0x01;
        LPC_SC->PLL0FEED  = 0xAA;
        LPC_SC->PLL0FEED  = 0x55;
        while (!(LPC_SC->PLL0STAT & (1< <26)));

        LPC_SC->PLL0CON   = 0x03;
        LPC_SC->PLL0FEED  = 0xAA;
        LPC_SC->PLL0FEED  = 0x55;
    }

    if (PLL1_SETUP)
    {
        LPC_SC->PLL1CFG   = PLL1CFG_Val;
        LPC_SC->PLL1CON   = 0x01;
        LPC_SC->PLL1FEED  = 0xAA;
        LPC_SC->PLL1FEED  = 0x55;
        while (!(LPC_SC->PLL1STAT & (1< <10)));

        LPC_SC->PLL1CON   = 0x03;
        LPC_SC->PLL1FEED  = 0xAA;
        LPC_SC->PLL1FEED  = 0x55;
    }
    else

        LPC_SC->USBCLKCFG = USBCLKCFG_Val;
}

Son olarak yapmanız gereken ise main fonksiyonunun ilk satırında ekrana yansıyan yukarıdaki fonksiyonu bir kez çağırmak olacaktır. Ayrıca daha önceden yazdığım PINSEL ve System Timer Tick sekmelerinin de yararlı olacağı ve işlerinizi kolaylaştıracağı kanısındayım.

Projeye ait tüm kodları ve programı

Projeye ait tüm kodları ve programı: ARM PLL Hesaplama programı ARM calculator

Dosya indirme LINK listesi (TXT formatında) link-12071.zip şifre-pass: 320volt.com

Programların çalışabilmesi için sisteminizde Microsoft .NET Framework kurulu olması gerekmektedir. Microsoft .NET Framework kurulum dosyasına buradan ulaşabilirsiniz. Ayrıca programı istediğiniz şekilde paylaşıp, kullanabilir, ayrıca kendiniz sekmeler ekleyip, programı daha fonksiyonel hale getirebilirsiniz.

Herkese iyi çalışmalar, bol ARM’lı günler dilerim.

  1. RxCet 2013/05/17
  2. FxDev 2013/05/17
  3. RxCet 2013/05/17
  4. FxDev 2013/05/17
  5. RxCet 2013/05/17
  6. FxDev 2013/05/17
  7. uğur 2013/05/17
  8. FxDev 2013/05/17
  9. Kenan Doğan 2013/05/17
  10. FxDev 2013/05/17
  11. Met. 2013/05/17
  12. Lugrinder 2013/05/17

Yorum

Soru: