SPRUIM2H May 2020 – October 2023 AM2431 , AM2432 , AM2434 , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442
Table 5-994 shows the entire sewuence of programming PLLCTRL, HSDIV, and PLL from an unknown state to a defined non-spread-spectrum state.
Step | Description |
---|---|
Unlock PLL registers | <PLL_Name>_LOCKKEY0 (= 0x68EF3490) |
<PLL_Name>_LOCKKEY1 (= 0xD172BC5A) | |
If PLL0 | Configure PLLCTRL block into bypass mode |
PLLCTL[0 ]PLLEN = 0 | |
PLLCTL[5] PLLENSRC = 0 | |
Configure external bypass so that no transient clock propagates | <PLL_Name>_CTRL[31] BYPASS_EN = 1 |
Delay | |
Disable HSDIV(s) | <PLL_Name>_HSDIV_CTRLk[15] CLKOUT_EN =0 |
Delay | |
Disable PLL | <PLL_Name>_CTRL[15] PLL_EN =0 |
Delay | |
Reset HSDIV(s) | <PLL_Name>_HSDIV_CTRLk[31] RESET = 1 |
If PLL0 | Check PLLSTAT[0] GOSTAT to make sure that divider change is not currently in-progress GOSTAT should equal 0. |
Clear GOSET bit PLLCMD[0] GOSET = 0 | |
Configure divider in PLLCTRL to /1 PLLDIV1 = 0x8000 (enable divider and divide by 1) PLLDIV2 = 0x00 (disable divider and divide by 1) | |
Set alignment control bits ALNCTL = 3 | |
Set GOSET bit to initiate the divider change PLLCMD[0] GOSET = 1 | |
Check PLLSTAT[0] GOSTAT to make sure that divider change has completed GOSTAT should equal 0. | |
Configure HSDIV(s) divider value | <PLL_Name>_HSDIV_CTRLk[6-0] HSDIV (=val) |
Clear HSDIV(s) SYNC_DIS | <PLL_Name>_HSDIV_CTRLk[8] SYNC_DIS = 0 |
Delay | |
Clear Reset HSDIV(s) | <PLL_Name>_HSDIV_CTRLk[31] RESET = 0 |
Configure PLL multiplier | Integer portion of divider <PLL_Name>_FREQ_CTRL0[11-0] (=val) Fractional portion of divider <PLL_Name>_FREQ_CTRL1[23-0] (=val) |
Configure PLL dividers | Reference clock divider <PLL_Name>_DIV_CTRL[5-0] REF_DIV = 1 |
Post divider 1 <PLL_Name>_DIV_CTRL[18-16] POST_DIV1 = 1 | |
Post divider 2 <PLL_Name>_DIV_CTRL[26-24] POST_DIV2 = 1 | |
Configure “random” PLL controls | <PLL_Name>_CTRL[8] INTL_BYP_EN = 0 |
<PLL_Name>_CTRL[5] CLK_4PH_EN = 0 | |
<PLL_Name>_DIV_CTRL[26-24] POST_DIV2 = 1 | |
<PLL_Name>_DIV_CTRL[18-16] POST_DIV1 = 1 | |
<PLL_Name>_DIV_CTRL[5-0] REF_DIV = 1 | |
<PLL_Name>_CTRL[1] DSM_EN = 1 | |
<PLL_Name>_CTRL[0] DAC_EN = 1 | |
<PLL_Name>_SS_CTRL[31] BYPASS_EN (SSMOD) = 1 | |
<PLL_Name>_CTRL[4] CLK_POSTDIV_EN – if PLL has more than 5 HSDIV blocks, 1; else 0. | |
<PLL_Name>_CTRL[16] BYP_ON_LOCKLOSS (= {0, 1}) | |
Delay | |
Enable PLL | <PLL_Name>_CTRL[15] PLL_EN = 1 |
Wait for Lock | Wait for MCU_PLL0_STAT[0] LOCK = 1 |
Enable HSDIV(s) | <PLL_Name>_HSDIV_CTRLk[15] CLKOUT_EN = 1 |
Delay | |
Configure external bypass to pass PLL | <PLL_Name>_CTRL[31] BYPASS_EN = 0 |
Delay | |
If PLL0 | Configure PLLCTRL block into PLL mode PLLCTL[0] PLLEN = 0 |
Lock PLL registers | <PLL_Name>_LOCKKEY0 (= any value) |
<PLL_Name>_LOCKKEY1 (= any value) |