forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-07 d0cca79a4aa7efce979c6aed275fe1bb75af4cc4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#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(); // ´ò¿ªÈ«¾ÖÖжÏʹÄÜ
}