<?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 Re: K22 - can't change from FEE to FEI in case of Loss Of Clock in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461324#M27640</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;It's supported to switch to the FEI from the FEE, and I've attached the code as below, please for details.&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14494805086728164 jive_macro_code jive_text_macro" data-renderedposition="50_8_1232_1600" jivemacro_uid="_14494805086728164" modifiedtitle="true"&gt;&lt;P&gt;int fll_freq(int fll_ref)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; int fll_freq_hz;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (MCG_C4 &amp;amp; MCG_C4_DMX32_MASK) // if DMX32 set&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch ((MCG_C4 &amp;amp; MCG_C4_DRST_DRS_MASK) &amp;gt;&amp;gt; MCG_C4_DRST_DRS_SHIFT) // determine multiplier based on DRS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 732);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 20000000) {return 0x33;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 25000000) {return 0x34;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 1464);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 40000000) {return 0x35;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 50000000) {return 0x36;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 2197);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 60000000) {return 0x37;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 75000000) {return 0x38;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 2929);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 80000000) {return 0x39;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 100000000) {return 0x3A;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else // if DMX32 = 0&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch ((MCG_C4 &amp;amp; MCG_C4_DRST_DRS_MASK) &amp;gt;&amp;gt; MCG_C4_DRST_DRS_SHIFT) // determine multiplier based on DRS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 640);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 20000000) {return 0x33;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 25000000) {return 0x34;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 1280);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 40000000) {return 0x35;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 50000000) {return 0x36;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 1920);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 60000000) {return 0x37;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 75000000) {return 0x38;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 2560);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 80000000) {return 0x39;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 100000000) {return 0x3A;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; return fll_freq_hz;&lt;/P&gt;&lt;P&gt;} // fll_freq&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int fee_fei(int slow_irc_freq)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; short i;&lt;/P&gt;&lt;P&gt;&amp;nbsp; int mcg_out;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Check MCG is in FEE mode&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!((((MCG_S &amp;amp; MCG_S_CLKST_MASK) &amp;gt;&amp;gt; MCG_S_CLKST_SHIFT) == 0x0) &amp;amp;&amp;amp; // check CLKS mux has selcted FLL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (!(MCG_S &amp;amp; MCG_S_IREFST_MASK)) &amp;amp;&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // check FLL ref is external ref clk&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (!(MCG_S &amp;amp; MCG_S_PLLST_MASK))))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // check PLLS mux has selected FLL&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0x2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // return error code&lt;/P&gt;&lt;P&gt;&amp;nbsp; } &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// Check IRC frequency is within spec.&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((slow_irc_freq &amp;lt; 31250) || (slow_irc_freq &amp;gt; 39063))&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0x31;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Check resulting FLL frequency &lt;/P&gt;&lt;P&gt;&amp;nbsp; mcg_out = fll_freq(slow_irc_freq); &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (mcg_out &amp;lt; 0x5B) {return mcg_out;} // If error code returned, return the code to calling function&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// Ensure clock monitor is disabled before switching to FEI otherwise a loss of clock will trigger&lt;/P&gt;&lt;P&gt;&amp;nbsp; MCG_C6 &amp;amp;= ~MCG_C6_CME0_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Change FLL reference clock from external to internal by setting IREFS bit&lt;/P&gt;&lt;P&gt;&amp;nbsp; MCG_C1 |= MCG_C1_IREFS_MASK; // select internal reference&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// wait for Reference clock to switch to internal reference &lt;/P&gt;&lt;P&gt;&amp;nbsp; for (i = 0 ; i &amp;lt; 2000 ; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (MCG_S &amp;amp; MCG_S_IREFST_MASK) break; // jump out early if IREFST sets before loop finishes&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!(MCG_S &amp;amp; MCG_S_IREFST_MASK)) return 0x12; // check bit is really set and return with error if not set&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// Now in FEI mode&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; return mcg_out;&amp;nbsp; &lt;/P&gt;&lt;P&gt;} // fee_fei&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Ping&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 07 Dec 2015 09:29:46 GMT</pubDate>
    <dc:creator>jeremyzhou</dc:creator>
    <dc:date>2015-12-07T09:29:46Z</dc:date>
    <item>
      <title>K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461323#M27639</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm not able to change MCG mode from FEE to FEI in case of Loss Of Clock.&lt;/P&gt;&lt;P&gt;I'm using a custom board mounting MK22FX512VLK12 or MK22FX512V12 (mask 3N03G). On the custom board is also mounted an external I2C RTC, which 32-kHz output is used as reference clock for the RTC oscillator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At startup, MCU starts by default in FEI mode (using the internal 32-kHz clock). In the main, I change then the MCG mode from FEI to FEE, using the external 32-kHz as reference clock.&lt;/P&gt;&lt;P&gt;I also enable the external clock monitor for generating an interrupt in case of loss of clock (CME1 = 1, LOCRE1= 0).&lt;/P&gt;&lt;P&gt;In case of loss of lock then (removing a jumper on the board that cuts off the 32-kHz signal), within the MCG ISR I change the MCG mode from FEE to FEI, but the bit IREFST remains 0, meaning that the source of the FLL reference clock is still the external one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is it possible to change MCGmode from FEE to FEI in case of loss of clock without resetting the MCU? I have found no documentation about that.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is my very simple example code&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14492446670368486 jive_text_macro" data-renderedposition="323_8_1232_1120" jivemacro_uid="_14492446670368486"&gt;&lt;P&gt;void setFEE (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C7 |= MCG_C7_OSCSEL_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C1&amp;nbsp; = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C4 |= (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0x03));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((MCG_S &amp;amp; MCG_S_IREFST_MASK) != 0x00U)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((MCG_S &amp;amp; 0x0CU) != 0x00U)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C8 = MCG_C8_CME1_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICIP57&amp;nbsp;&amp;nbsp; = NVIC_IP_PRI57(0x80);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICISER1 |= NVIC_ISER_SETENA(0x2000000);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void setFEI (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C7 |= MCG_C7_OSCSEL_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C1 |= MCG_C1_IREFS_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C4 |= (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS(0x03));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_C8 &amp;amp;= ~(MCG_C8_CME1_MASK);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((MCG_S &amp;amp; MCG_S_IREFST_MASK) == 0x00U)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* I'm stucking here when configuring from FEE to FEI within ISR. */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((MCG_S &amp;amp; 0x0CU) != 0x00U)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void lossOfLockIsr ()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCG_S = (MCG_S_LOLS_MASK | MCG_S_CLKST(0x00));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cpu_SetFEIMode ();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICIP57 &amp;amp;= ~NVIC_IP_PRI57(0x80);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVICICER1 = NVIC_ICER_CLRENA(0x2000000);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void main (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setFEE ();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If a reset request is generated instead of interrupt (LOCRE1 = 1), everything is working correctly (MCU resets and it starts in FEI mode by default, with IREFST bit set to 1).&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Dec 2015 15:58:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461323#M27639</guid>
      <dc:creator>alessandromorni</dc:creator>
      <dc:date>2015-12-04T15:58:24Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461324#M27640</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;It's supported to switch to the FEI from the FEE, and I've attached the code as below, please for details.&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14494805086728164 jive_macro_code jive_text_macro" data-renderedposition="50_8_1232_1600" jivemacro_uid="_14494805086728164" modifiedtitle="true"&gt;&lt;P&gt;int fll_freq(int fll_ref)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; int fll_freq_hz;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (MCG_C4 &amp;amp; MCG_C4_DMX32_MASK) // if DMX32 set&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch ((MCG_C4 &amp;amp; MCG_C4_DRST_DRS_MASK) &amp;gt;&amp;gt; MCG_C4_DRST_DRS_SHIFT) // determine multiplier based on DRS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 732);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 20000000) {return 0x33;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 25000000) {return 0x34;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 1464);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 40000000) {return 0x35;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 50000000) {return 0x36;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 2197);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 60000000) {return 0x37;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 75000000) {return 0x38;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 2929);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 80000000) {return 0x39;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 100000000) {return 0x3A;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else // if DMX32 = 0&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch ((MCG_C4 &amp;amp; MCG_C4_DRST_DRS_MASK) &amp;gt;&amp;gt; MCG_C4_DRST_DRS_SHIFT) // determine multiplier based on DRS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 640);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 20000000) {return 0x33;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 25000000) {return 0x34;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 1280);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 40000000) {return 0x35;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 50000000) {return 0x36;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 1920);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 60000000) {return 0x37;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 75000000) {return 0x38;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fll_freq_hz = (fll_ref * 2560);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (fll_freq_hz &amp;lt; 80000000) {return 0x39;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (fll_freq_hz &amp;gt; 100000000) {return 0x3A;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; return fll_freq_hz;&lt;/P&gt;&lt;P&gt;} // fll_freq&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int fee_fei(int slow_irc_freq)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; short i;&lt;/P&gt;&lt;P&gt;&amp;nbsp; int mcg_out;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Check MCG is in FEE mode&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!((((MCG_S &amp;amp; MCG_S_CLKST_MASK) &amp;gt;&amp;gt; MCG_S_CLKST_SHIFT) == 0x0) &amp;amp;&amp;amp; // check CLKS mux has selcted FLL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (!(MCG_S &amp;amp; MCG_S_IREFST_MASK)) &amp;amp;&amp;amp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // check FLL ref is external ref clk&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (!(MCG_S &amp;amp; MCG_S_PLLST_MASK))))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // check PLLS mux has selected FLL&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0x2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // return error code&lt;/P&gt;&lt;P&gt;&amp;nbsp; } &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// Check IRC frequency is within spec.&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ((slow_irc_freq &amp;lt; 31250) || (slow_irc_freq &amp;gt; 39063))&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0x31;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Check resulting FLL frequency &lt;/P&gt;&lt;P&gt;&amp;nbsp; mcg_out = fll_freq(slow_irc_freq); &lt;/P&gt;&lt;P&gt;&amp;nbsp; if (mcg_out &amp;lt; 0x5B) {return mcg_out;} // If error code returned, return the code to calling function&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// Ensure clock monitor is disabled before switching to FEI otherwise a loss of clock will trigger&lt;/P&gt;&lt;P&gt;&amp;nbsp; MCG_C6 &amp;amp;= ~MCG_C6_CME0_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// Change FLL reference clock from external to internal by setting IREFS bit&lt;/P&gt;&lt;P&gt;&amp;nbsp; MCG_C1 |= MCG_C1_IREFS_MASK; // select internal reference&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// wait for Reference clock to switch to internal reference &lt;/P&gt;&lt;P&gt;&amp;nbsp; for (i = 0 ; i &amp;lt; 2000 ; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (MCG_S &amp;amp; MCG_S_IREFST_MASK) break; // jump out early if IREFST sets before loop finishes&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (!(MCG_S &amp;amp; MCG_S_IREFST_MASK)) return 0x12; // check bit is really set and return with error if not set&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;// Now in FEI mode&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; return mcg_out;&amp;nbsp; &lt;/P&gt;&lt;P&gt;} // fee_fei&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Ping&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 Dec 2015 09:29:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461324#M27640</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2015-12-07T09:29:46Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461325#M27641</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thank you for the support.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've just tried using your code, but I'm still not be able to change back MCG to FEI mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I got stuck here&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14496477452571445 jive_macro_code jive_text_macro" data-renderedposition="176_8_1232_16" jivemacro_uid="_14496477452571445"&gt;&lt;P&gt;&lt;SPAN class="keyword" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #006699;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #000000;"&gt; (MCG_S &amp;amp; MCG_S_IREFST_MASK) &lt;/SPAN&gt;&lt;SPAN class="keyword" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #006699;"&gt;break&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #000000;"&gt;; &lt;/SPAN&gt;&lt;SPAN class="comment" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #008200;"&gt;// jump out early if IREFST sets before loop finishes&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #000000;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So the function returns with the code 0x12&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14496478389184008" data-renderedposition="255_8_1232_16" jivemacro_uid="_14496478389184008"&gt;&lt;P&gt;&lt;SPAN class="keyword" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #006699;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #000000;"&gt; (!(MCG_S &amp;amp; MCG_S_IREFST_MASK)) &lt;/SPAN&gt;&lt;SPAN class="keyword" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #006699;"&gt;return&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #000000;"&gt; &lt;/SPAN&gt;&lt;SPAN class="number" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: green;"&gt;0x12&lt;/SPAN&gt;&lt;SPAN style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #000000;"&gt;; &lt;/SPAN&gt;&lt;SPAN class="comment" style="font-size: 12px; font-family: Consolas, 'Courier New', Courier, mono, serif; color: #008200;"&gt;// check bit is really set and return with error if not set &lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's like that IREFST bit is never set (the same thing happens using my code).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Did you try the code? Using which board/MCU?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Dec 2015 07:56:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461325#M27641</guid>
      <dc:creator>alessandromorni</dc:creator>
      <dc:date>2015-12-09T07:56:24Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461326#M27642</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;This code is from the TWR-K60D100 example demo, and the K22 contains the MCG module which is as same as the K60_100.&lt;/P&gt;&lt;P&gt;And the code can work well on the TWR-K60D100 board.&lt;/P&gt;&lt;P&gt;I was wondering if you can share your project, then I can reproduce this same issue on the FRDM-K22F board.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Dec 2015 08:44:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461326#M27642</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2015-12-09T08:44:46Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461327#M27643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;some updates:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the code you provided (and also mine), works well if "loss of lock" event is not triggered. I mean, as still as the external&amp;nbsp; 32khz is active, I can change between FEI/FEE and viceversa without problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem occurs if external 32khz is "killed" (in my case, removing a jumper on the board). In this case, software is still running because of DCO feedback, ISR is triggered but configuring MCG back to FEI just fails.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyway, attached to this message you will find the KSDK project for testing it: you should be able to compile without problems regenerating PE code and (maybe) changing KSDK path. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for the support.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Alessandro&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Dec 2015 10:28:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461327#M27643</guid>
      <dc:creator>alessandromorni</dc:creator>
      <dc:date>2015-12-09T10:28:26Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461328#M27644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Thanks for your reply.&lt;/P&gt;&lt;P&gt;I think remove the jumper to stop the external 32KHz to feed the MCU is the root accuse of the issue.&lt;/P&gt;&lt;P&gt;I'd like to confirm with you about when you remove the jumper on the board.&lt;/P&gt;&lt;P&gt;I'm looking forward to your reply.&lt;BR /&gt;Have a great day,&lt;BR /&gt;Ping&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 10 Dec 2015 01:53:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461328#M27644</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2015-12-10T01:53:27Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461329#M27645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;that's exactly what I'm trying to do.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'd like to change from FEE to FEI whenever a "loss of clock" event occurs: for forcing such event, I'm removing the jumper in order to kill the external source clock reference and to trigger the interrupt, changing then MCG to FEI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'd like to understand if this operation is legal or not: in such scenario, IREFST bit is never set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Reading the datasheet, this operation should be possible (it just says that changing from FEE to FEI and viceversa is allowed, without saying if external source clock reference must be present or not).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again for the support.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alessandro&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Dec 2015 14:37:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461329#M27645</guid>
      <dc:creator>alessandromorni</dc:creator>
      <dc:date>2015-12-11T14:37:18Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461330#M27646</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I'd like to confirm the steps of forcing the "loss of clock" event.&lt;/P&gt;&lt;P&gt;Did you remove the jumper before you start changing the MCG mode from the FEE to FEI or not?&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Ping&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Dec 2015 06:16:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461330#M27646</guid>
      <dc:creator>jeremyzhou</dc:creator>
      <dc:date>2015-12-14T06:16:21Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461331#M27647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I remove the jumper before &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;changing&amp;nbsp; from FEE to FEI.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The steps I do are reported as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. power on the board (MCU starts with FEI mode by default);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;2. after startup, I change MCG mode from FEI to FEE;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;3. I enable the MCG interrupt in the vector table in case of loss of clock event;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14500789033394504" data-renderedposition="260_8_1232_112" jivemacro_uid="_14500789033394504"&gt;&lt;P&gt;/* Enable the loss of lock interrupt in MCG module. */&lt;/P&gt;&lt;P&gt;MCG_C8 = MCG_C8_CME1_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Set priority and enable interrupt. */&lt;/P&gt;&lt;P&gt;NVICIP57&amp;nbsp;&amp;nbsp; = NVIC_IP_PRI57(0x80);&lt;/P&gt;&lt;P&gt;NVICISER1 |= NVIC_ISER_SETENA(0x2000000);&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;4. I then start my application as usual;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At some point, I remove the jumper in order to generate the "loss of clock" event. The MCG ISR is then triggered and executed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14500790588232171 jive_text_macro" data-renderedposition="477_8_1232_112" jivemacro_uid="_14500790588232171" modifiedtitle="true"&gt;&lt;P&gt;PE_ISR(Cpu_INT_MCGInterrupt)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; MCG_S = (MCG_S_LOLS_MASK | MCG_S_CLKST(0x00)); /* Clear Loss of Lock status flag */&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Switch to FEI mode. */&lt;/P&gt;&lt;P&gt;&amp;nbsp; Cpu_SetFEIMode ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When the ISR is executed, the 32-kHz external reference clock is already "dead".&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 14 Dec 2015 07:46:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461331#M27647</guid>
      <dc:creator>alessandromorni</dc:creator>
      <dc:date>2015-12-14T07:46:45Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461332#M27648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We have a similar issue. Did you find a solution?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Mar 2016 14:57:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461332#M27648</guid>
      <dc:creator>chipweller</dc:creator>
      <dc:date>2016-03-02T14:57:53Z</dc:date>
    </item>
    <item>
      <title>Re: K22 - can't change from FEE to FEI in case of Loss Of Clock</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461333#M27649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;sorry for the delayed response.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;No solution for the problem: if I cutoff the external 32khz signal, the ISR triggers but can't change mode to FEI.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Despite it, the board continues to run normally because of the 'feedback signal' named DCOOUT (on the datasheet it can be found under the Multipurpose Clock Generator (MCG) block diagram).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Our final solution was to generate a reset in case of LOC, saving a flag in the no reset ram, and configuring the FEI after the reset.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 11 Apr 2016 13:08:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K22-can-t-change-from-FEE-to-FEI-in-case-of-Loss-Of-Clock/m-p/461333#M27649</guid>
      <dc:creator>alessandromorni</dc:creator>
      <dc:date>2016-04-11T13:08:50Z</dc:date>
    </item>
  </channel>
</rss>

