<?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>Kinetis MicrocontrollersのトピックRe: KV31 ADC Calibration</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610579#M36070</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Eduardo,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is our hardware.  I'll work on porting it back to the Freedom board I&lt;/P&gt;&lt;P&gt;have but I'll need to modify the clock system settings to work with it.  I&lt;/P&gt;&lt;P&gt;have some other tasks I'm working in parallel so it may take till Friday.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Shawn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Shawn M. Mason&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sr. Electrical Engineer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TCAS Products&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Phone: 321-674-5389&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cell: 321-591-8482&lt;/P&gt;&lt;P&gt;shawn.mason@rockwellcollins.com&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;rockwellcollins.com&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MS 313-E13&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1100 W. Hibiscus Blvd.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Melbourne, FL 32901, USA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On Mon, Mar 20, 2017 at 12:06 PM, eduardo_viramontes &amp;lt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 22 Mar 2017 14:07:01 GMT</pubDate>
    <dc:creator>ohiogt</dc:creator>
    <dc:date>2017-03-22T14:07:01Z</dc:date>
    <item>
      <title>KV31 ADC Calibration</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610575#M36066</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;We've run into a performance limit on our application when using an uncalibrated ADC. &amp;nbsp;However, we've seen&amp;nbsp;issues when attempting to perform the internal Kinetis calibration. &amp;nbsp;Device is a MKV31F512.&lt;/P&gt;&lt;P&gt;1) &amp;nbsp;The major problem is that when running the initialization code below for both ADC0 and ADC1, the ADC1 calibration always returns with 0 values. &amp;nbsp;I've tried different combinations of COCO and CAL flags but the results are always the same. &amp;nbsp;The only way I can get a result appear is to breakpoint on the line "&lt;SPAN&gt;tmp32 = ADC1-&amp;gt;CLP0 + ADC1-&amp;gt;CLP1 + ADC1-&amp;gt;CLP2 + ADC1-&amp;gt;CLP3 + ADC1-&amp;gt;CLP4 + ADC1-&amp;gt;CLPS;". &amp;nbsp;The input bus clock to the ADC modules is 24 MHz.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;2) &amp;nbsp;Minor issue is that occasionally&amp;nbsp;the calibration occasionally gives outlier results. &amp;nbsp;The offset goes to -1 in these cases. &amp;nbsp;I've used the breakpoint method above to gather ADC1 data. &amp;nbsp;I've read you need to run the calibration 20 times and apply a median filter but it appears some thing isn't correct in the hardware.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Any ideas on how to properly poll the calibration status and ensure the ADC1 calibration completes correctly?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Shawn&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/14860i0D7104007406B82F/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void InitADC(void)&lt;BR /&gt;{&lt;BR /&gt; uint32_t tmp32 = 0x00000000;&lt;/P&gt;&lt;P&gt;ADC0-&amp;gt;CFG1 &amp;amp;= ~(ADC_CFG1_ADLPC_MASK | ADC_CFG1_ADLSMP_MASK | ADC_CFG1_ADICLK_MASK | ADC_CFG1_ADIV_MASK| ADC_CFG1_MODE_MASK);&lt;BR /&gt; ADC0-&amp;gt;CFG1 |= (ADC_CFG1_ADIV(3U) | ADC_CFG1_MODE(1U));&lt;BR /&gt; ADC0-&amp;gt;CFG2 &amp;amp;= ~(ADC_CFG2_MUXSEL_MASK | ADC_CFG2_ADACKEN_MASK | ADC_CFG2_ADLSTS_MASK | ADC_CFG2_ADHSC_MASK);&lt;BR /&gt; ADC0-&amp;gt;CFG2 |= (ADC_CFG2_ADHSC_MASK);&lt;BR /&gt; ADC0-&amp;gt;SC2 &amp;amp;= ~(ADC_SC2_ADTRG_MASK | ADC_SC2_ACFE_MASK | ADC_SC2_ACFGT_MASK | ADC_SC2_ACREN_MASK |&lt;BR /&gt; ADC_SC2_DMAEN_MASK | ADC_SC2_REFSEL_MASK);&lt;BR /&gt; ADC0-&amp;gt;SC3 &amp;amp;= ~(ADC_SC3_ADCO_MASK | ADC_SC3_AVGE_MASK | ADC_SC3_AVGS_MASK);&lt;BR /&gt; ADC0-&amp;gt;SC3 |= (ADC_SC3_AVGE_MASK | ADC_SC3_AVGS(0x3));&lt;BR /&gt; ADC0-&amp;gt;SC1[0] &amp;amp;= ~(ADC_SC1_COCO_MASK | ADC_SC1_AIEN_MASK | ADC_SC1_ADCH_MASK);&lt;BR /&gt; ADC0-&amp;gt;SC1[0] |= (ADC_SC1_DIFF_MASK | ADC_SC1_ADCH(0x00));&lt;BR /&gt; ADC0-&amp;gt;SC1[1] |= (ADC_SC1_DIFF_MASK | ADC_SC1_ADCH_MASK);&lt;/P&gt;&lt;P&gt;ADC1-&amp;gt;CFG1 &amp;amp;= ~(ADC_CFG1_ADLPC_MASK | ADC_CFG1_ADLSMP_MASK | ADC_CFG1_ADICLK_MASK | ADC_CFG1_ADIV_MASK| ADC_CFG1_MODE_MASK);&lt;BR /&gt; ADC1-&amp;gt;CFG1 |= (ADC_CFG1_ADIV(3U) | ADC_CFG1_MODE(1U));&lt;BR /&gt; ADC1-&amp;gt;CFG2 &amp;amp;= ~(ADC_CFG2_MUXSEL_MASK | ADC_CFG2_ADACKEN_MASK | ADC_CFG2_ADLSTS_MASK);&lt;BR /&gt; ADC1-&amp;gt;CFG2 |= (ADC_CFG2_ADHSC_MASK);&lt;BR /&gt; ADC1-&amp;gt;SC2 &amp;amp;= ~(ADC_SC2_ADTRG_MASK | ADC_SC2_ACFE_MASK | ADC_SC2_ACFGT_MASK | ADC_SC2_ACREN_MASK |&lt;BR /&gt; ADC_SC2_DMAEN_MASK | ADC_SC2_REFSEL_MASK);&lt;BR /&gt; ADC1-&amp;gt;SC3 &amp;amp;= ~(ADC_SC3_ADCO_MASK | ADC_SC3_AVGE_MASK | ADC_SC3_AVGS_MASK);&lt;BR /&gt; ADC1-&amp;gt;SC3 |= (ADC_SC3_AVGE_MASK | ADC_SC3_AVGS(0x3));&lt;BR /&gt; ADC1-&amp;gt;SC1[0] &amp;amp;= ~(ADC_SC1_COCO_MASK | ADC_SC1_AIEN_MASK | ADC_SC1_ADCH_MASK);&lt;BR /&gt; ADC1-&amp;gt;SC1[0] |= (ADC_SC1_DIFF_MASK | ADC_SC1_ADCH(0x00));&lt;BR /&gt; ADC1-&amp;gt;SC1[1] |= (ADC_SC1_DIFF_MASK | ADC_SC1_ADCH_MASK);&lt;/P&gt;&lt;P&gt;#ifdef ADC_CAL&lt;BR /&gt; ADC0-&amp;gt;SC3 |= (ADC_SC3_CAL_MASK | ADC_SC3_CALF_MASK);&lt;/P&gt;&lt;P&gt;while (((ADC0-&amp;gt;SC1[0] &amp;amp; ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK) &amp;amp; ((ADC0-&amp;gt;SC3 &amp;amp; ADC_SC3_CAL_MASK) == ADC_SC3_CAL_MASK))&lt;BR /&gt; {&lt;BR /&gt; if ((ADC0-&amp;gt;SC3 &amp;amp; ADC_SC3_CALF_MASK) == ADC_SC3_CALF_MASK)&lt;BR /&gt; {&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; tmp32 = ADC0-&amp;gt;R[0];&lt;/P&gt;&lt;P&gt;if ((ADC0-&amp;gt;SC3 &amp;amp; ADC_SC3_CALF_MASK) != &lt;SPAN&gt;ADC_SC3_CALF_MASK&lt;/SPAN&gt;)&lt;BR /&gt; {&lt;BR /&gt; tmp32 = ADC0-&amp;gt;CLP0 + ADC0-&amp;gt;CLP1 + ADC0-&amp;gt;CLP2 + ADC0-&amp;gt;CLP3 + ADC0-&amp;gt;CLP4 + ADC0-&amp;gt;CLPS;&lt;BR /&gt; tmp32 = 0x8000U | (tmp32 &amp;gt;&amp;gt; 1U);&lt;BR /&gt; ADC0-&amp;gt;PG = tmp32;&lt;/P&gt;&lt;P&gt;tmp32 = ADC0-&amp;gt;CLM0 + ADC0-&amp;gt;CLM1 + ADC0-&amp;gt;CLM2 + ADC0-&amp;gt;CLM3 + ADC0-&amp;gt;CLM4 + ADC0-&amp;gt;CLMS;&lt;BR /&gt; tmp32 = 0x8000U | (tmp32 &amp;gt;&amp;gt; 1U);&lt;BR /&gt; ADC0-&amp;gt;MG = tmp32;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;ADC1-&amp;gt;SC3 |= (ADC_SC3_CAL_MASK | ADC_SC3_CALF_MASK);&lt;/P&gt;&lt;P&gt;while (((ADC1-&amp;gt;SC1[0] &amp;amp; ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK) &amp;amp; ((ADC0-&amp;gt;SC3 &amp;amp; ADC_SC3_CAL_MASK) == ADC_SC3_CAL_MASK))&lt;BR /&gt; {&lt;BR /&gt; if ((ADC1-&amp;gt;SC3 &amp;amp; ADC_SC3_CALF_MASK) == ADC_SC3_CALF_MASK)&lt;BR /&gt; {&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;BR /&gt; tmp32 = ADC1-&amp;gt;R[0];&lt;/P&gt;&lt;P&gt;if ((ADC1-&amp;gt;SC3 &amp;amp; ADC_SC3_CALF_MASK) != &lt;SPAN&gt;ADC_SC3_CALF_MASK&lt;/SPAN&gt;)&lt;BR /&gt; {&lt;BR /&gt; tmp32 = ADC1-&amp;gt;CLP0 + ADC1-&amp;gt;CLP1 + ADC1-&amp;gt;CLP2 + ADC1-&amp;gt;CLP3 + ADC1-&amp;gt;CLP4 + ADC1-&amp;gt;CLPS;&lt;BR /&gt; tmp32 = 0x8000U | (tmp32 &amp;gt;&amp;gt; 1U);&lt;BR /&gt; ADC1-&amp;gt;PG = tmp32;&lt;/P&gt;&lt;P&gt;tmp32 = ADC1-&amp;gt;CLM0 + ADC1-&amp;gt;CLM1 + ADC1-&amp;gt;CLM2 + ADC1-&amp;gt;CLM3 + ADC1-&amp;gt;CLM4 + ADC1-&amp;gt;CLMS;&lt;BR /&gt; tmp32 = 0x8000U | (tmp32 &amp;gt;&amp;gt; 1U);&lt;BR /&gt; ADC1-&amp;gt;MG = tmp32;&lt;BR /&gt; }&lt;BR /&gt;#else&lt;BR /&gt; ADC0-&amp;gt;OFS = 0x00000000;&lt;BR /&gt; ADC0-&amp;gt;PG = 0x82D2;&lt;BR /&gt; ADC0-&amp;gt;MG = 0x82D2;&lt;BR /&gt; ADC0-&amp;gt;CLPD = 0xE;&lt;BR /&gt; ADC0-&amp;gt;CLPS = 0x2E;&lt;BR /&gt; ADC0-&amp;gt;CLP4 = 0x2C8;&lt;BR /&gt; ADC0-&amp;gt;CLP3 = 0x16D;&lt;BR /&gt; ADC0-&amp;gt;CLP2 = 0xB7;&lt;BR /&gt; ADC0-&amp;gt;CLP1 = 0x5C;&lt;BR /&gt; ADC0-&amp;gt;CLP0 = 0x2E;&lt;BR /&gt; ADC0-&amp;gt;CLMD = 0xE;&lt;BR /&gt; ADC0-&amp;gt;CLMS = 0x2E;&lt;BR /&gt; ADC0-&amp;gt;CLM4 = 0x2C8;&lt;BR /&gt; ADC0-&amp;gt;CLM3 = 0x16D;&lt;BR /&gt; ADC0-&amp;gt;CLM2 = 0xB7;&lt;BR /&gt; ADC0-&amp;gt;CLM1 = 0x5C;&lt;BR /&gt; ADC0-&amp;gt;CLM0 = 0x2E;&lt;/P&gt;&lt;P&gt;ADC1-&amp;gt;OFS = 0x00000000;&lt;BR /&gt; ADC1-&amp;gt;PG = 0x82C8;&lt;BR /&gt; ADC1-&amp;gt;MG = 0x82D0;&lt;BR /&gt; ADC1-&amp;gt;CLPD = 0xD;&lt;BR /&gt; ADC1-&amp;gt;CLPS = 0x2E;&lt;BR /&gt; ADC1-&amp;gt;CLP4 = 0x2BF;&lt;BR /&gt; ADC1-&amp;gt;CLP3 = 0x166;&lt;BR /&gt; ADC1-&amp;gt;CLP2 = 0xB6;&lt;BR /&gt; ADC1-&amp;gt;CLP1 = 0x5B;&lt;BR /&gt; ADC1-&amp;gt;CLP0 = 0x2D;&lt;BR /&gt; ADC1-&amp;gt;CLMD = 0xF;&lt;BR /&gt; ADC1-&amp;gt;CLMS = 0x2E;&lt;BR /&gt; ADC1-&amp;gt;CLM4 = 0x2C5;&lt;BR /&gt; ADC1-&amp;gt;CLM3 = 0x16B;&lt;BR /&gt; ADC1-&amp;gt;CLM2 = 0xB7;&lt;BR /&gt; ADC1-&amp;gt;CLM1 = 0x5D;&lt;BR /&gt; ADC1-&amp;gt;CLM0 = 0x2E;&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;ADC0-&amp;gt;CFG1 &amp;amp;= ~(ADC_CFG1_ADIV_MASK);&lt;BR /&gt; ADC0-&amp;gt;CFG1 |= ADC_CFG1_ADIV(0U);&lt;BR /&gt; ADC0-&amp;gt;SC3 &amp;amp;= ~(ADC_SC3_AVGS_MASK | ADC_SC3_AVGE_MASK);&lt;BR /&gt; ADC0-&amp;gt;SC2 |= (ADC_SC2_ADTRG_MASK | ADC_SC2_DMAEN_MASK);&lt;/P&gt;&lt;P&gt;ADC1-&amp;gt;CFG1 &amp;amp;= ~(ADC_CFG1_ADIV_MASK);&lt;BR /&gt; ADC1-&amp;gt;CFG1 |= ADC_CFG1_ADIV(0U);&lt;BR /&gt; ADC1-&amp;gt;SC3 &amp;amp;= ~(ADC_SC3_AVGS_MASK | ADC_SC3_AVGE_MASK);&lt;BR /&gt; ADC1-&amp;gt;SC2 |= (ADC_SC2_ADTRG_MASK | ADC_SC2_DMAEN_MASK);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Mar 2017 18:19:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610575#M36066</guid>
      <dc:creator>ohiogt</dc:creator>
      <dc:date>2017-03-01T18:19:55Z</dc:date>
    </item>
    <item>
      <title>Re: KV31 ADC Calibration</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610576#M36067</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Shawn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't see any problem in your Calibration code, the only thing that I notice is that you ADC clock is way too high, according to the reference manual, general recommendations for calibrations are:&lt;/P&gt;&lt;P&gt;For best calibration results:&lt;BR /&gt;-Set hardware averaging to maximum, that is, SC3[AVGE]=1 and SC3[AVGS]=11 for an average of 32&lt;BR /&gt;&lt;STRONG&gt;-Set ADC clock frequency fADCK less than or equal to 4 MHz&lt;/STRONG&gt;&lt;BR /&gt;- VREFH=VDDA&lt;BR /&gt;- Calibrate at nominal voltage and temperature&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have you check the code from SDK examples? Here you can find an example code of how is set the calibration.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;Any ideas on how to properly poll the calibration status and ensure the ADC1 calibration completes correctly?&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;The only method to verify that the Calibration has completed correctly is with CALF, you use it in:&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC1&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; ADC_SC1_COCO_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; ADC_SC1_COCO_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ADC0&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC3 &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; ADC_SC3_CAL_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; ADC_SC3_CAL_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC3 &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; ADC_SC3_CALF_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; ADC_SC3_CALF_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;R&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC3 &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; ADC_SC3_CALF_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; ADC_SC3_CALF_MASK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP0 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP1 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP2 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP3 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP4 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLPS&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0x8000U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;tmp32 &lt;SPAN class="operator token"&gt;&amp;gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1U&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;PG &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; tmp32&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM0 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM1 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM2 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM3 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM4 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLMS&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0x8000U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;tmp32 &lt;SPAN class="operator token"&gt;&amp;gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1U&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ADC1&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;MG &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; tmp32&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can verify this flag after the calibration has complete.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please check the following links for further information:&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="http://www.nxp.com/doc/AN5314" rel="nofollow noopener noreferrer" title="http://www.nxp.com/doc/AN5314" target="_blank"&gt;http://www.nxp.com/doc/AN5314&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/docs/DOC-102013" rel="nofollow noopener noreferrer" target="_blank"&gt;16-bit SAR ADC calibration&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="http://www.nxp.com/assets/documents/data/en/supporting-information/Analog-to-digital-Converter-Training.pdf" rel="nofollow noopener noreferrer" title="http://www.nxp.com/assets/documents/data/en/supporting-information/Analog-to-digital-Converter-Training.pdf" target="_blank"&gt;http://www.nxp.com/assets/documents/data/en/supporting-information/Analog-to-digital-Converter-Training.pdf&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Hope this information helps you&lt;BR /&gt;Have a great day,&lt;BR /&gt;Jorge Alcala&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>Mon, 06 Mar 2017 01:29:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610576#M36067</guid>
      <dc:creator>jorge_a_vazquez</dc:creator>
      <dc:date>2017-03-06T01:29:03Z</dc:date>
    </item>
    <item>
      <title>Re: KV31 ADC Calibration</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610577#M36068</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Jorge,&lt;/P&gt;&lt;P&gt;Thanks for the response. &amp;nbsp;I believe I am running the ADC &amp;lt;&amp;nbsp;4 MHz as suggested. &amp;nbsp;I set the input clock divider to 8 in the following line:&lt;/P&gt;&lt;P&gt;ADC0-&amp;gt;CFG1 |= (ADC_CFG1_ADIV(3U) | ADC_CFG1_MODE(1U));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I used the code from the latest SDK to create my function. &amp;nbsp;I've copied it below. &amp;nbsp;I don't see any major differences. &amp;nbsp;I'm using COCO as the condition flag for determining if the calibration completed. &amp;nbsp;This seems to be in line with the documentation you suggested. &amp;nbsp;I'll keep digging to see if I can find the exact timing issue. &amp;nbsp;If I breakpoint at "tmp = ADC1-&amp;gt;R[0]", the CALF flag is 0 and the calibration values look good. &amp;nbsp;If I allow the function to run to the end the CALF flag is set. &amp;nbsp;I'm speculating that for some reason the code thinks the calibration is complete and attempts to write the ADC1-&amp;gt;PG register. &amp;nbsp;The would induce a calibration failure per the reference manual.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Shawn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="3-6-2017 12-49-00 PM.jpg"&gt;&lt;IMG alt="3-6-2017 12-49-00 PM.jpg" src="https://community.nxp.com/t5/image/serverpage/image-id/14980i26D1B5687710A54E/image-size/large?v=v2&amp;amp;px=999" title="3-6-2017 12-49-00 PM.jpg" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;status_t &lt;SPAN class="token function"&gt;ADC16_DoAutoCalibration&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ADC_Type &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 bool bHWTrigger &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; false&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;volatile&lt;/SPAN&gt; uint32_t tmp32&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;/* 'volatile' here is for the dummy read of ADCx_R[0] register. */&lt;/SPAN&gt;
 status_t status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; kStatus_Success&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;/* The calibration would be failed when in hardwar mode.
 * Remember the hardware trigger state here and restore it later if the hardware trigger is enabled.*/&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ADC_SC2_ADTRG_MASK &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC2&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 bHWTrigger &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; true&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC2 &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;~&lt;/SPAN&gt;ADC_SC2_ADTRG_MASK&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;/* Clear the CALF and launch the calibration. */&lt;/SPAN&gt;
 base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC3 &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ADC_SC3_CAL_MASK &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; ADC_SC3_CALF_MASK&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;kADC16_ChannelConversionDoneFlag &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;ADC16_GetChannelStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0U&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;/* Check the CALF when the calibration is active. */&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;kADC16_CalibrationFailedFlag &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;ADC16_GetStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; kStatus_Fail&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;R&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;/* Dummy read to clear COCO caused by calibration. */&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;/* Restore the hardware trigger setting if it was enabled before. */&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;bHWTrigger&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SC2 &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ADC_SC2_ADTRG_MASK&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;/* Check the CALF at the end of calibration. */&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;kADC16_CalibrationFailedFlag &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;ADC16_GetStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; kStatus_Fail&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;kStatus_Success &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; status&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;/* Check if the calibration process is succeed. */&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; status&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;/* Calculate the calibration values. */&lt;/SPAN&gt;
 tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP0 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP1 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP2 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP3 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLP4 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLPS&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0x8000U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;tmp32 &lt;SPAN class="operator token"&gt;&amp;gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1U&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;PG &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; tmp32&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="property macro token"&gt;#if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) &amp;amp;&amp;amp; FSL_FEATURE_ADC16_HAS_DIFF_MODE&lt;/SPAN&gt;
 tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM0 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM1 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM2 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM3 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLM4 &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;CLMS&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 tmp32 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0x8000U&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;tmp32 &lt;SPAN class="operator token"&gt;&amp;gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1U&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 base&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;MG &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; tmp32&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="property macro token"&gt;#endif &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/* FSL_FEATURE_ADC16_HAS_DIFF_MODE */&lt;/SPAN&gt;

 &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; kStatus_Success&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt; ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:51:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610577#M36068</guid>
      <dc:creator>ohiogt</dc:creator>
      <dc:date>2020-11-02T13:51:37Z</dc:date>
    </item>
    <item>
      <title>Re: KV31 ADC Calibration</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610578#M36069</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Shawn,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've been referred to this issue. I don't have a good answer right now but will work with Jorge to find it. Meanwhile I wanted to check in with you and ask if you've been running these tests on a your own board or on an eval board like a Tower or Freedom board?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If it is on your own board. Can you try loading up this code to an eval board and see if it behaves similarly? This would be a simple way to figure out if there is any underlying issue with hardware (power sources, clocking, etc.) that is affecting the ADC as we already know the SDK calibration code will work in NXP boards correctly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Eduardo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 20 Mar 2017 16:05:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610578#M36069</guid>
      <dc:creator>eduardo_viramon</dc:creator>
      <dc:date>2017-03-20T16:05:21Z</dc:date>
    </item>
    <item>
      <title>Re: KV31 ADC Calibration</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610579#M36070</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Eduardo,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is our hardware.  I'll work on porting it back to the Freedom board I&lt;/P&gt;&lt;P&gt;have but I'll need to modify the clock system settings to work with it.  I&lt;/P&gt;&lt;P&gt;have some other tasks I'm working in parallel so it may take till Friday.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Shawn&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Shawn M. Mason&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sr. Electrical Engineer&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TCAS Products&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Phone: 321-674-5389&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cell: 321-591-8482&lt;/P&gt;&lt;P&gt;shawn.mason@rockwellcollins.com&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;rockwellcollins.com&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;MS 313-E13&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1100 W. Hibiscus Blvd.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Melbourne, FL 32901, USA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;On Mon, Mar 20, 2017 at 12:06 PM, eduardo_viramontes &amp;lt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Mar 2017 14:07:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610579#M36070</guid>
      <dc:creator>ohiogt</dc:creator>
      <dc:date>2017-03-22T14:07:01Z</dc:date>
    </item>
    <item>
      <title>Re: KV31 ADC Calibration</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610580#M36071</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Shawn Mason&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Attached is initialization part of the application that uses ADC. Use the ADC initialization in&amp;nbsp;void InitADC(void) function. This worked without issues.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;P&gt;Jorge Alcala&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Apr 2017 15:56:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV31-ADC-Calibration/m-p/610580#M36071</guid>
      <dc:creator>jorge_a_vazquez</dc:creator>
      <dc:date>2017-04-07T15:56:41Z</dc:date>
    </item>
  </channel>
</rss>

