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.
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 ?
Dostum doğru haklısın çözdüm.