@@ -63,64 +63,62 @@ void board_init(void)
63
63
while ( GCLK -> SYNCBUSY .reg & GCLK_SYNCBUSY_SWRST ){
64
64
/* wait for reset to complete */
65
65
}
66
-
67
- /* ----------------------------------------------------------------------------------------------
68
- * 2) Put XOSC32K as source of Generic Clock Generator 3
69
- */
70
- GCLK -> GENCTRL [GENERIC_CLOCK_GENERATOR_XOSC32K ].reg = GCLK_GENCTRL_SRC (GCLK_GENCTRL_SRC_XOSC32K ) | //generic clock gen 3
66
+
67
+ /* ----------------------------------------------------------------------------------------------
68
+ * 2) Put XOSC32K as source of Generic Clock Generator 3
69
+ */
70
+ GCLK -> GENCTRL [GENERIC_CLOCK_GENERATOR_XOSC32K ].reg = GCLK_GENCTRL_SRC (GCLK_GENCTRL_SRC_XOSC32K ) | //generic clock gen 3
71
71
GCLK_GENCTRL_GENEN ;
72
72
73
- while ( GCLK -> SYNCBUSY .reg & GCLK_SYNCBUSY_GENCTRL3 ){
74
- /* Wait for synchronization */
75
- }
76
-
77
- /* ----------------------------------------------------------------------------------------------
78
- * 3) Put Generic Clock Generator 3 as source for Generic Clock Gen 0 (DFLL48M reference)
79
- */
80
- GCLK -> GENCTRL [GENERIC_CLOCK_MULTIPLEXER_DFLL48M ].reg = GCLK_GENCTRL_SRC (GCLK_GENCTRL_SRC_OSCULP32K ) | GCLK_GENCTRL_GENEN ;
81
-
82
- while ( GCLK -> SYNCBUSY .bit .GENCTRL0 ){
83
- /* Wait for synchronization */
84
- }
85
-
86
- /* ----------------------------------------------------------------------------------------------
87
- * 4) Enable DFLL48M clock
88
- */
73
+ while ( GCLK -> SYNCBUSY .reg & GCLK_SYNCBUSY_GENCTRL3 ){
74
+ /* Wait for synchronization */
75
+ }
76
+
77
+ /* ----------------------------------------------------------------------------------------------
78
+ * 3) Put Generic Clock Generator 3 as source for Generic Clock Gen 0 (DFLL48M reference)
79
+ */
80
+ GCLK -> GENCTRL [0 ].reg = GCLK_GENCTRL_SRC (GCLK_GENCTRL_SRC_OSCULP32K ) | GCLK_GENCTRL_GENEN ;
81
+
82
+ /* ----------------------------------------------------------------------------------------------
83
+ * 4) Enable DFLL48M clock
84
+ */
89
85
90
- /* DFLL Configuration in Closed Loop mode - Closed-Loop Operation */
86
+ /* DFLL Configuration in Open Loop mode */
91
87
92
- OSCCTRL -> DFLLCTRLA .reg = 0 ;
93
- GCLK -> PCHCTRL [OSCCTRL_GCLK_ID_DFLL48 ].reg = (1 << GCLK_PCHCTRL_CHEN_Pos ) | GCLK_PCHCTRL_GEN (GCLK_PCHCTRL_GEN_GCLK3_Val );
88
+ OSCCTRL -> DFLLCTRLA .reg = 0 ;
89
+ // GCLK->PCHCTRL[OSCCTRL_GCLK_ID_DFLL48].reg = (1 << GCLK_PCHCTRL_CHEN_Pos) | GCLK_PCHCTRL_GEN(GCLK_PCHCTRL_GEN_GCLK3_Val);
94
90
95
- OSCCTRL -> DFLLMUL .reg = OSCCTRL_DFLLMUL_CSTEP ( 31 ) | // Coarse step is 31, half of the max value
96
- OSCCTRL_DFLLMUL_FSTEP ( 511 ) | // Fine step is 511, half of the max value
97
- OSCCTRL_DFLLMUL_MUL ( ( VARIANT_MCK / VARIANT_MAINOSC ) ); // External 32KHz is the reference
91
+ OSCCTRL -> DFLLMUL .reg = OSCCTRL_DFLLMUL_CSTEP ( 0x1 ) |
92
+ OSCCTRL_DFLLMUL_FSTEP ( 0x1 ) |
93
+ OSCCTRL_DFLLMUL_MUL ( 0 );
98
94
99
- while ( OSCCTRL -> DFLLSYNC .reg & OSCCTRL_DFLLSYNC_DFLLMUL )
100
- {
101
- /* Wait for synchronization */
102
- }
95
+ while ( OSCCTRL -> DFLLSYNC .reg & OSCCTRL_DFLLSYNC_DFLLMUL )
96
+ {
97
+ /* Wait for synchronization */
98
+ }
103
99
104
- OSCCTRL -> DFLLCTRLB .reg = 0 ;
105
- while ( OSCCTRL -> DFLLSYNC .reg & OSCCTRL_DFLLSYNC_DFLLCTRLB )
106
- {
107
- /* Wait for synchronization */
108
- }
100
+ OSCCTRL -> DFLLCTRLB .reg = 0 ;
101
+ while ( OSCCTRL -> DFLLSYNC .reg & OSCCTRL_DFLLSYNC_DFLLCTRLB )
102
+ {
103
+ /* Wait for synchronization */
104
+ }
109
105
110
- OSCCTRL -> DFLLCTRLA .reg |= OSCCTRL_DFLLCTRLA_ENABLE ;
111
- while ( OSCCTRL -> DFLLSYNC .reg & OSCCTRL_DFLLSYNC_ENABLE )
112
- {
113
- /* Wait for synchronization */
114
- }
115
-
116
- OSCCTRL -> DFLLCTRLB .reg |= OSCCTRL_DFLLCTRLB_MODE |
117
- OSCCTRL_DFLLCTRLB_WAITLOCK |
118
- OSCCTRL_DFLLCTRLB_QLDIS ;
119
-
120
- while ( (OSCCTRL -> STATUS .reg & (OSCCTRL_STATUS_DFLLRDY | OSCCTRL_STATUS_DFLLLCKC )) != (OSCCTRL_STATUS_DFLLRDY | OSCCTRL_STATUS_DFLLLCKC ) )
121
- {
122
- /* Wait for synchronization */
123
- }
106
+ OSCCTRL -> DFLLCTRLA .reg |= OSCCTRL_DFLLCTRLA_ENABLE ;
107
+ while ( OSCCTRL -> DFLLSYNC .reg & OSCCTRL_DFLLSYNC_ENABLE )
108
+ {
109
+ /* Wait for synchronization */
110
+ }
111
+
112
+ OSCCTRL -> DFLLVAL .reg = OSCCTRL -> DFLLVAL .reg ;
113
+ while ( OSCCTRL -> DFLLSYNC .bit .DFLLVAL );
114
+
115
+ OSCCTRL -> DFLLCTRLB .reg = OSCCTRL_DFLLCTRLB_WAITLOCK |
116
+ OSCCTRL_DFLLCTRLB_CCDIS | OSCCTRL_DFLLCTRLB_USBCRM ;
117
+
118
+ while ( !OSCCTRL -> STATUS .bit .DFLLRDY )
119
+ {
120
+ /* Wait for synchronization */
121
+ }
124
122
125
123
/* ----------------------------------------------------------------------------------------------
126
124
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
0 commit comments