#include <iolpc2148.h>
#include "system.h"
#define VIC_TIMER0_bit (1 << VIC_TIMER0)
// 根据电路板上晶振设置振荡器频率
//#define OSCILLATOR_CLOCK_FREQUENCY 14745600 //in MHz
#define OSCILLATOR_CLOCK_FREQUENCY 12000000 //in MHz
unsigned int GetCclk(void) // 获得实际处理器时钟频率
{
return OSCILLATOR_CLOCK_FREQUENCY * (PLLCON & 1 ? (PLLCFG & 0xF) + 1 : 1);
}
//获得外围功能时钟频率
unsigned int GetPclk(void)
{
unsigned int divider;
switch (VPBDIV & 3)
{
case 0:
divider = 4;
break;
case 1:
divider = 1;
break;
case 2:
divider = 2;
break;
}
return GetCclk() / divider;
}
//相乘或相除,这里是计算锁相环频率
void FrecInit(void)
{
PLLCFG_bit.MSEL = 0x2; //M - 相乘
PLLCFG_bit.PSEL = 0x1; //P - 相除
PLLFEED_bit.FEED = 0xAA; //更改设置
PLLFEED_bit.FEED = 0x55;
PLLCON_bit.PLLE = 1; //允许 PLL
PLLFEED_bit.FEED = 0xAA; //更改设置
PLLFEED_bit.FEED = 0x55;
while (PLLSTAT_bit.PLOCK == 0); //等待PLOK稳定
PLLCON_bit.PLLC = 1; //连接 PLL
PLLFEED_bit.FEED = 0xAA; //更改设置
PLLFEED_bit.FEED = 0x55;
}