Skip to content

Commit c1ce6eb

Browse files
device: LPC55xxx: add PLL0 usb fs host clock support
support kCLOCK_UsbfsSrcPll0 in CLOCK_EnableUsbfs0HostClock Signed-off-by: Mark Wang <yichang.wang@nxp.com>
1 parent 9e814f3 commit c1ce6eb

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

mcux/mcux-sdk/devices/LPC55S28/drivers/fsl_clock.c

+26
Original file line numberDiff line numberDiff line change
@@ -1984,6 +1984,32 @@ bool CLOCK_EnableUsbfs0HostClock(clock_usbfs_src_t src, uint32_t freq)
19841984
/* Select FRO 96 MHz */
19851985
CLOCK_AttachClk(kFRO_HF_to_USB0_CLK);
19861986
}
1987+
else if (kCLOCK_UsbfsSrcPll0 == src)
1988+
{
1989+
/*!< Configure XTAL32M */
1990+
POWER_DisablePD(kPDRUNCFG_PD_XTAL32M); /* Ensure XTAL32M is powered */
1991+
POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M); /* Ensure XTAL32M is powered */
1992+
(void)CLOCK_SetupExtClocking(16000000U); /* Enable clk_in clock */
1993+
SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK; /* Enable clk_in from XTAL32M clock */
1994+
ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK; /* Enable clk_in to system */
1995+
1996+
/*!< Set up PLL0 */
1997+
POWER_DisablePD(kPDRUNCFG_PD_PLL0);
1998+
CLOCK_AttachClk(kEXT_CLK_to_PLL0); /*!< Switch PLL0CLKSEL to EXT_CLK */
1999+
POWER_DisablePD(kPDRUNCFG_PD_PLL0_SSCG);
2000+
const pll_setup_t pll1Setup = {
2001+
.pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(19U) | SYSCON_PLL0CTRL_SELP(9U),
2002+
.pllndec = SYSCON_PLL0NDEC_NDIV(1U),
2003+
.pllpdec = SYSCON_PLL0PDEC_PDIV(5U),
2004+
.pllsscg = {0x0U,(SYSCON_PLL0SSCG1_MDIV_EXT(30U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},
2005+
.pllRate = 48000000U,
2006+
.flags = PLL_SETUPFLAG_WAITLOCK};
2007+
(void)CLOCK_SetPLL0Freq(&pll1Setup);
2008+
2009+
CLOCK_SetClkDiv(kCLOCK_DivUsb0Clk, 1U, false);
2010+
CLOCK_AttachClk(kPLL0_to_USB0_CLK);
2011+
SDK_DelayAtLeastUs(50U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
2012+
}
19872013
else
19882014
{
19892015
/*!< Configure XTAL32M */

mcux/mcux-sdk/devices/LPC55S69/drivers/fsl_clock.c

+26
Original file line numberDiff line numberDiff line change
@@ -1984,6 +1984,32 @@ bool CLOCK_EnableUsbfs0HostClock(clock_usbfs_src_t src, uint32_t freq)
19841984
/* Select FRO 96 MHz */
19851985
CLOCK_AttachClk(kFRO_HF_to_USB0_CLK);
19861986
}
1987+
else if (kCLOCK_UsbfsSrcPll0 == src)
1988+
{
1989+
/*!< Configure XTAL32M */
1990+
POWER_DisablePD(kPDRUNCFG_PD_XTAL32M); /* Ensure XTAL32M is powered */
1991+
POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M); /* Ensure XTAL32M is powered */
1992+
(void)CLOCK_SetupExtClocking(16000000U); /* Enable clk_in clock */
1993+
SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK; /* Enable clk_in from XTAL32M clock */
1994+
ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK; /* Enable clk_in to system */
1995+
1996+
/*!< Set up PLL0 */
1997+
POWER_DisablePD(kPDRUNCFG_PD_PLL0);
1998+
CLOCK_AttachClk(kEXT_CLK_to_PLL0); /*!< Switch PLL0CLKSEL to EXT_CLK */
1999+
POWER_DisablePD(kPDRUNCFG_PD_PLL0_SSCG);
2000+
const pll_setup_t pll1Setup = {
2001+
.pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(19U) | SYSCON_PLL0CTRL_SELP(9U),
2002+
.pllndec = SYSCON_PLL0NDEC_NDIV(1U),
2003+
.pllpdec = SYSCON_PLL0PDEC_PDIV(5U),
2004+
.pllsscg = {0x0U,(SYSCON_PLL0SSCG1_MDIV_EXT(30U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},
2005+
.pllRate = 48000000U,
2006+
.flags = PLL_SETUPFLAG_WAITLOCK};
2007+
(void)CLOCK_SetPLL0Freq(&pll1Setup);
2008+
2009+
CLOCK_SetClkDiv(kCLOCK_DivUsb0Clk, 1U, false);
2010+
CLOCK_AttachClk(kPLL0_to_USB0_CLK);
2011+
SDK_DelayAtLeastUs(50U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
2012+
}
19872013
else
19882014
{
19892015
/*!< Configure XTAL32M */

0 commit comments

Comments
 (0)