mirror of
https://github.com/apache/nuttx.git
synced 2026-05-27 03:05:40 +08:00
SAMA5 SCK: The SAMA5D3 does things a little differently
This commit is contained in:
@@ -92,7 +92,39 @@ void sam_sckc_enable(bool enable)
|
|||||||
{
|
{
|
||||||
uint32_t regval;
|
uint32_t regval;
|
||||||
|
|
||||||
/* Enable / disable the slow clock */
|
#ifdef ATSAMA5D3
|
||||||
|
/* REVISIT: Missing the logic that disables the external OSC32 */
|
||||||
|
/* Enable external OSC 32 kHz */
|
||||||
|
|
||||||
|
regval = getreg32(SAM_SCKC_CR);
|
||||||
|
regval |= SCKC_CR_OSC32EN;
|
||||||
|
putreg32(regval, SAM_SCKC_CR);
|
||||||
|
|
||||||
|
/* Wait 5 slow clock cycles for clock stabilization */
|
||||||
|
|
||||||
|
up_udelay(5 * USEC_PER_SEC / BOARD_SLOWCLK_FREQUENCY);
|
||||||
|
|
||||||
|
/* Disable OSC 32 kHz bypass */
|
||||||
|
|
||||||
|
regval &= ~SCKC_CR_OSC32BYP;
|
||||||
|
putreg32(regval, SAM_SCKC_CR);
|
||||||
|
|
||||||
|
/* Switch slow clock source to external OSC 32 kHz (*/
|
||||||
|
|
||||||
|
regval |= SCKC_CR_OSCSEL;
|
||||||
|
putreg32(regval, SAM_SCKC_CR);
|
||||||
|
|
||||||
|
/* Wait 5 slow clock cycles for internal resynchronization */
|
||||||
|
|
||||||
|
up_udelay(5 * USEC_PER_SEC / BOARD_SLOWCLK_FREQUENCY);
|
||||||
|
|
||||||
|
/* Disable internal RC 32 kHz */
|
||||||
|
|
||||||
|
regval &= ~SCKC_CR_RCEN;
|
||||||
|
putreg32(regval, SAM_SCKC_CR);
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* Switch slow clock source to external OSC 32 kHz */
|
||||||
|
|
||||||
regval = enable ? SCKC_CR_OSCSEL : 0;
|
regval = enable ? SCKC_CR_OSCSEL : 0;
|
||||||
putreg32(regval, SAM_SCKC_CR);
|
putreg32(regval, SAM_SCKC_CR);
|
||||||
@@ -100,4 +132,5 @@ void sam_sckc_enable(bool enable)
|
|||||||
/* Wait 5 slow clock cycles for internal resynchronization */
|
/* Wait 5 slow clock cycles for internal resynchronization */
|
||||||
|
|
||||||
up_udelay(5 * USEC_PER_SEC / BOARD_SLOWCLK_FREQUENCY);
|
up_udelay(5 * USEC_PER_SEC / BOARD_SLOWCLK_FREQUENCY);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user