clock setup code ported from Jared
This commit is contained in:
@ -22,6 +22,14 @@
|
|||||||
|
|
||||||
#include "si5351c.h"
|
#include "si5351c.h"
|
||||||
|
|
||||||
|
void delay(uint32_t duration)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < duration; i++)
|
||||||
|
__asm__("nop");
|
||||||
|
}
|
||||||
|
|
||||||
/* initial configuration for Jellybean with Lemondrop attached */
|
/* initial configuration for Jellybean with Lemondrop attached */
|
||||||
void jellybean_init(void)
|
void jellybean_init(void)
|
||||||
{
|
{
|
||||||
@ -54,5 +62,72 @@ void jellybean_init(void)
|
|||||||
* Set up PLL1 to run from XTAL1 input.
|
* Set up PLL1 to run from XTAL1 input.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//FIXME CGU setup
|
//FIXME a lot of the details here should be in a CGU driver
|
||||||
|
|
||||||
|
/* configure xtal oscillator for external clock input signal */
|
||||||
|
CGU_XTAL_OSC_CTRL |= CGU_XTAL_OSC_CTRL_BYPASS;
|
||||||
|
|
||||||
|
/* set xtal oscillator to low frequency mode */
|
||||||
|
CGU_XTAL_OSC_CTRL &= ~CGU_XTAL_OSC_CTRL_HF;
|
||||||
|
|
||||||
|
/* power on the oscillator and wait until stable */
|
||||||
|
CGU_XTAL_OSC_CTRL &= ~CGU_XTAL_OSC_CTRL_EN;
|
||||||
|
delay(1000000);
|
||||||
|
|
||||||
|
/* use XTAL_OSC as clock source for BASE_M4_CLK (CPU) */
|
||||||
|
CGU_BASE_M4_CLK = (CGU_BASE_CLK_AUTOBLOCK
|
||||||
|
| (CGU_SRC_XTAL << CGU_BASE_CLK_SEL_SHIFT));
|
||||||
|
|
||||||
|
/* use XTAL_OSC as clock source for APB1 */
|
||||||
|
CGU_BASE_APB1_CLK = (CGU_BASE_CLK_AUTOBLOCK
|
||||||
|
| (CGU_SRC_XTAL << CGU_BASE_CLK_SEL_SHIFT));
|
||||||
|
|
||||||
|
/* use XTAL_OSC as clock source for PLL1 */
|
||||||
|
CGU_PLL1_CTRL = (CGU_PLL1_CTRL_PD
|
||||||
|
| CGU_PLL1_CTRL_AUTOBLOCK
|
||||||
|
| (CGU_SRC_XTAL << CGU_PLL1_CTRL_CLK_SEL_SHIFT));
|
||||||
|
while (CGU_PLL1_STAT & CGU_PLL1_STAT_LOCK);
|
||||||
|
|
||||||
|
//FIXME this may need to be done in several stages
|
||||||
|
/* configure PLL1 to produce 204 MHz clock from 12 MHz XTAL_OSC */
|
||||||
|
CGU_PLL1_CTRL |= (CGU_PLL1_CTRL_PD
|
||||||
|
| 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));
|
||||||
|
|
||||||
|
/* power on PLL1 and wait until stable */
|
||||||
|
CGU_PLL1_CTRL &= ~CGU_PLL1_CTRL_PD;
|
||||||
|
while (!(CGU_PLL1_STAT & CGU_PLL1_STAT_LOCK));
|
||||||
|
|
||||||
|
/* use PLL1 as clock source for BASE_M4_CLK (CPU) */
|
||||||
|
CGU_BASE_M4_CLK = (CGU_BASE_CLK_AUTOBLOCK
|
||||||
|
| (CGU_SRC_PLL1 << CGU_BASE_CLK_SEL_SHIFT));
|
||||||
|
|
||||||
|
/* use XTAL_OSC as clock source for PLL0USB */
|
||||||
|
CGU_PLL0USB_CTRL = (CGU_PLL0USB_CTRL_PD
|
||||||
|
| CGU_PLL0USB_CTRL_AUTOBLOCK
|
||||||
|
| (CGU_SRC_XTAL << CGU_PLL0USB_CTRL_CLK_SEL_SHIFT));
|
||||||
|
while (CGU_PLL0USB_STAT & CGU_PLL0USB_STAT_LOCK);
|
||||||
|
|
||||||
|
/* configure PLL0USB to produce 480 MHz clock from 12 MHz XTAL_OSC */
|
||||||
|
CGU_PLL0USB_MDIV = ((0x07FFA << CGU_PLL0USB_MDIV_MDEC_SHIFT)
|
||||||
|
| (0x0B << CGU_PLL0USB_SELP_MDEC_SHIFT)
|
||||||
|
| (0x10 << CGU_PLL0USB_SELI_MDEC_SHIFT)
|
||||||
|
| (0x0 << CGU_PLL0USB_SELR_MDEC_SHIFT));
|
||||||
|
CGU_PLL0USB_NP_DIV = (98 << CGU_PLL0USB_NP_DIV_PDEC_SHIFT)
|
||||||
|
| (514 << CGU_PLL0USB_NP_DIV_NDEC_SHIFT);
|
||||||
|
CGU_PLL0USB_CTRL |= (CGU_PLL0USB_CTRL_PD
|
||||||
|
| CGU_PLL0USB_CTRL_DIRECTI
|
||||||
|
| CGU_PLL0USB_CTRL_DIRECTO
|
||||||
|
| CGU_PLL0USB_CTRL_CLKEN);
|
||||||
|
|
||||||
|
/* power on PLL0USB and wait until stable */
|
||||||
|
CGU_PLL0USB_CTRL &= ~CGU_PLL0USB_CTRL_PD;
|
||||||
|
while (!(CGU_PLL0USB_STAT & CGU_PLL0USB_STAT_LOCK));
|
||||||
|
|
||||||
|
/* use PLL0USB as clock source for USB0 */
|
||||||
|
CGU_BASE_USB0_CLK = (CGU_BASE_CLK_AUTOBLOCK
|
||||||
|
| (CGU_SRC_PLL0USB << CGU_BASE_CLK_SEL_SHIFT));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user