<?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: ADC interrupt</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626460#M37576</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Irmantas Budrys,&lt;/P&gt;&lt;P&gt;Please read the "24.4.3 Hardware trigger" of &lt;A href="http://www.nxp.com/assets/documents/data/en/reference-manuals/KEA128RM.pdf"&gt;KEA128RM.pdf&lt;/A&gt;. See below:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="24.4.3 Hardware trigger.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/9171i880C28027DA7C54A/image-size/large?v=v2&amp;amp;px=999" role="button" title="24.4.3 Hardware trigger.png" alt="24.4.3 Hardware trigger.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When hardware trigger is selected, a ADC conversion is initiated following the assertion of the ADHWT input.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ADTRG.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/8968i74B89F472E406B53/image-size/large?v=v2&amp;amp;px=999" role="button" title="ADTRG.png" alt="ADTRG.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And you need selects "PIT channel0 overflow" as the ADC hardware trigger source.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ADHWT SIM_SOPT0.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/9010iDFDAF2F0D369A05E/image-size/large?v=v2&amp;amp;px=999" role="button" title="ADHWT SIM_SOPT0.png" alt="ADHWT SIM_SOPT0.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Robin&lt;/P&gt;&lt;P style="min- padding: 0px;"&gt;&amp;nbsp;&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>Tue, 29 Nov 2016 08:59:15 GMT</pubDate>
    <dc:creator>Robin_Shen</dc:creator>
    <dc:date>2016-11-29T08:59:15Z</dc:date>
    <item>
      <title>ADC interrupt</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626459#M37575</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;SPAN style="color: #51626f; background-color: #ffffff;"&gt;I am using FRDM DEV BRD KEAZ128 and S32. I am writing a code where PIT gives interrupt every 1s and starts ADC conversion. But I am not waiting in while loop for COCO bit to set 1. I am enabling ADC interrupt and doing some simple math in main() in for(;;)&amp;nbsp;loop.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;But the problem is that ADC interrupt does not show up. I know that PIT interrupts works. But I do not understand how to trigger &amp;nbsp;ADC (adc interrupt and start adc conversion) after PIT interrupt. Could you help me here? &amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="background-color: #ffffff; color: #51626f;"&gt;&amp;nbsp;my main loop:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;int main(void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; init_UART();&lt;BR /&gt; ADC_Init(10,2); //ADC_init ( channel,mode)&lt;BR /&gt; Enable_ADC_Interrupt();&lt;BR /&gt; init_pit_0 ();&lt;BR /&gt; init_IRQs();&amp;nbsp;/* Initialize PIT interrupts */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for(;;){&lt;/P&gt;&lt;P&gt;if (ready_flag==1)&lt;BR /&gt; {&lt;BR /&gt; ADC_accumulator+= ADC_Result ; // read ADC value and add total&lt;BR /&gt; dec--; // update decimation counter&lt;BR /&gt; GPIOB_PTOR |= (1&amp;lt;&amp;lt;PTH1);&lt;BR /&gt; ready_flag=0;&lt;/P&gt;&lt;P&gt;if (dec==0)&lt;BR /&gt;{&lt;BR /&gt; dec=16; // reset counter&lt;BR /&gt; My_ADC_Result= ADC_accumulator&amp;gt;&amp;gt;2;// 14bit value&lt;BR /&gt; My_ADC_Result=My_ADC_Result * 5000; // ADC value times 5000mV&lt;BR /&gt; My_ADC_Result=My_ADC_Result&amp;gt;&amp;gt;14; // converts ADC value to mV&lt;BR /&gt; print_adc_value= My_ADC_Result; // writes ADC value to uint16_t variable for printf()&lt;/P&gt;&lt;P&gt;printf("\nADC= %d",print_adc_value ); // print to terminal ADC value in mV&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; ADC_accumulator=0;&lt;BR /&gt; My_ADC_Result=0;&lt;BR /&gt; print_adc_value =0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;}&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;return 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;my PIT.C :&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;/* Initialize PIT to generate interrupt every... */&lt;BR /&gt;void init_pit_0 (void) {&lt;/P&gt;&lt;P&gt;SIM_SCGC |= SIM_SCGC_PIT_MASK; /* enable clock for PIT*/&lt;BR /&gt;PIT_MCR= 0x0; /* Turn on PIT module, Freeze disabled */&lt;BR /&gt;PIT_LDVAL0 |= 2400000 - 1; /*PIT0: Load value to count 24MHz bus clocks */&lt;BR /&gt; /* if bus clock 24MHz it is equal to 1s */&lt;BR /&gt;//PIT_LDVAL0 |= 750 - 1; /* for 32kHz sampling freq = 32.25us */&lt;/P&gt;&lt;P&gt;PIT_TCTRL0 |= PIT_TCTRL_TIE_MASK ; /* Enable interrupt */&lt;BR /&gt;PIT_TCTRL0 |= PIT_TCTRL_TEN_MASK; /* PIT0: Start timer */&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;/* Initialize PIT interrupts */&lt;BR /&gt;void init_IRQs (void) {&lt;/P&gt;&lt;P&gt;NVIC_ClearPendingIRQ(PIT_CH0_IRQn); /* Clear any Pending IRQ for PIT (#22) */&lt;BR /&gt;NVIC_EnableIRQ(PIT_CH0_IRQn); /* Set Enable IRQ for PIT */&lt;BR /&gt;NVIC_SetPriority(PIT_CH0_IRQn,0); /* Set Priority for PIT */&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;/* Initialize PIT interrupt handler */&lt;BR /&gt;void PIT_CH0_IRQHandler (void) {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PIT_TFLG0 |= PIT_TFLG_TIF_MASK ; /* Clear PIT0 clear flag/acknowledge */&lt;BR /&gt; //ADC_Result = ADC_R;&lt;BR /&gt; //ADC_Result= ADC_Read(10);&lt;BR /&gt; //ready_flag=1; //ready flag&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;my ADC.C&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void ADC_Init (uint8_t channel, uint8_t mode){&lt;/P&gt;&lt;P&gt;SIM_SCGC |=SIM_SCGC_ADC_MASK ; /* Enable bus clock for ADC */&lt;/P&gt;&lt;P&gt;ADC_SC3 |= ADC_SC3_ADICLK(0b00); /* Bus clock selected */&lt;/P&gt;&lt;P&gt;ADC_SC2 |= 0x00; /* Software Conversion trigger, disable compare function*/&lt;BR /&gt;ADC_SC1 = 0 ;&lt;BR /&gt; ADC_SC1|= ADC_SC1_AIEN_MASK; /*Conversion complete interrupt enabled */&lt;BR /&gt;ADC_SC1 &amp;amp;= ~ADC_SC1_ADCH_MASK; /* Clear any prior ADCH bits*/&lt;BR /&gt; ADC_APCTL1 |= ADC_APCTL1_ADPC(1&amp;lt;&amp;lt;channel); /* Channel selection */&lt;BR /&gt; ADC_SC3 = ADC_SC3_MODE(mode); /* Select 0-8bit,1-10bit,2-12 bit mode operation */&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint16_t ADC_Read(uint8_t channel)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;ADC_SC1 |= ADC_SC1_ADCH(channel); /* Select channel to read */&lt;BR /&gt; while(!(ADC_SC1 &amp;amp; ADC_SC1_COCO_MASK)); /* Wait conversion to complete */&lt;BR /&gt; return ADC_R; /* Return ADC value */&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;/* Initialize ADC interrupts when conversion finished */&lt;BR /&gt;void Enable_ADC_Interrupt(void) {&lt;/P&gt;&lt;P&gt;NVIC_ClearPendingIRQ( ADC_IRQn ); /* Clear any Pending IRQ for ADC (#15) */&lt;BR /&gt; NVIC_EnableIRQ( ADC_IRQn ); /* Set Enable IRQ for ADC */&lt;BR /&gt; NVIC_SetPriority( ADC_IRQn ,0); /* Set Priority for ADC */&lt;/P&gt;&lt;P&gt;ADC_SC1 |=ADC_SC1_AIEN_MASK; /*Conversion complete interrupt enabled */&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;void ADC_IRQHandler (void) {&lt;BR /&gt; ADC_Result = ADC_Read(10);&lt;BR /&gt; ready_flag=1; //ready flag&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Nov 2016 12:13:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626459#M37575</guid>
      <dc:creator>irmantasbudrys</dc:creator>
      <dc:date>2016-11-28T12:13:01Z</dc:date>
    </item>
    <item>
      <title>Re: ADC interrupt</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626460#M37576</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Irmantas Budrys,&lt;/P&gt;&lt;P&gt;Please read the "24.4.3 Hardware trigger" of &lt;A href="http://www.nxp.com/assets/documents/data/en/reference-manuals/KEA128RM.pdf"&gt;KEA128RM.pdf&lt;/A&gt;. See below:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="24.4.3 Hardware trigger.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/9171i880C28027DA7C54A/image-size/large?v=v2&amp;amp;px=999" role="button" title="24.4.3 Hardware trigger.png" alt="24.4.3 Hardware trigger.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When hardware trigger is selected, a ADC conversion is initiated following the assertion of the ADHWT input.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ADTRG.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/8968i74B89F472E406B53/image-size/large?v=v2&amp;amp;px=999" role="button" title="ADTRG.png" alt="ADTRG.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And you need selects "PIT channel0 overflow" as the ADC hardware trigger source.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ADHWT SIM_SOPT0.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/9010iDFDAF2F0D369A05E/image-size/large?v=v2&amp;amp;px=999" role="button" title="ADHWT SIM_SOPT0.png" alt="ADHWT SIM_SOPT0.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Robin&lt;/P&gt;&lt;P style="min- padding: 0px;"&gt;&amp;nbsp;&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>Tue, 29 Nov 2016 08:59:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626460#M37576</guid>
      <dc:creator>Robin_Shen</dc:creator>
      <dc:date>2016-11-29T08:59:15Z</dc:date>
    </item>
    <item>
      <title>Re: ADC interrupt</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626461#M37577</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Robin,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for your answer, it is really helpful. But I think it answers only half of my question.&lt;/P&gt;&lt;P&gt;When ADC is triggered&amp;nbsp;conversation takes around 4us. So instead waiting in while() loop (function &lt;STRONG&gt;ADC_Read()&lt;/STRONG&gt; below)&amp;nbsp;until conversation is completed I would&amp;nbsp;like to do something useful in my&amp;nbsp; main()&amp;nbsp; function.&lt;/P&gt;&lt;P&gt;You explained me how to trigger ADC, but I still do not understand how to read ADC value&amp;nbsp;after ADC interrupt occurred?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;uint16_t ADC_Read(uint8_t channel)&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;ADC_SC1 |= ADC_SC1_ADCH(channel); /* Select channel to read */&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; while(!(ADC_SC1 &amp;amp; ADC_SC1_COCO_MASK)); /* Wait conversion to complete */&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; return ADC_R; /* Return ADC value */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;IB&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Nov 2016 11:54:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626461#M37577</guid>
      <dc:creator>irmantasbudrys</dc:creator>
      <dc:date>2016-11-29T11:54:12Z</dc:date>
    </item>
    <item>
      <title>Re: ADC interrupt</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626462#M37578</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 ADC_Read function seems to be used for polling mode of ADC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The ADCH bits in ADC_SC1 register can be used to change ADC channel.&lt;/P&gt;&lt;P&gt;If you don't need to change ADC channel, the ADCH bits can be set in ADC_Init function.&lt;/P&gt;&lt;P&gt;If you need to change ADC channel, please refer the function below:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ADC_SetChannel.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/9052iF34B2F13EA69B95A/image-size/large?v=v2&amp;amp;px=999" role="button" title="ADC_SetChannel.png" alt="ADC_SetChannel.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The PIT channel0 overflow will trigger ADC module start sample the signal of that channel.&lt;/P&gt;&lt;P&gt;So you can direct read the ADC_R in your ADC(Conversion Complete) interrupt function. See below:&lt;/P&gt;&lt;P&gt;void ADC_IRQHandler (void) {&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;ADC_Result = ADC_R;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;ready_flag=1;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Robin&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Nov 2016 02:44:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/ADC-interrupt/m-p/626462#M37578</guid>
      <dc:creator>Robin_Shen</dc:creator>
      <dc:date>2016-11-30T02:44:07Z</dc:date>
    </item>
  </channel>
</rss>

