lpc17 serisinde pll ayarları ile 12mhzlik harici osc ile 120mhz elde etmek için aldığım kit ile gelen arm calculator isimli bir programdan ayarlama yapıp kodları yapıştırdım. forumda bulduğum bir gecikme fonksiyonunuda ekledim. işlemcinin hangi frekans değerinde çalıstığını anlayabilmek için se bir led yakıp söndürmek istedim. 10sn boyunca led yanacak 10 sn ise sönük kalacak şekilde fakat 7 ile 8sn arasında bir periyodu var. kodlar aşağıda..#include "LPc17xx.h"
#include "stdint.h"
// PLL Function for LPC17xx
#define SCS_Val 0x20
#define CLKSRCSEL_Val 0x1
#define PLL0_SETUP 0x1
#define PLL0CFG_Val 0xe
#define CCLKCFG_Val 0x2
#define PLL1_SETUP 0x1
#define PLL1CFG_Val 0x23
#define USBCLKCFG_Val 0x5
void PLL_Init(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;
}
volatile unsigned long SysTickCnt; /* SysTick Counter */
void SysTick_Handler (void) { /* SysTick Interrupt Handler (1ms) */
SysTickCnt++;
}
void Delay (unsigned long tick) { /* Delay Function */
unsigned long systickcnt;
systickcnt = SysTickCnt;
while ((SysTickCnt - systickcnt) < tick);
}
int main(void)
{
SystemInit();
PLL_Init();
SysTick_Config(SystemCoreClock/1200 - 1); // Generate interrupt each 1 ms
LPC_PINCON->PINSEL0 = 0x0; // Bacakları Gpıo olarak ayarladık
// LPC_PINCON->PINSEL1 = 0X0;
LPC_GPIO0->FIODIR = 0x00100000; // set pin P0.20 as output (Output = 1, Input = 0)
LPC_GPIO1->FIODIR = 0x03800000;
while(1) {
if(LPC_GPIO1->FIOPIN&0x04000000)
{
LPC_GPIO0->FIOSET=0x00100000;
Delay(10000);
LPC_GPIO0->FIOCLR=0x00100000;
Delay(10000);
//LPC_GPIO1->FIOSET=0x00800000;
//Delay(100);
//LPC_GPIO1->FIOCLR=0x00800000;
//Delay(100);
//LPC_GPIO1->FIOSET=0x01000000;
/*Delay(100);
LPC_GPIO1->FIOCLR=0x01000000;
Delay(100);
LPC_GPIO1->FIOSET=0x02000000;
Delay(100);
LPC_GPIO1->FIOCLR=0x02000000;
Delay(100);*/
//LPC_GPIO1->FIOSET=0x04000000;
//Delay(100);
//LPC_GPIO1->FIOCLR=0x04000000;
//Delay(100);
}
}
}
kodlar çalısmaktadır.
sorum şu;
pll ayarları gecikme fonksiyonuna etki eder mi? ediyorsa nasıl bir etkisi vardır? işlemcinin hangi frekansta çalıstığını nasıl öğrenebilirim?
1200 değerini 1000 yaparsan düzelir. İşlemcini hangi frekansta çalıştığını öğrenmek istiyorsan debug yapabilirsin.Keil da peripherals->clocking and power control closk generation shematics sekmesinde öğrenebilirsin.
arkadaşlarada yardımcı olması amacı ile söyleyeyim. main fonksiyonunda StstemInit i silip sadece pll_Init yazında işlemci 120 mhz de çalışmakta gecikme fonksiyonunu 1 ms ve katları olması için ise 1200 yerine 833 yazmamız gerekmekte.