#include "define_all.h" #include "rcc_config.h" void DEBUG_Init(void) { DBG->CR = 0x3; // DEBUGʱ¹Ø±ÕIWDT WWDT±£³ÖÆäËû¶¨Ê±Æ÷Ô­À´µÄ״̬ } // ¸ü¸ÄϵͳÖ÷ƵΪ64M,Íⲿ¾§ÌåXTHF±¶Æµ void rcc_configration(void) { uint32_t i = 0; CMU_PLL_H_InitTypeDef pll_h_struct; CMU->PCLKCR1 |= 0x1 << 7; // PAD×ÜÏßʱÖÓʹÄÜ GPIOF->FCR |= 0x3C; // PF1ºÍPF2ÅäÖÃÄ£Ä⹦ÄÜ // ʹÄÜXTHF CMU_XTHFCR_XTHFEN_Setable(ENABLE); // ʹÄÜXTHF CMU_XTHFCR_XTHF_CFG_Set(CMU_XTHFCR_XTHF_CFG_MAX); // Õñµ´Ç¿¶ÈÑ¡Ôñ×îÇ¿ delay_ms(3); // ÆðÕñÐèҪʱ¼ä ///*ϵͳʱÖÓ³¬¹ý24MºóÐèÒª´ò¿ªwait*/ FLS_RDCR_WAIT_Set(FLS_RDCR_WAIT_2CYCLE); IWDT_Clr(); // PLLÅäÖà ϵͳʱÖÓʹÓÃPLLµÄʱºò·Å¿ª // CMU->PLLHCR |= 0x1 << 1; //PLLHÊäÈëÑ¡ÔñXTHF // // CMU_PLLHCR_REFPRSC_Set(CMU_PLLHCR_REFPRSC_DIV8);//8M¾§Ìå·ÖƵµ½1M,ÆäËû¾§ÌåÐèÒªÐÞ¸Ä·ÖÆµÏµÊý // // CMU->PLLHCR &= ~(0x3ff << 16); // CMU->PLLHCR |= 0x3f << 16; //PLLHÉýÖÁ64M // // CMU_PLLHCR_EN_Setable(ENABLE); //ʹÄÜPLLH // // while(!CMU_PLLHCR_LOCKED_Chk()) //µÈ´ýPLL½¨Á¢ // { // if(i>=6400) //³¬Ê±Éè¼Æ£¬¸ù¾ÝÖ÷ʱÖÓÑ¡Ôñ²»Í¬Öµ£¬Àý³ÌÊÇ8M // { // break; // } // i++; // } // ϵͳʱÖÓÖ±½ÓʹÓÃXTHF while (!CMU_ISR_HFDETO_Chk()) { if (i >= 6400) // ³¬Ê±Éè¼Æ£¬¸ù¾ÝÖ÷ʱÖÓÑ¡Ôñ²»Í¬Öµ£¬Àý³ÌÊÇ8M { break; } i++; } // CMU_SYSCLKCR_SYSCLKSEL_Set(CMU_SYSCLKCR_SYSCLKSEL_PLL_H); //ϵͳʱÖÓÔ´Ñ¡ÔñPLL CMU_SYSCLKCR_SYSCLKSEL_Set(CMU_SYSCLKCR_SYSCLKSEL_XTHF); // ϵͳʱÖÓÔ´Ñ¡ÔñXTHF CMU_SYSCLKCR_AHBPRES_Set(CMU_SYSCLKCR_AHBPRES_DIV1); CMU_SYSCLKCR_APBPRES_Set(CMU_SYSCLKCR_APBPRES_DIV1); CMU_SYSCLKCR_SLP_ENEXTI_Setable(ENABLE); // ÐÝÃßʱ²»¹Ø±ÕÖжϿڲÉÑù delay_init(SYSCLOCK_U); } void System_power_on_init(void) { /*»ù´¡ÏµÍ³ÅäÖÃ*/ __disable_irq(); // ¹Ø±ÕÈ«¾ÖÖжÏʹÄÜ IWDT_Init(); // ϵͳ¿´ÃŹ·ÉèÖà £¨º¯ÊýÐèÒªÍêÉÆ£© delay_init(__SYSTEM_CLOCK); // cpuµÎ´ð¶¨Ê±Æ÷ÅäÖÃ(Èí¼þÑÓʱÓÃ) //´ËʱʱÖÓ»¹ÊÇRCHF delay_ms(10); // Èí¼þÑÓʱ,ϵͳÉϵçºó²»ÒªÁ¢¿Ì½«Ê±ÖÓÇл»Îª·ÇRCHF8M£¬Ò²²»ÒªÁ¢¿Ì½øÐÝÃß·ñÔò¿ÉÄܵ¼ÖÂÎÞ·¨ÏÂÔØ³ÌÐò Init_SysClk_Gen(); // ϵͳʱÖÓÅäÖà /*ϵ縴λÅäÖÃ*/ // pdrºÍborÁ½¸öϵ縴λÖÁÉÙÒª´ò¿ªÒ»¸ö // µ±µçÔ´µçѹµÍÓÚϵ縴λµçѹʱ£¬Ð¾Æ¬»á±»¸´Î»×¡ // pdrµçѹµµÎ»²»×¼µ«Êǹ¦ºÄ¼«µÍ£¨¼¸ºõÎÞ·¨²âÁ¿£© // borµçѹµµÎ»×¼È·µ«ÊÇÐèÒªÔö¼Ó2uA¹¦ºÄ RMU_PDRCR_PDREN_Setable(ENABLE); // ´ò¿ªPDR RMU_BORCR_BOR_PDRCFG_Set(RMU_BORCR_BOR_PDRCFG_1P75V); RMU_BORCR_OFF_BOR_Setable(DISABLE); // ´ò¿ªBOR DEBUG_Init(); /*RTCÊýÖµµ÷Õû¼Ä´æÆ÷*/ /*µ÷Уֵ¸´Î»ºóÊǸöËæ»úÊý£¬Éϵçºó¿ÉÄÜÊǸö½Ï´óµÄÖµÓ°ÏìRTC¾«¶È*/ /*ÈçÓ¦ÓÃÖÐûÓÐRTCµ÷У£¬ÐèÒª½«ÕâЩעÊÍ·Å¿ª*/ CMU_PERCLK_SetableEx(RTCCLK, ENABLE); RTC_ADJUST_Write(0); // RTCʱÖÓζȲ¹³¥ÖµÐ´0£¬¼ÙÈç²»²Ù×÷µ÷Õû¼Ä´æÆ÷£¬²¹³¥Öµ»áÊÇÒ»¸öËæ»úÊý£¬RTCʱÖÓ¿ÉÄÜ»áÆ«²î·Ç³£´ó CMU_PERCLK_SetableEx(RTCCLK, DISABLE); IWDT_Clr(); // Çåϵͳ¿´ÃŹ· __enable_irq(); // ´ò¿ªÈ«¾ÖÖжÏʹÄÜ }