From aaaf14819a477d7649ce8a7593adbd7b8f2970d2 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Sep 2012 18:58:00 -0700 Subject: [PATCH] Move PLL1/M4 CLK up to full speed (204MHz) in two steps, according to UM chapter 11.2.1. --- firmware/common/hackrf_core.c | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/firmware/common/hackrf_core.c b/firmware/common/hackrf_core.c index 90d58aae..46fb76bd 100644 --- a/firmware/common/hackrf_core.c +++ b/firmware/common/hackrf_core.c @@ -149,23 +149,12 @@ void cpu_clock_init(void) | CGU_BASE_APB1_CLK_CLK_SEL(CGU_SRC_XTAL); /* use XTAL_OSC as clock source for PLL1 */ - CGU_PLL1_CTRL = (CGU_PLL1_CTRL_AUTOBLOCK - | (CGU_SRC_XTAL << CGU_PLL1_CTRL_CLK_SEL_SHIFT)); - - /* configure PLL1 to produce 204 MHz clock from 12 MHz XTAL_OSC */ - /* not sure why, but it doesn't work without the following line */ - CGU_PLL1_CTRL &= ~(CGU_PLL1_CTRL_BYPASS - | CGU_PLL1_CTRL_FBSEL - | CGU_PLL1_CTRL_DIRECT - | CGU_PLL1_CTRL_DIRECT - | (0x3 << CGU_PLL1_CTRL_PSEL_SHIFT) - | (0x3 << CGU_PLL1_CTRL_NSEL_SHIFT) - | (0xFF << CGU_PLL1_CTRL_MSEL_SHIFT)); - CGU_PLL1_CTRL |= (CGU_PLL1_CTRL_FBSEL - | CGU_PLL1_CTRL_DIRECT - | (0 << CGU_PLL1_CTRL_PSEL_SHIFT) - | (0 << CGU_PLL1_CTRL_NSEL_SHIFT) - | (16 << CGU_PLL1_CTRL_MSEL_SHIFT)); + /* Start PLL1 at 12MHz * 17 / 2 = 102MHz. */ + CGU_PLL1_CTRL = CGU_PLL1_CTRL_CLK_SEL(CGU_SRC_XTAL) + | CGU_PLL1_CTRL_PSEL(1) + | CGU_PLL1_CTRL_NSEL(0) + | CGU_PLL1_CTRL_MSEL(16) + | CGU_PLL1_CTRL_PD; /* power on PLL1 and wait until stable */ CGU_PLL1_CTRL &= ~CGU_PLL1_CTRL_PD; @@ -174,6 +163,15 @@ void cpu_clock_init(void) /* use PLL1 as clock source for BASE_M4_CLK (CPU) */ CGU_BASE_M4_CLK = CGU_BASE_M4_CLK_CLK_SEL(CGU_SRC_PLL1); + /* Move PLL1 up to 12MHz * 17 = 204MHz. */ + CGU_PLL1_CTRL = CGU_PLL1_CTRL_CLK_SEL(CGU_SRC_XTAL) + | CGU_PLL1_CTRL_PSEL(0) + | CGU_PLL1_CTRL_NSEL(0) + | CGU_PLL1_CTRL_MSEL(16); + + /* wait until stable */ + while (!(CGU_PLL1_STAT & CGU_PLL1_STAT_LOCK)); + /* use XTAL_OSC as clock source for PLL0USB */ CGU_PLL0USB_CTRL = CGU_PLL0USB_CTRL_PD | CGU_PLL0USB_CTRL_AUTOBLOCK