Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: MC_Skywalker - 21 Kasım 2011, 19:05:58

Başlık: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 21 Kasım 2011, 19:05:58
LPC1768 ile basit deneme yapmaya çalışıyorum aşağıdaki hata mesajını alıyorum. sorunu anlayamdım.


LPC1768-0001.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o).

LPC1768 nin system init ve PLL olayını öğrenmeye çalışıyorum.


#include <LPC17xx.H>

void activate_PLL(void)
{
    LPC_SC->SCS=0x20;     //System Control and Status R/W 0 0x400F C1A0 5. bit 1 yapılıp xtal osc (main) aktif ediliyor
//OSCRANGE 4.bit  0 ise 1Mhz ile 2Mhz arası 1 ise 15Mhz ile 25Mhz arası   
//OSCEN 5.bit 0 ise devredışı 1 ise xtal uçlarına bağlı kristali kullanır
//OSCSTAT 6.bit 0 ise osilatör hazır değil 1 ise osilatör hazır (sadece okunur)
    LPC_SC->CLKSRCSEL=0x01; //select main oscilator CLKSRCSEL 2 bir uzunluğunda
//00 iç RC kaynağı osilatör olarak seçilmiş
//01 ana osilatörü PLL0 için kaynak seç  
//10 iç RTC (geröek zaman saati) osilatör olarak seç
//11 bu durum kullanımaz rezerve edilmiş bir değerdir.
    LPC_SC->CCLKCFG=0x03; //pllclk/4
    LPC_SC->PLL0CON=0x01; //pll activeted
    LPC_SC->PLL0CFG=0x20031; //msel=49,nsel=2;
    LPC_SC->PLL0FEED=0xAA; // pll i beslemek için yazılmalı datadheet e belirtiyor
    LPC_SC->PLL0FEED=0x55; //
    while(!(LPC_SC->PLL0STAT&(1<<26)));
    LPC_SC->PLL0CON=0x07;
    LPC_SC->PLL0FEED=0xAA; // pll i beslemek için yazılmalı datadheet e belirtiyor
    LPC_SC->PLL0FEED=0x55; //
    LPC_SC->PCLKSEL0=0;   
}

// Gecikme Fonksiyonu
void Gecikme(long int sure)
{
long int i,k; // 16 bitlik i degiskeni tanimlaniyor.
for (i = 1; i<=sure; i++) // girilen deger i degiskeninden büyük olana kadar for içerisinde dön
{
for (k = 0; k <= 12000; k++)
{}
}
}
// Ana Fonksiyon
int main(void)
{
SystemInit ();      // ilk ayarlar yapılıyor
LPC_GPIO1->FIODIR0 = 0x00000001; //giris cikis ayarlama komutu 1 cikis 0 giris
LPC_GPIO1->FIOCLR0 = 0x00000001; // 1. biti cikis digerleri giris
activate_PLL();

while (1)
{ //sonsuz döngü

LPC_GPIO1->FIOSET0 = 0x00000001; //1. biti 1 yap
Gecikme(500); //bekleme yap
LPC_GPIO1->FIOCLR0 = 0x00000001; //1. biti 0 yap
Gecikme(500); //bekleme yap
        }
}



Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: M_B - 21 Kasım 2011, 19:59:20
\Keil\ARM\Startup\NXP dizininde bulunanan system_LPC17xx.c dosyasını projeye ve klasore dahil etmek gerekiyor.
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 21 Kasım 2011, 20:10:38
Sağol. Bir yandan datasheet okuryup PLL i anlamaya çalışırken eklemeyi unutmuşum.

mbed ile çalışmak tembelleştirdi. Herşey hazır kütüpanede olunca.
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: fatihinanc - 22 Kasım 2011, 01:56:03
LPCXpresso IDE'si sağlam bir günümü harcamıştı bunun için :)
Proje dahil etmekte sıkıntı yok da yeni proje oluşturmak için bir sürü dosyayı siteme tanıtmak ve yolunu göstermek gerekiyor. Eclipse için biraz karın ağrıtıcı bir durum. Ama Keil'da o kadar zor değil...
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 25 Kasım 2011, 19:15:04
void SystemInit (void)
{
#if (CLOCK_SETUP)                       /* Clock Setup                        */
  LPC_SC->SCS       = SCS_Val;
  if (LPC_SC->SCS & (1 << 5)) {             /* If Main Oscillator is enabled  */
    while ((LPC_SC->SCS & (1<<6)) == 0);/* Wait for Oscillator to be ready    */
  }

  LPC_SC->CCLKCFG   = CCLKCFG_Val;      /* Setup Clock Divider                */
  /* Periphral clock must be selected before PLL0 enabling and connecting
   * - according errata.lpc1768-16.March.2010 -
   */
  LPC_SC->PCLKSEL0  = PCLKSEL0_Val;     /* Peripheral Clock Selection         */
  LPC_SC->PCLKSEL1  = PCLKSEL1_Val;

#if (PLL0_SETUP)
  LPC_SC->CLKSRCSEL = CLKSRCSEL_Val;    /* Select Clock Source for PLL0       */

  LPC_SC->PLL0CFG   = PLL0CFG_Val;      /* configure PLL0                     */
  LPC_SC->PLL0FEED  = 0xAA;
  LPC_SC->PLL0FEED  = 0x55;

  LPC_SC->PLL0CON   = 0x01;             /* PLL0 Enable                        */
  LPC_SC->PLL0FEED  = 0xAA;
  LPC_SC->PLL0FEED  = 0x55;
  while (!(LPC_SC->PLL0STAT & (1<<26)));/* Wait for PLOCK0                    */

  LPC_SC->PLL0CON   = 0x03;             /* PLL0 Enable & Connect              */
  LPC_SC->PLL0FEED  = 0xAA;
  LPC_SC->PLL0FEED  = 0x55;
  while (!(LPC_SC->PLL0STAT & ((1<<25) | (1<<24))));/* Wait for PLLC0_STAT & PLLE0_STAT */
#endif


buradaki PLL0CFG_Val değerini biz direk #define şeklinde tanımlarsak eğer pll kısmında kendimiz kod yazmadan systemini() otomatik olarak ayarlamaz mı?
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 25 Kasım 2011, 19:18:03
Bide PLL1 nedir? PLL0 ın mantığını anladım da. PLL1 usb diyor datasheet te ama anlamadım
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 25 Kasım 2011, 19:34:47
PLL0'ı öyle kurmalısın ki PLL1 ile tam 48Mhz USB clk değeri ede edebilesin. Bu sadece USB ile haberleşme yapacağız zaman set etmen gerekmekte. USB harici çalışma yapacasan PLL1 i kurmana gerek yok.

Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 25 Kasım 2011, 19:44:23
Alıntı yapılan: MC_Skywalker - 21 Kasım 2011, 19:05:58
LPC1768 ile basit deneme yapmaya çalışıyorum aşağıdaki hata mesajını alıyorum. sorunu anlayamdım.


LPC1768-0001.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o).

LPC1768 nin system init ve PLL olayını öğrenmeye çalışıyorum.


#include <LPC17xx.H>

void activate_PLL(void)
{
    LPC_SC->SCS=0x20;     //System Control and Status R/W 0 0x400F C1A0 5. bit 1 yapılıp xtal osc (main) aktif ediliyor
//OSCRANGE 4.bit  0 ise 1Mhz ile 2Mhz arası 1 ise 15Mhz ile 25Mhz arası   
//OSCEN 5.bit 0 ise devredışı 1 ise xtal uçlarına bağlı kristali kullanır
//OSCSTAT 6.bit 0 ise osilatör hazır değil 1 ise osilatör hazır (sadece okunur)
    LPC_SC->CLKSRCSEL=0x01; //select main oscilator CLKSRCSEL 2 bir uzunluğunda
//00 iç RC kaynağı osilatör olarak seçilmiş
//01 ana osilatörü PLL0 için kaynak seç  
//10 iç RTC (geröek zaman saati) osilatör olarak seç
//11 bu durum kullanımaz rezerve edilmiş bir değerdir.
    LPC_SC->CCLKCFG=0x03; //pllclk/4
    LPC_SC->PLL0CON=0x01; //pll activeted
    LPC_SC->PLL0CFG=0x20031; //msel=49,nsel=2;
    LPC_SC->PLL0FEED=0xAA; // pll i beslemek için yazılmalı datadheet e belirtiyor
    LPC_SC->PLL0FEED=0x55; //
    while(!(LPC_SC->PLL0STAT&(1<<26)));
    LPC_SC->PLL0CON=0x07;
    LPC_SC->PLL0FEED=0xAA; // pll i beslemek için yazılmalı datadheet e belirtiyor
    LPC_SC->PLL0FEED=0x55; //
    LPC_SC->PCLKSEL0=0;   
}

// Gecikme Fonksiyonu
void Gecikme(long int sure)
{
long int i,k; // 16 bitlik i degiskeni tanimlaniyor.
for (i = 1; i<=sure; i++) // girilen deger i degiskeninden büyük olana kadar for içerisinde dön
{
for (k = 0; k <= 12000; k++)
{}
}
}
// Ana Fonksiyon
int main(void)
{
SystemInit ();      // ilk ayarlar yapılıyor
LPC_GPIO1->FIODIR0 = 0x00000001; //giris cikis ayarlama komutu 1 cikis 0 giris
LPC_GPIO1->FIOCLR0 = 0x00000001; // 1. biti cikis digerleri giris
activate_PLL();

while (1)
{ //sonsuz döngü

LPC_GPIO1->FIOSET0 = 0x00000001; //1. biti 1 yap
Gecikme(500); //bekleme yap
LPC_GPIO1->FIOCLR0 = 0x00000001; //1. biti 0 yap
Gecikme(500); //bekleme yap
        }
}



hocam burada ilk olarak Pll0 ı kendiniz set etmişiniz ama aşağıda SystemInit() i çağırmışınız ve daha sonra activite_pll demişsiniz. SystemInit() Pll i aktif etmiyormu? burada hep SystemInit(); çağırmalımıyız? Bu arada Pll1 için teşekkürler..
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 25 Kasım 2011, 20:09:19
o kodd sağlam olmaya bilri LPC2138 kodunu değiştirerek yazdığım için unuttuğum yerler var.
o kod çalışmaya bilir. dediğim gibi önceki programdan kalma kod parçaçıkları var.
sadece PLL ektif etme kısımına bak.

Aşağıdaki resimde PLL0 için kullanılan gesiterlerin tablosu var çalışımalarım için çıkartmaya başladım.

[IMG]http://img64.imageshack.us/img64/4244/lpc1768reister.jpg[/img]
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 25 Kasım 2011, 20:40:07
hocam çok teşekkürler. Bu resim benim çok işime yaradı. Nasıl buluyorsunuz böle kaynakları? ben bulamıyorum. Eğer daha başka varsa böyle kaynaklar gönderirseniz sevinirm. tekrar Teşekkürler...
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 25 Kasım 2011, 21:30:52
o resimi ben datashetten bakarak kendim execlde yaptım sonra resim formatına cevirdim.

daha henüz bitmedi. Şu sıralar Star Wars™: The Old Republic™ oyunun Beta testinde oynadığım için tembellik yapıyorum .
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 25 Kasım 2011, 23:14:55
Hocam, bir sorum daha olucak, Cpu clock configuration register(CCLKCFG) PLLO çıkışını niye bölüyor? Kaça istersek bölüyor ama neden? şimdi ben PLL0 ayarı yaptım ve çıkışın 480 mhz olmasını istedim. direk cclk 480 olur mu? arada CCLKCFG var olduğundan bu değer düşer mi?
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 26 Kasım 2011, 09:40:49
LPC17xx user manual in 4. bölümü sorunlarına cevap olacaktır.

aşağıdaki resim LPC 17xx için clock sinyali üretininin block diyagramı sana fikir verecektir.

[IMG]http://img854.imageshack.us/img854/3716/lpc17xxclock.jpg[/img]


Aşağıdaki kodlar ise PLL0 ve PLL1  ile ilgili SystemInit() in düzeltilmiş hali


#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;
}

Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 27 Kasım 2011, 15:35:10
Alıntı yapılan: MC_Skywalker - 26 Kasım 2011, 09:40:49
LPC17xx user manual in 4. bölümü sorunlarına cevap olacaktır.

aşağıdaki resim LPC 17xx için clock sinyali üretininin block diyagramı sana fikir verecektir.

[IMG]http://img854.imageshack.us/img854/3716/lpc17xxclock.jpg[/img]
bende BU resimden bakarak öğrenemeye çalışıyorum. ancak CPU CLock divider pll0 çıkışına niçin konulmuş ve mesala keil startup da otomatik
cclksel i 4 e eşitlenmiş halde geliyor. cclksel nedemek? direk cpu ya göndermiyor da arada böyle bir uygulama koymuş. Acaba koruma amaçlımı?
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: z - 27 Kasım 2011, 15:53:44
Alıntı yapılan: buzkırıcı - 27 Kasım 2011, 15:35:10
bende BU resimden bakarak öğrenemeye çalışıyorum. ancak CPU CLock divider pll0 çıkışına niçin konulmuş ve mesala keil startup da otomatik
cclksel i 4 e eşitlenmiş halde geliyor. cclksel nedemek? direk cpu ya göndermiyor da arada böyle bir uygulama koymuş. Acaba koruma amaçlımı?

PLL cikisindaki sinyal CPU'nun max frekansindan daha yuksek degerlere set edilebilir. Bu durumda CPU overclock olacagindan CPU sapitir. PLL cikisini bolerek CPU nun duzgun calisabilecegi clk degerini elde ediyorsun.

Ayrica, CPU'yu max clkda kosturacagiz diye sart yok. CPU'yu cok dusuk hizlarda kostururken mesela USB unitesi gene olmasi gereken degerde clk ile beslenmek zorunda.
Bu durumda gene CPU clk degerini clock divider ile ayarlayabiliyoruz.
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: buzkırıcı - 27 Kasım 2011, 16:05:46
hıım o zaman diyelimki pll0 çıkışını 400 mhz yaptık. bunu cclkcfg ile 4 bölüp 100 mhz yapıyoruz. cpu clock hızı 100 mhz de çalışıyor. ama belli bir değerden yukarıya çekemiyoruz galiba pll0 çıkışını da direk cpu ya veremiyoruz o zaman. Teşekkürler anladım  ;D ;D
Başlık: Ynt: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o)
Gönderen: MC_Skywalker - 28 Kasım 2011, 14:30:00
FCCO değeri;

279.9698 Mhz ile 528.0017Mhz olacak şekilde Xtaline göre M ve N değerlerini hesaplıyorsun.
Alıntı Yap
The PLL0 output frequency (when PLL0 is both active and connected) is given by:
FCCO = (2 × M × FIN) / N

PLL inputs and settings must meet the following:
• FIN is in the range of 32 kHz to 50 MHz.
• FCCO is in the range of 275 MHz to 550 MHz.

The equation can be solved for other PLL parameters:
M = (FCCO × N) / (2 × FIN)
N = (2 × M × FIN) / FCCO
FIN = (FCCO × N) / (2 × M)