#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(); // ´ò¿ªÈ«¾ÖÖжÏʹÄÜ
|
}
|