1#include "cmsis_include/sam3xa.h"
19#define SYS_BOARD_OSCOUNT (CKGR_MOR_MOSCXTST(0x8))
20#define SYS_BOARD_PLLAR (CKGR_PLLAR_ONE | CKGR_PLLAR_MULA(0xdUL) | CKGR_PLLAR_PLLACOUNT(0x3fUL) | CKGR_PLLAR_DIVA(0x1UL))
21#define SYS_BOARD_MCKR (PMC_MCKR_PRES_CLK_2 | PMC_MCKR_CSS_PLLA_CLK)
32 EFC0->EEFC_FMR = EEFC_FMR_FWS(4);
33 EFC1->EEFC_FMR = EEFC_FMR_FWS(4);
36 if ( !(PMC->CKGR_MOR & CKGR_MOR_MOSCSEL) )
39 PMC->CKGR_MOR = CKGR_MOR_KEY_PASSWD |
SYS_BOARD_OSCOUNT | CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCXTBY;
40 while ( !(PMC->PMC_SR & PMC_SR_MOSCXTS) )
46 PMC->CKGR_MOR = CKGR_MOR_KEY_PASSWD |
SYS_BOARD_OSCOUNT | CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCXTBY | CKGR_MOR_MOSCSEL;
48 while ( !(PMC->PMC_SR & PMC_SR_MOSCSELS) )
51 PMC->PMC_MCKR = (PMC->PMC_MCKR & ~(uint32_t)PMC_MCKR_CSS_Msk) | PMC_MCKR_CSS_MAIN_CLK;
52 while (!(PMC->PMC_SR & PMC_SR_MCKRDY))
58 while ( !(PMC->PMC_SR & PMC_SR_LOCKA) )
63 PMC->PMC_MCKR = (
SYS_BOARD_MCKR & ~PMC_MCKR_CSS_Msk) | PMC_MCKR_CSS_MAIN_CLK;
64 while ( !(PMC->PMC_SR & PMC_SR_MCKRDY) )
70 while ( !(PMC->PMC_SR & PMC_SR_MCKRDY) )
81 switch ( PMC->PMC_MCKR & PMC_MCKR_CSS_Msk )
83 case PMC_MCKR_CSS_SLOW_CLK:
84 if (SUPC->SUPC_SR & SUPC_SR_OSCSEL)
94 case PMC_MCKR_CSS_MAIN_CLK:
95 if (PMC->CKGR_MOR & CKGR_MOR_MOSCSEL)
103 switch (PMC->CKGR_MOR & CKGR_MOR_MOSCRCF_Msk)
105 case CKGR_MOR_MOSCRCF_4_MHz:
108 case CKGR_MOR_MOSCRCF_8_MHz:
112 case CKGR_MOR_MOSCRCF_12_MHz:
122 case PMC_MCKR_CSS_PLLA_CLK:
123 case PMC_MCKR_CSS_UPLL_CLK:
124 if ( PMC->CKGR_MOR & CKGR_MOR_MOSCSEL )
132 switch ( PMC->CKGR_MOR & CKGR_MOR_MOSCRCF_Msk )
134 case CKGR_MOR_MOSCRCF_4_MHz:
137 case CKGR_MOR_MOSCRCF_8_MHz:
141 case CKGR_MOR_MOSCRCF_12_MHz:
149 if ( (PMC->PMC_MCKR & PMC_MCKR_CSS_Msk) == PMC_MCKR_CSS_PLLA_CLK )
151 SystemCoreClock *= ((((PMC->CKGR_PLLAR) & CKGR_PLLAR_MULA_Msk) >> CKGR_PLLAR_MULA_Pos) + 1U);
152 SystemCoreClock /= ((((PMC->CKGR_PLLAR) & CKGR_PLLAR_DIVA_Msk) >> CKGR_PLLAR_DIVA_Pos));
161 if ( (PMC->PMC_MCKR & PMC_MCKR_PRES_Msk) == PMC_MCKR_PRES_CLK_3 )
167 SystemCoreClock >>= ((PMC->PMC_MCKR & PMC_MCKR_PRES_Msk) >> PMC_MCKR_PRES_Pos);
177 if ( dw_clk < CHIP_FREQ_FWS_0 )
179 EFC0->EEFC_FMR = EEFC_FMR_FWS(0);
180 EFC1->EEFC_FMR = EEFC_FMR_FWS(0);
184 if ( dw_clk < CHIP_FREQ_FWS_1 )
186 EFC0->EEFC_FMR = EEFC_FMR_FWS(1);
187 EFC1->EEFC_FMR = EEFC_FMR_FWS(1);
191 if ( dw_clk < CHIP_FREQ_FWS_2 )
193 EFC0->EEFC_FMR = EEFC_FMR_FWS(2);
194 EFC1->EEFC_FMR = EEFC_FMR_FWS(2);
198 if ( dw_clk < CHIP_FREQ_FWS_3 )
200 EFC0->EEFC_FMR = EEFC_FMR_FWS(3);
201 EFC1->EEFC_FMR = EEFC_FMR_FWS(3);
205 EFC0->EEFC_FMR = EEFC_FMR_FWS(4);
206 EFC1->EEFC_FMR = EEFC_FMR_FWS(4);
#define SYS_BOARD_OSCOUNT
void system_init_flash(uint32_t dw_clk)
void SystemInit(void)
Setup the microcontroller system. Initialize the System and update the SystemFrequency variable.
void SystemCoreClockUpdate(void)