void TargetResetInit(void)
{
#ifdef __DEBUG_RAM
MEMMAP = 0x2; // remap
#endif
#ifdef __DEBUG_FLASH
MEMMAP = 0x1; // remap
#endif
#ifdef __IN_CHIP
MEMMAP = 0x1; // remap
#endif
if ( PLLSTAT & (1 << 25) ) // if the PLL was connected
{
PLLCON = 0x01;
PLLFEED = 0xAA; // disconnect the PLL
PLLFEED = 0x55;
PLLCON = 0x00;
PLLFEED = 0xAA; // disable the PLL
PLLFEED = 0x55;
}
else if ( PLLSTAT & (1 << 24) ) // if the PLL was enabled // 如果PLL已被使能,则先禁止PLL
{
PLLCON = 0x00;
PLLFEED = 0xAA; // disable the PLL
PLLFEED = 0x55;
}
SCS |= 0x20; // Enable the main OSC,,1MHz~20MHz
while( !(SCS & 0x40) ); // Wait until main OSC is usable
PLLCON = 1; // Enable but disconnect the PLL
CLKSRCSEL = 0x01; // select main OSC as the PLL clock source
PLLCFG = ( ( (PLL_NValue-1) << 16) | (PLL_MValue-1) ); // set the PLLCFG
PLLFEED = 0xAA; // Enable PLL
PLLFEED = 0x55;
while (((PLLSTAT & (1 << 24)) == 0)); // Wait until the PLL is usable
CCLKCFG = (Fcco/Fcclk - 1); // set the CCLKCFG
PLLCON = 3; // connect the PLL
PLLFEED = 0xAA;
PLLFEED = 0x55;
while (((PLLSTAT & (3 << 25)) == 0)); // Wait until the PLL is connected and locked
#if USE_USB
PCONP |= 0x80000000; // Turn On the USB PCLK
USBCLKCFG = (Fcco/Fusbclk - 1);
#endif
// Set system timers for each component
#if (Fpclk / (Fcclk / 4)) == 1
PCLKSEL0 = 0x00000000; // PCLK is 1/4 CCLK
PCLKSEL1 = 0x00000000;
#endif
#if (Fpclk / (Fcclk / 4)) == 2
PCLKSEL0 = 0xAAAAAAAA; // PCLK is 1/2 CCLK
PCLKSEL1 = 0xAAAAAAAA;
#endif
#if (Fpclk / (Fcclk / 4)) == 4
PCLKSEL0 = 0x55555555; // PCLK is the same as CCLK
PCLKSEL1 = 0x55555555;
#endif
// Set memory accelerater module
MAMCR = 0;
#if Fcclk < 20000000
MAMTIM = 1;
#else
#if Fcclk < 40000000
MAMTIM = 2;
#else
MAMTIM = 3;
#endif
#endif
MAMCR = 2;
/* Initialize VIC*/
VICIntEnClr = 0xffffffff;
VICVectAddr = 0;
/* Add your codes here */
return;
}
重点在于启动主晶振
SCS |= 0x20; // Enable the main OSC,,1MHz~20MHz
while( !(SCS & 0x40) ); // Wait until main OSC is usable |