File tree 1 file changed +11
-2
lines changed
1 file changed +11
-2
lines changed Original file line number Diff line number Diff line change @@ -398,15 +398,24 @@ void I2SClass::onReceive(void(*function)(void))
398
398
399
399
void I2SClass::enableClock (int divider)
400
400
{
401
+ int div = SystemCoreClock / divider;
402
+ int src = GCLK_GENCTRL_SRC_DFLL48M_Val;
403
+
404
+ if (div > 255 ) {
405
+ // divider is too big, use 8 MHz oscillator instead
406
+ div = 8000000 / divider;
407
+ src = GCLK_GENCTRL_SRC_OSC8M_Val;
408
+ }
409
+
401
410
// configure the clock divider
402
411
while (GCLK->STATUS .bit .SYNCBUSY );
403
412
GCLK->GENDIV .bit .ID = _clockGenerator;
404
- GCLK->GENDIV .bit .DIV = SystemCoreClock / divider ;
413
+ GCLK->GENDIV .bit .DIV = div ;
405
414
406
415
// use the DFLL as the source
407
416
while (GCLK->STATUS .bit .SYNCBUSY );
408
417
GCLK->GENCTRL .bit .ID = _clockGenerator;
409
- GCLK->GENCTRL .bit .SRC = GCLK_GENCTRL_SRC_DFLL48M_Val ;
418
+ GCLK->GENCTRL .bit .SRC = src ;
410
419
GCLK->GENCTRL .bit .IDC = 1 ;
411
420
GCLK->GENCTRL .bit .GENEN = 1 ;
412
421
You can’t perform that action at this time.
0 commit comments