File tree Expand file tree Collapse file tree 3 files changed +32
-1
lines changed Expand file tree Collapse file tree 3 files changed +32
-1
lines changed Original file line number Diff line number Diff line change 3030#define GENERIC_CLOCK_GENERATOR_48M_SYNC GCLK_SYNCBUSY_GENCTRL1
3131#define GENERIC_CLOCK_GENERATOR_100M (2u)
3232#define GENERIC_CLOCK_GENERATOR_100M_SYNC GCLK_SYNCBUSY_GENCTRL2
33+ #define GENERIC_CLOCK_GENERATOR_12M (4u)
34+ #define GENERIC_CLOCK_GENERATOR_12M_SYNC GCLK_SYNCBUSY_GENCTRL4
3335
3436//USE DPLL0 for 120MHZ
3537#define MAIN_CLOCK_SOURCE GCLK_GENCTRL_SRC_DPLL0
@@ -204,6 +206,19 @@ void SystemInit( void )
204206 {
205207 /* Wait for synchronization */
206208 }
209+
210+ //12MHZ CLOCK FOR DAC
211+ GCLK -> GENCTRL [GENERIC_CLOCK_GENERATOR_12M ].reg = GCLK_GENCTRL_SRC (GCLK_GENCTRL_SRC_DFLL_Val ) |
212+ GCLK_GENCTRL_IDC |
213+ GCLK_GENCTRL_DIV (4 ) |
214+ GCLK_GENCTRL_DIVSEL |
215+ //GCLK_GENCTRL_OE |
216+ GCLK_GENCTRL_GENEN ;
217+
218+ while ( GCLK -> SYNCBUSY .reg & GENERIC_CLOCK_GENERATOR_12M_SYNC )
219+ {
220+ /* Wait for synchronization */
221+ }
207222
208223 /*---------------------------------------------------------------------
209224 * Set up main clock
Original file line number Diff line number Diff line change @@ -131,7 +131,7 @@ void init( void )
131131
132132 analogReference ( AR_DEFAULT ) ; // Analog Reference is AREF pin (3.3v)
133133
134- GCLK -> PCHCTRL [DAC_GCLK_ID ].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos ); //use clock generator 1 (48mhz )
134+ GCLK -> PCHCTRL [DAC_GCLK_ID ].reg = GCLK_PCHCTRL_GEN_GCLK4_Val | (1 << GCLK_PCHCTRL_CHEN_Pos ); //use clock generator 4 (12mhz )
135135 while (GCLK -> PCHCTRL [DAC_GCLK_ID ].bit .CHEN == 0 );
136136
137137 while ( DAC -> SYNCBUSY .bit .SWRST == 1 ); // Wait for synchronization of registers between the clock domains
Original file line number Diff line number Diff line change @@ -373,6 +373,22 @@ void analogWrite(uint32_t pin, uint32_t value)
373373
374374 while (DAC -> SYNCBUSY .bit .ENABLE || DAC -> SYNCBUSY .bit .SWRST );
375375 DAC -> CTRLA .bit .ENABLE = 1 ; // enable DAC
376+
377+ if (channel == 0 ){
378+
379+ while ( !DAC -> STATUS .bit .READY0 );
380+
381+ while (DAC -> SYNCBUSY .bit .DATA0 );
382+ DAC -> DATA [0 ].reg = value ;
383+ }
384+ else if (channel == 1 ){
385+ while ( !DAC -> STATUS .bit .READY1 );
386+
387+ while (DAC -> SYNCBUSY .bit .DATA1 );
388+ DAC -> DATA [1 ].reg = value ;
389+ }
390+
391+ delay (10 );
376392 }
377393
378394 //ERROR!
You can’t perform that action at this time.
0 commit comments