Skip to content

Commit f01d4ce

Browse files
committed
DM: fix dac clock and first write bug
1 parent a91e014 commit f01d4ce

File tree

3 files changed

+32
-1
lines changed

3 files changed

+32
-1
lines changed

cores/arduino/startup.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
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

cores/arduino/wiring.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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

cores/arduino/wiring_analog.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff 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!

0 commit comments

Comments
 (0)