lpc23xx PLL ayarları & baudrate ayarları hata nerede ?

Başlatan armsistem, 03 Kasım 2011, 23:58:09

armsistem

    Arkadaşlar ARM yeni başladım ,aşağıda kristal seçimi PLL ayarları baudrate ayarlarını nasıl yaptığımı anlatacağım , aslında nasıl yapamadığımı sorun şu ki bir yerlerde problem var lakin ben çözemedim ,yardımlarınızı bekliyorum.

- Kristal 16 Mhz
- Baudrate 115.200


1- FxDev arkadaşımızın hazırladığı exe'den yardım alarak ayarlarımızı yapıyoruz. Resim yükleyemedim o yüzden yazıyorum.
- OSC CLK:16 Mhz
- UCLK DIV: 6
- PLL0 Enable
- M:9
- N:1
- CCLK DIV : 5

Sonuçlar

USB CLCK: 48 Mhz
PLLCLK:288 Mhz
CCLK:57.6 Mhz
PCLK:57,6 Mhz
PCLK/2:28,6 Mhz
PCLK/4:14,4 Mhz
PCLK/8:7,2 Mhz

SIRA GELDİ UYGULAMAYA

void InitFrequency(void)
{
if((PLLSTAT & 0x02000000) != 0 ) // If PLL is already connected, disconnect the PLL
{
PLLCON &= ~0x02;
PLL_Feed();
}
PLLCON &= ~0x01; // Disable the PLL
PLL_Feed();
CLKSRCSEL = 0x01; // Ana kristali seç yani ne bağlıysa (Fin = 16 MHz)
PLLCFG = 0x8; // M=9, N=1 (2 x M x Fin) / N = Fcco = 288 MHz
PLL_Feed();

PLLCON = 0x01; // Enable the PLL
PLL_Feed();

CCLKCFG = 0x03; // CPU clock is 288 MHz / 4 = 72 MHz
USBCLKCFG = 0x05; // USB clock is 288 MHz / 6 = 48 MHz
PCLKSEL0 = 0x000000C0; // PCLK_UART0 is CCLK/8 clock// 36 Mhz

while(!(PLLSTAT & 0x04000000)); // Wait for the PLL lock

PLLCON |= 0x03; // Connect the PLL
PLL_Feed();
}



2-Baudrate ayarlarını yapıyoruz

LPC2000 UART Baudrate Calculator      NXP sitesinden indiriyoruz. Gereken değerli giriyoruz UART hızı + Baudrate

Please enter the following two parameters:         
UART clock [Hz]                           36000000
Requested  UART baudrate               115200
Maximum allowed relative error [%]       2,5
         
Best available fit for standard UART         
UART baudrate                           116129,03
Relative error                                      0,81%
UDL [dec]                                              20
UDLM [dec]                                             0
UDLL [dec]                                            20
         
Best available fit for enhanced UART         
UART baudrate                          115200,00
Relative error                                    0,00%
UDL [dec]                                            11
UDLM [dec]                                           0
UDLL [dec]                                          11
DivAddVal [dec]                                     7
MulVal [dec]                                          9
         
Terms of Use: http://www.nxp.com/terms         





UYGULAMA:

U0FCR = 7; // Enable and clear FIFO's
U0LCR = 0x83; // 8N1, enable Divisor latch bit
U0DLL = 0x27; // baud rate fixed to 115200 @ PCLK = 36 Mhz bu değeri çözemedim 20 yazdım 19 yazdım hexdesimal yazdım yine olmadı olmadı 
U0DLM = 0;
U0LCR = 3; // Disable Divisor latch bit




Not:Barış Bey'in kitabında bir örnek var ama anlamadım

Baud Üretici=PCLK/16XBAUD
Baud Üretici=30M/16x9600
=194=0xC2 sayısını elde ediyor nasıl ?

Not:http://prototalk.net/forums/showthread.php?t=11 busitede farklı çıkıyor.

armsistem

#1
Haklısın orada bir hata var. Yalnız hocam 72 Mhz nereden buldunuz. İyice çorba oldu şu değerleri kontrol edebilirmiyiz.


- Kristal 16 Mhz
- Baudrate 115.200
----------------------------
- OSC CLK:16 Mhz
- UCLK DIV: 6
- PLL0 Enable
- M:9
- N:1
- CCLK DIV : 5
------------------------------
USB CLCK: 48 Mhz
PLLCLK:288 Mhz
CCLK:57.6 Mhz
PCLK:57,6 Mhz
PCLK/2:28,6 Mhz
PCLK/4:14,4 Mhz
PCLK/8:7,2 Mhz
------------------------

Hocam yukarıdakiler hepsi doğrumudur ?


-------------------------------
void InitFrequency(void)
{if((PLLSTAT & 0x02000000) != 0 ) {
PLLCON &= ~0x02;
PLL_Feed();}
PLLCON &= ~0x01; // Disable the PLL
PLL_Feed();
CLKSRCSEL = 0x01; // Ana kristali seç yani ne bağlıysa (Fin = 16 MHz)
PLLCFG = 0x8; // M=9, N=1 (2 x M x Fin) / N = Fcco = 288 MHz
PLL_Feed();
PLLCON = 0x01; // Enable the PLL
PLL_Feed();
CCLKCFG = 0x03; // CPU clock is 288 MHz / 4 = 72 MHz
USBCLKCFG = 0x05; // USB clock is 288 MHz / 6 = 48 MHz
PCLKSEL0 = 0x000000C0; // PCLK_UART0 is CCLK/8 clock// 36 Mhz
while(!(PLLSTAT & 0x04000000)); // Wait for the PLL lock
PLLCON |= 0x03; // Connect the PLL
PLL_Feed();
}



Yukarıdaki kod size göre yanlış hata nerede ?