<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Incorrect Audio PLL Behavior - **FIXED** in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Incorrect-Audio-PLL-Behavior-FIXED/m-p/590522#M22076</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ehughes on Tue Apr 29 04:50:34 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am seeing goofy behavior from the Audio PLL in the LPC4357.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The frac value in the user manual &amp;amp; generated by the pll_dialog tool produce incorrect values.&amp;nbsp; I first started with NP_DIV &amp;amp; fractional values from page 189,, Rev 1.8 of UM10503.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using the Keil MCB4357 Board Library with a 12MHz input clock.&amp;nbsp; I first tried to get a 12.288Mhz output clock.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is the code that sets up the Audio PLL:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;//*************************************************************
&amp;nbsp;&amp;nbsp;&amp;nbsp; audioPLLSetup.ctrl =&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;11) //Enable Autoblock
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (1&amp;lt;&amp;lt;4)&amp;nbsp; //PLL Clock Enable
 | (1&amp;lt;&amp;lt;12); //Enable Fractional Divider

audioPLLSetup.ndiv = ((3)&amp;lt;&amp;lt;0)&amp;nbsp;&amp;nbsp; //Pdec
&amp;nbsp; | ((1)&amp;lt;&amp;lt;12);&amp;nbsp; //Ndec

audioPLLSetup.frac = 0x1a1cac;


Chip_Clock_SetupPLL(CLKIN_CRYSTAL, CGU_AUDIO_PLL, &amp;amp;audioPLLSetup); 
Chip_Clock_EnablePLL(CGU_AUDIO_PLL);

//*************************************************************&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;also, in the CLK_BASE_STATES structure, I route the audio PLL output to CGUOUT0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;{CLK_BASE_CGU_OUT0, CLKIN_AUDIOPLL, true, false},&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This configuration returns a frequency of 15.63Mhz!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So,&amp;nbsp; I double checked the CGU settings in the debugger and also checked the values again what the PLL_Dialog tool produces.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried a could other values for audioPLLSetup.frac and could see the frequency move.&amp;nbsp;&amp;nbsp; The is a linear relationship between the fracvalue and what I get on the CGUOUT0 pin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;frac value&amp;nbsp;&amp;nbsp;&amp;nbsp; Measured Frequency&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x1a1cac&amp;lt;&amp;lt;1&amp;nbsp;&amp;nbsp; 31.25MHz&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x1a1cac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15.72MHz&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x1a1cac&amp;gt;&amp;gt;1&amp;nbsp;&amp;nbsp; 7.813MHz&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3 other observations:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1.&amp;nbsp; The Lock bit in the STAT register never goes active (it appears that the signal is stable and is not hunting around).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2.&amp;nbsp; even though I set the PLLFRACT_REQ in the CTRL register, it appears to always read back as zero in the debugger.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3.)&amp;nbsp;&amp;nbsp; If I use normal MDEC mode,&amp;nbsp; the output frequency is at around 60Mhz!&amp;nbsp;&amp;nbsp; This uses the setting from the PLL dialog tool. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any pointers?&amp;nbsp;&amp;nbsp;&amp;nbsp; I can manually find my setpoint by trial and error but I would really like to understand what is happening.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:15:17 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:15:17Z</dc:date>
    <item>
      <title>Incorrect Audio PLL Behavior - **FIXED**</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Incorrect-Audio-PLL-Behavior-FIXED/m-p/590522#M22076</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ehughes on Tue Apr 29 04:50:34 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am seeing goofy behavior from the Audio PLL in the LPC4357.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The frac value in the user manual &amp;amp; generated by the pll_dialog tool produce incorrect values.&amp;nbsp; I first started with NP_DIV &amp;amp; fractional values from page 189,, Rev 1.8 of UM10503.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using the Keil MCB4357 Board Library with a 12MHz input clock.&amp;nbsp; I first tried to get a 12.288Mhz output clock.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is the code that sets up the Audio PLL:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;//*************************************************************
&amp;nbsp;&amp;nbsp;&amp;nbsp; audioPLLSetup.ctrl =&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;11) //Enable Autoblock
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (1&amp;lt;&amp;lt;4)&amp;nbsp; //PLL Clock Enable
 | (1&amp;lt;&amp;lt;12); //Enable Fractional Divider

audioPLLSetup.ndiv = ((3)&amp;lt;&amp;lt;0)&amp;nbsp;&amp;nbsp; //Pdec
&amp;nbsp; | ((1)&amp;lt;&amp;lt;12);&amp;nbsp; //Ndec

audioPLLSetup.frac = 0x1a1cac;


Chip_Clock_SetupPLL(CLKIN_CRYSTAL, CGU_AUDIO_PLL, &amp;amp;audioPLLSetup); 
Chip_Clock_EnablePLL(CGU_AUDIO_PLL);

//*************************************************************&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;SPAN&gt;also, in the CLK_BASE_STATES structure, I route the audio PLL output to CGUOUT0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;{CLK_BASE_CGU_OUT0, CLKIN_AUDIOPLL, true, false},&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This configuration returns a frequency of 15.63Mhz!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So,&amp;nbsp; I double checked the CGU settings in the debugger and also checked the values again what the PLL_Dialog tool produces.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried a could other values for audioPLLSetup.frac and could see the frequency move.&amp;nbsp;&amp;nbsp; The is a linear relationship between the fracvalue and what I get on the CGUOUT0 pin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;frac value&amp;nbsp;&amp;nbsp;&amp;nbsp; Measured Frequency&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x1a1cac&amp;lt;&amp;lt;1&amp;nbsp;&amp;nbsp; 31.25MHz&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x1a1cac&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15.72MHz&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;0x1a1cac&amp;gt;&amp;gt;1&amp;nbsp;&amp;nbsp; 7.813MHz&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3 other observations:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1.&amp;nbsp; The Lock bit in the STAT register never goes active (it appears that the signal is stable and is not hunting around).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2.&amp;nbsp; even though I set the PLLFRACT_REQ in the CTRL register, it appears to always read back as zero in the debugger.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;3.)&amp;nbsp;&amp;nbsp; If I use normal MDEC mode,&amp;nbsp; the output frequency is at around 60Mhz!&amp;nbsp;&amp;nbsp; This uses the setting from the PLL dialog tool. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any pointers?&amp;nbsp;&amp;nbsp;&amp;nbsp; I can manually find my setpoint by trial and error but I would really like to understand what is happening.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:15:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Incorrect-Audio-PLL-Behavior-FIXED/m-p/590522#M22076</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:15:17Z</dc:date>
    </item>
    <item>
      <title>Re: Incorrect Audio PLL Behavior - **FIXED**</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Incorrect-Audio-PLL-Behavior-FIXED/m-p/590523#M22077</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ehughes on Sun Aug 23 13:39:06 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I wanted to post an update to this issue.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For the longest time I have been using the "hand tuned" PLL value but very uncomfortable with it.&amp;nbsp;&amp;nbsp; There were some units that came from assembly with wierd issues that were tracked down to the PLL not initializing correctly.&amp;nbsp;&amp;nbsp;&amp;nbsp; Below is the code that works.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Notes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1.)&amp;nbsp;&amp;nbsp; The PLL must be disabled before setting the 1st values.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.)&amp;nbsp;&amp;nbsp; After setting it up, it was necessary, to enable disable and re-enable.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3.)&amp;nbsp; After #2,&amp;nbsp;&amp;nbsp; I woudl have a look that checks the lock bit and will chip disabling and reenabling the lock bit.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I honestly don't think the lock bit works correctly as the PLL still outputs a correct value (verified with a frequency counter) when the lock bit isn't set&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4.)&amp;nbsp; If the PLL setup is done on the board library, I noticed it would take 3 to 5 retires to get a lock.&amp;nbsp; If the routine is done a few milliseconds after reset,&amp;nbsp; it takes fewer resets to get a lock (i.e. but it after main).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void InitAudioPLL()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;uint8_t LockRetries = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CGU_USBAUDIO_PLL_SETUP_T audioPLLSetup;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_Clock_DisablePLL(CGU_AUDIO_PLL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;audioPLLSetup.ctrl =&amp;nbsp;&amp;nbsp; (0x06&amp;lt;&amp;lt;24) //Crystal OSC as input to Audio PLL&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; | (1&amp;lt;&amp;lt;11) //Enable Autoblock&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | (1&amp;lt;&amp;lt;4) //PLL Clock Enable&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; | (1&amp;lt;&amp;lt;12); //Enable Fractional Divider&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;audioPLLSetup.ndiv = ((3)&amp;lt;&amp;lt;0)&amp;nbsp; //Pdec&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; | ((1)&amp;lt;&amp;lt;12);&amp;nbsp; //Ndec&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; audioPLLSetup.fract = 0x1a1cac;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//audioPLLSetup.fract = 1342168; //hand tuned weird value&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_Clock_SetupPLL(CLKIN_CRYSTAL, CGU_AUDIO_PLL, &amp;amp;audioPLLSetup); // FIXME&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Delay_mS(50);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_Clock_EnablePLL(CGU_AUDIO_PLL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Delay_mS(50);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LockRetries&amp;lt;5&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;amp;&amp;amp; ((Chip_Clock_GetPLLStatus(CGU_AUDIO_PLL) &amp;amp; 0x01) == 0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_Clock_DisablePLL(CGU_AUDIO_PLL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Delay_mS(50);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_Clock_EnablePLL(CGU_AUDIO_PLL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Delay_mS(50);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if(Chip_Clock_GetPLLStatus(CGU_AUDIO_PLL) &amp;amp;0x01)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;break;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LockRetries++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if(LockRetries &amp;gt;= 5)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Debug Here&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:15:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Incorrect-Audio-PLL-Behavior-FIXED/m-p/590523#M22077</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:15:18Z</dc:date>
    </item>
  </channel>
</rss>

