Î÷°²Å·ÑÇѧԺ±¾¿Æ±ÏÒµÂÛÎÄ£¨Éè¼Æ£©
5.3 ϵͳ³õ»¯Éè¼Æ
£¨1£© ³ÌÐòÁ÷³Ìͼ
ͼ5-2 ϵͳ³õʼ»¯
£¨2£© ³ÌÐòÔ´´úÂë void system_init() {
/*VPB·ÖƵϵÊýÅäÖÃ*/
PLLCON=1; //PLLʹÄÜ£¨¿ªÆô£©
#if((Fcclk/4)/Fpclk)==1 //VPB×ÜÏßʱÖÓΪ´¦ÀíÆ÷ʱÖÓµÄ1/4ʱ VPBDIV=0; //VPB·ÖƵÆ÷ÉèÖÃΪ0 #endif
#if((Fcclk/4)/Fpclk)==2 //VPB×ÜÏßʱÖÓΪ´¦ÀíÆ÷ʱÖÓµÄ1/2ʱ VPBDIV=2; //VPB·ÖƵÆ÷ÉèÖÃΪ2 #endif
#if((Fcclk/4)/Fpclk)==4 //VPB×ÜÏßʱÖÓÓë´¦ÀíÆ÷ʱÖÓÏàͬ VPBDIV=1; //VPB·ÖƵÆ÷ÉèÖÃΪ1 #endif
/*PLL ±¶Æµ/·ÖƵֵ×Ô¶¯ÅäÖÃ*/
25
Î÷°²Å·ÑÇѧԺ±¾¿Æ±ÏÒµÂÛÎÄ£¨Éè¼Æ£©
#if(Fcco/Fcclk)==2 //Á÷¿ØÕñµ´ÆµÂÊÊÇϵͳƵÂʵÄ2±¶Ê± PLLCFG=((Fcclk/Fosc)-1)|(0<<5); //PLLCFGÅäÖüĴæÆ÷£¬4:0 PLL±¶ÆµÆ÷Öµ£¬6:3 ·ÖƵÆ÷Öµ¡£
#endif
#if(Fcco/Fcclk)==4
PLLCFG=((Fcclk/Fosc)-1)|(1<<5); #endif
#if(Fcco/Fcclk)==8
PLLCFG=((Fcclk/Fosc)-1)|(2<<5); #endif
#if (Fcco/Fcclk)==16
PLLCFG=((Fcclk/Fosc)-1)|(3 << 5); #endif
PLLFEED=0xaa; //PLLÀ¡ËͼĴæÆ÷ʹPLLCOM/PLLCFGµÄÖµ¸ü¸ÄÉúЧ¡£
PLLFEED=0x55;
while((PLLSTAT&(1<<10))==0); //µÈ´ýPLLËø´æ
PLLCON=3; //½«PLL×÷ΪʱÖÓÔ´Á¬½Óµ½Î¢¿ØÖÆÆ÷¡£ PLLFEED=0xaa; PLLFEED=0x55; //´æ´¢Æ÷¼ÓËÙÅäÖà MAMCR=0; #if Fcclk<20000000 MAMTIM=1; #else
#if Fcclk<40000000 MAMTIM=2; #else
MAMTIM=3; #endif #endif
MAMCR=2;
//VIC³õʼ»¯ VICIntSelect=0;
26
Î÷°²Å·ÑÇѧԺ±¾¿Æ±ÏÒµÂÛÎÄ£¨Éè¼Æ£©
VICIntEnClear=0xFFFFFFFF; VICSoftIntClear=0xFFFFFFFF; VICProtection=0; VICVectAddr=0; VICDefVectAddr=0; }
5.4 UARTO³õʼ»¯
£¨1£© ³ÌÐòÁ÷³Ìͼ
ͼ5-3 ³ÌÐòÁ÷³Ìͼ
£¨2£© ³ÌÐòÔ´´úÂë void uart0_init() {
uint32 baud=115200;
U0LCR=0x83; //Êý¾Ý¸ñʽÉèÖã¨×Ö³¤¡¢Í£Ö¹Î»¡¢ÆæÅ¼Ñ¡Ôñ/УÑé룩/³ýÊýËø´æÆ÷·ÃÎÊʹÄÜ¡£
U0DLM=((Fpclk/16)/baud)/256; //³ýÊýËø´æÆ÷¸ß×Ö½Ú¼ÆËã¡£ U0DLL=((Fpclk/16)/baud)%6; //³ýÊýËø´æÆ÷µÍ×Ö½Ú¼ÆËã¡£
U0LCR=0x03; //Êý¾Ý¸ñʽÉèÖÃ/³ýÊýËø´æ¼Ä´æÆ÷·ÃÎʽûÄÜ¡£
}
5.5 GPIOÄ£¿é³ÌÐò
27
Î÷°²Å·ÑÇѧԺ±¾¿Æ±ÏÒµÂÛÎÄ£¨Éè¼Æ£©
GPIO¿ØÖÆ·äÃùÆ÷³ÌÐò´úÂ룺 void DelayNS(uint32 dly) { uint32 i; for(;dly>;dly--£© for(i=0;<5000;i++) }
/******************************* Ãû³Æ main£¨£© ¹¦ÄÜ ¿ØÖÆ·äÃùÆ÷ ·äÃù ******************************* int main(void) {
PINSEL0=0x00000000; IO0DIR=BEEPCON; while(1) {
IO0SET=BEEPCON; DelayNS(10); IO0CLR=BEEPCON; DelayNS(10); } return(0); }
5.6 RTCÄ£¿é
ʵʱʱÖÓÈÕÀúRTC³ÌÐò´úÂ룺 int main (void) {
TargetResetInit();
/* ³õʼ»¯ RTCÄ£¿é */ RTCInit();
local_time.RTC_Sec = 0;
28