<?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 56F8323 ADC Conversion triggered on interrupt in Other NXP Products</title>
    <link>https://community.nxp.com/t5/Other-NXP-Products/56F8323-ADC-Conversion-triggered-on-interrupt/m-p/284934#M2909</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all. I'm working with a 56F8323 DSP and I'm using Freescale CodeWarrior 5.9.0. I'm making full use of ADC and timer beans.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm having a problem where I can't seem to initiate an ADC conversion while in interrupt context. Application is basic, just running a timer which will interrupt every 10ms. In that interrupt routine, I want to start an ADC conversion and get the results before returning from the interrupt.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What seems to happen instead is that I get stuck in an infinite loop which checks for a flag that is never reset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;byte thermistorADC_Measure(bool WaitForResult)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if (thermistorADC_ModeFlg != IDLE) { /* Is the device in running mode? */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERR_BUSY;&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; /* If yes then error */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; thermistorADC_ModeFlg = MEASURE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set state of device to the measure mode */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; HWEnDi();&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; /* Enable the device */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if (WaitForResult) {&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; /* Is WaitForResult TRUE? */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (thermistorADC_ModeFlg == MEASURE) {} /* If yes then wait for end of measurement */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; return ERR_OK;&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; /* OK */&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;

&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Execution is stuck in that while loop. What I'd like to know is: why do ADC measurements fail to complete in interrupt context and is there a way around this other than setting a flag in the interrupt to be processed some time later?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 10 Jun 2013 20:01:04 GMT</pubDate>
    <dc:creator>mattkrolick</dc:creator>
    <dc:date>2013-06-10T20:01:04Z</dc:date>
    <item>
      <title>56F8323 ADC Conversion triggered on interrupt</title>
      <link>https://community.nxp.com/t5/Other-NXP-Products/56F8323-ADC-Conversion-triggered-on-interrupt/m-p/284934#M2909</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all. I'm working with a 56F8323 DSP and I'm using Freescale CodeWarrior 5.9.0. I'm making full use of ADC and timer beans.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm having a problem where I can't seem to initiate an ADC conversion while in interrupt context. Application is basic, just running a timer which will interrupt every 10ms. In that interrupt routine, I want to start an ADC conversion and get the results before returning from the interrupt.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What seems to happen instead is that I get stuck in an infinite loop which checks for a flag that is never reset.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;byte thermistorADC_Measure(bool WaitForResult)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if (thermistorADC_ModeFlg != IDLE) { /* Is the device in running mode? */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ERR_BUSY;&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; /* If yes then error */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; thermistorADC_ModeFlg = MEASURE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set state of device to the measure mode */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; HWEnDi();&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; /* Enable the device */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if (WaitForResult) {&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; /* Is WaitForResult TRUE? */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (thermistorADC_ModeFlg == MEASURE) {} /* If yes then wait for end of measurement */&lt;/P&gt;
&lt;P&gt;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp; return ERR_OK;&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; /* OK */&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;

&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Execution is stuck in that while loop. What I'd like to know is: why do ADC measurements fail to complete in interrupt context and is there a way around this other than setting a flag in the interrupt to be processed some time later?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 10 Jun 2013 20:01:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Other-NXP-Products/56F8323-ADC-Conversion-triggered-on-interrupt/m-p/284934#M2909</guid>
      <dc:creator>mattkrolick</dc:creator>
      <dc:date>2013-06-10T20:01:04Z</dc:date>
    </item>
    <item>
      <title>Re: 56F8323 ADC Conversion triggered on interrupt</title>
      <link>https://community.nxp.com/t5/Other-NXP-Products/56F8323-ADC-Conversion-triggered-on-interrupt/m-p/284935#M2910</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Firstly, in the ADC bean, you should enable the ADC interrupt by selecting "Enable" in "Interrupt service/event" box, secondly, pls use the following code in the Events.c.&lt;/P&gt;&lt;P&gt;using the following code, I can enter the void AD1_OnEnd(void) function if I set a break point at asm(nop); line base on CW for DSP56800/E ver8.3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */&lt;BR /&gt;&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; /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;void AD1_OnEnd(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; /* Write your code here ... */&lt;BR /&gt;&amp;nbsp; AD1_GetValue16(sample);&lt;BR /&gt; asm(nop);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;** ===================================================================&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Event&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp; TI1_OnInterrupt (module Events)&lt;BR /&gt;**&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Component&amp;nbsp;&amp;nbsp; :&amp;nbsp; TI1 [TimerInt]&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description :&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When a timer interrupt occurs this event is called (only&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when the component is enabled - &amp;lt;Enable&amp;gt; and the events are&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enabled - &amp;lt;EnableEvent&amp;gt;). This event is enabled only if a&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;interrupt service/event&amp;gt; is enabled.&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parameters&amp;nbsp; : None&lt;BR /&gt;**&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Returns&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Nothing&lt;BR /&gt;** ===================================================================&lt;BR /&gt;*/&lt;BR /&gt;#pragma interrupt called /* Comment this line if the appropriate 'Interrupt preserve registers' property */&lt;BR /&gt;&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; /* is set to 'yes' (#pragma interrupt saveall is generated before the ISR)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;void TI1_OnInterrupt(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; /* Write your code here ... */&lt;BR /&gt;&amp;nbsp; AD1_Measure(FALSE);&lt;BR /&gt;&amp;nbsp; asm(nop);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 17 Jun 2013 09:06:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Other-NXP-Products/56F8323-ADC-Conversion-triggered-on-interrupt/m-p/284935#M2910</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2013-06-17T09:06:54Z</dc:date>
    </item>
  </channel>
</rss>

