<?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>MQX Software SolutionsのトピックRe: ADC driver task safety</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240113#M6760</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehmet,&lt;/P&gt;&lt;P&gt;Thank you for all the information.&amp;nbsp; It is helpful.&lt;/P&gt;&lt;P&gt;Testing without debugger when doing ADC with hardware trigger is recommended.&lt;/P&gt;&lt;P&gt;So it is the lwevent defined in the MQX ADC "&lt;SPAN style="color: #005032; font-size: 10pt;"&gt;ADC_INIT_CHANNEL_STRUCT&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt;"&gt; adc_channel_param1&lt;/SPAN&gt;" that you are looking at.&amp;nbsp; Correct?&lt;/P&gt;&lt;P&gt;#if MQX_USE_LWEVENTS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;evn,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* mask of event to be set */&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;One other observation:&amp;nbsp; The TWR-K60N512 has revision 1.0 silicon.&amp;nbsp; The PK60DN512VLQ10 device you have is revision 2.0 silicon and corresponds to the TWR-K60D100M MQX RTOS components.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 26 Mar 2013 14:48:06 GMT</pubDate>
    <dc:creator>DavidS</dc:creator>
    <dc:date>2013-03-26T14:48:06Z</dc:date>
    <item>
      <title>ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240108#M6755</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;Is ADC driver in MQX thread safe ? I mean if can we open adc0 from a task and adc1 from another task ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Mar 2013 19:31:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240108#M6755</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-25T19:31:55Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240109#M6756</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehmet,&lt;/P&gt;&lt;P&gt;Yes you can do that.&amp;nbsp; It is thread safe.&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Mar 2013 13:25:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240109#M6756</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-26T13:25:41Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240110#M6757</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;I have been experimenting with it but there is a problem with it. I am registering lwevent object from each process, the recently registered event gets triggered but the other one is not triggered to indicate the completion of the convertion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mehmet&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Mar 2013 13:50:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240110#M6757</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-26T13:50:49Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240111#M6758</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehmet,&lt;/P&gt;&lt;P&gt;What version of MQX are you using?&lt;/P&gt;&lt;P&gt;Which device?&lt;/P&gt;&lt;P&gt;Are you doing this on a Tower kit or your product?&lt;/P&gt;&lt;P&gt;Are the lwevent objects globally defined?&lt;/P&gt;&lt;P&gt;Are you setting the lwevent in the ADC isr?&lt;/P&gt;&lt;P&gt;How are the ADC's being triggered?&lt;/P&gt;&lt;P&gt;Are you using debugger for this test?&amp;nbsp; If yes I have seen where the ADC trigger gets lost because of using debugger.&lt;/P&gt;&lt;P&gt;Any additional information on your application implementations is appreciated.&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Mar 2013 14:02:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240111#M6758</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-26T14:02:54Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240112#M6759</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;MQX4.0&amp;nbsp; on&amp;nbsp; PK60DN512VLQ10&lt;/P&gt;&lt;P&gt;We are testing on a custom board based on TWRK60N512.&lt;/P&gt;&lt;P&gt;Yes, lwevents are defined globally.&lt;/P&gt;&lt;P&gt;I am not setting the lwevent objects. Actually I expect it to be triggered by driver as it triggers one of the event objects.&lt;/P&gt;&lt;P&gt;ADCs are hardware triggered.&lt;/P&gt;&lt;P&gt;Yes , I am using debugger for the test.&amp;nbsp; I might try it without debugger that requires some time to code a test. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Our application is a welding control card. We measure line voltage with one ADC and&amp;nbsp; trigger a thyristor using PWM funtionality at a specified angle of line voltage and measure current using another ADC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Mar 2013 14:21:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240112#M6759</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-26T14:21:03Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240113#M6760</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehmet,&lt;/P&gt;&lt;P&gt;Thank you for all the information.&amp;nbsp; It is helpful.&lt;/P&gt;&lt;P&gt;Testing without debugger when doing ADC with hardware trigger is recommended.&lt;/P&gt;&lt;P&gt;So it is the lwevent defined in the MQX ADC "&lt;SPAN style="color: #005032; font-size: 10pt;"&gt;ADC_INIT_CHANNEL_STRUCT&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt;"&gt; adc_channel_param1&lt;/SPAN&gt;" that you are looking at.&amp;nbsp; Correct?&lt;/P&gt;&lt;P&gt;#if MQX_USE_LWEVENTS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;evn,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* mask of event to be set */&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;One other observation:&amp;nbsp; The TWR-K60N512 has revision 1.0 silicon.&amp;nbsp; The PK60DN512VLQ10 device you have is revision 2.0 silicon and corresponds to the TWR-K60D100M MQX RTOS components.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Mar 2013 14:48:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240113#M6760</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-26T14:48:06Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240114#M6761</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Yes , you are right we are registering event object per ADC. Two different evn objects are registered like the one you shown. I think the driver is able to only trig one event per driver. I would expect it to do it per channel. &lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Bye the way I tried to use &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 12.727272033691406px; background-color: #ffffff;"&gt;TWR-K60D100M&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt; bsp as my base bsp but I am having strange issue: printed messages are not printed on the console even though I enabled uart0 and choos ttya as default IO channel. this works when we take&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 12.727272033691406px; background-color: #ffffff;"&gt;TWRK60N512&lt;/SPAN&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&amp;nbsp; as base bsp. You might help us to quickly solve the issue.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Mehmet &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Mar 2013 10:33:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240114#M6761</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-27T10:33:42Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240115#M6762</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehmet,&lt;/P&gt;&lt;P&gt;WRT the TWR-K60D100M, I have that and have successfully used the serial ports ttyd and ttyf but not ttya since it is not directly accessible on the tower kit.&lt;/P&gt;&lt;P&gt;Please check the following:&lt;/P&gt;&lt;P&gt;In user_config.h&amp;nbsp; set #define BSPCFG_ENABLE_TTYA 1&amp;nbsp;&amp;nbsp; //DES default is 0&lt;/P&gt;&lt;P&gt;For the other BSPCFG_ENABLE_TTYx devices if you are not going to use them set to "0".&lt;/P&gt;&lt;P&gt;In twrk60d100m.h:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="ScreenHunter_13 Mar. 27 12.53.gif"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/39086i9F958C057988B449/image-size/large?v=v2&amp;amp;px=999" role="button" title="ScreenHunter_13 Mar. 27 12.53.gif" alt="ScreenHunter_13 Mar. 27 12.53.gif" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Mar 2013 17:50:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240115#M6762</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-27T17:50:35Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240116#M6763</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;I have been working on the issue I have come to the conclusion of adc stops after PDB sequencing error occurs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;"Sequence error detected on PDB channel's corresponding pre-trigger. ADCn block can be triggered&lt;/P&gt;&lt;P&gt;for a conversion by one pre-trigger from PDB channel n. When one conversion, which is triggered by&lt;/P&gt;&lt;P&gt;one of the pre-triggers from PDB channel n, is in progress, new trigger from PDB channel's&lt;/P&gt;&lt;P&gt;corresponding pre-trigger m cannot be accepted by ADCn, and ERR[m] is set. Writing 0’s to clear the&lt;/P&gt;&lt;P&gt;sequence error flags."&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Documentation doesn't tell what will happen if sequencing error occurs. I don't understand why it stops I would expect the ADC to continueu its operation after next trigger arrives.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope you can clear what documentation does not .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mehmet&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;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Mar 2013 19:06:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240116#M6763</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-28T19:06:16Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240117#M6764</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;I searched the forum&amp;nbsp; there are some other people face the same problem as I do. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/message/317694"&gt;Re: K60 PDB problem with error clearing.&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can you tell us if there is a way detecting and recovering way when the problem occures ?&lt;/P&gt;&lt;P&gt;Is it possible to reach the fellow wrote the adc driver ? He can give us some deeper understanding.&lt;/P&gt;&lt;P&gt;regards,&lt;/P&gt;&lt;P&gt;Mehmet &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Mar 2013 08:59:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240117#M6764</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-29T08:59:01Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240118#M6765</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehet,&lt;/P&gt;&lt;P&gt;Please check the following setting:&lt;/P&gt;&lt;P&gt;Sequence error is typically happened because the delay m is set too short and the pre-trigger m asserts before the previous triggered ADC conversion is completed.&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Mar 2013 18:56:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240118#M6765</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-29T18:56:34Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240119#M6766</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 have did a test as follows. I run&amp;nbsp; ADC0 with&amp;nbsp; a config runs without any problem when configured to run alone. I run ADC1 as well alone with a configuration.&amp;nbsp; When I configured them to run together one of them does not run.&lt;/P&gt;&lt;P&gt;I think there might be an errata with pdb. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can freescale supply us a test suite? I can use it to prove K60 ADCs can be used at the same time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pdbConfig.jpg"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/39108i6A421FCD1A6FB006/image-size/large?v=v2&amp;amp;px=999" role="button" title="pdbConfig.jpg" alt="pdbConfig.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Mar 2013 20:11:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240119#M6766</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-03-29T20:11:10Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240120#M6767</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehmet,&lt;/P&gt;&lt;P&gt;Two suggestions:&lt;/P&gt;&lt;P&gt;1- post your example code for the Community to help with&lt;/P&gt;&lt;P&gt;2- Review the many &lt;A href="http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=K60_100&amp;amp;tab=Documentation_Tab&amp;amp;pspll=1&amp;amp;SelectedAsset=Documentation&amp;amp;ProdMetaId=PID/DC/K60_100&amp;amp;fromPSP=true&amp;amp;assetLockedForNavigation=true&amp;amp;componentId=2&amp;amp;leftNavCode=1&amp;amp;pageSize=25&amp;amp;Documentation=Documentation/00210KscRcb``Application Notes&amp;amp;fpsp=1&amp;amp;linkline=Application Notes"&gt;Application Notes&lt;/A&gt;. Some have code too.&lt;/P&gt;&lt;P&gt;I recommend the following:&lt;/P&gt;&lt;P&gt;AN4410 - FlexTimer and ADC Synchronization for Field Oriented Control on Kinetis&lt;/P&gt;&lt;P&gt;&lt;SPAN class="resultofText"&gt;&lt;SPAN class="resultofText"&gt;AN4407 -&lt;/SPAN&gt; Dual Motor Control for PMSM with the Kinetis K70 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also the &lt;A href="http://www.freescale.com/files/32bit/doc/quick_ref_guide/KQRUG.pdf"&gt;KQRUG.pdf &lt;/A&gt;Chapter 19 Using Peripheral Delay Block (PDB) to Schedule Analog to Digital Converter (ADC) Conversions&lt;/P&gt;&lt;P&gt;Sorry for the trouble.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Mar 2013 20:58:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240120#M6767</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-03-29T20:58:30Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240121#M6768</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 have gone through the examples mentioned. When a squence error happens it does not recover by clearing the error bit. ADC or PDB does not work I can not identify which one. You can also test it using the adc_demo in KINETIS512_SC. You just need to generate squencing error. An easy way to generate squencing error is to break point while running under JTAG and continueu after a while.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyway here is the code I am using. The following code measures voltage and current of a 50 hz power line. I is based on 3 phase meter project supplied by freescale.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_13651869203715588" jivemacro_uid="_13651869203715588"&gt;
&lt;P&gt;/**HEADER********************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;* $FileName: LVDTask.h$&lt;/P&gt;
&lt;P&gt;* $Version : $&lt;/P&gt;
&lt;P&gt;* $Date&amp;nbsp;&amp;nbsp;&amp;nbsp; : 03 02 2013$&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Comments:&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END************************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#ifndef __LVDTask_H__&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define __LVDTask_H__&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;**&amp;nbsp; Define line frequency which can be 50 or 60 Hz&lt;/P&gt;
&lt;P&gt;*/&lt;/P&gt;
&lt;P&gt;#define LINE_FREQUENCY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (50)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;**&amp;nbsp; Define number of samples per line period&lt;/P&gt;
&lt;P&gt;**&amp;nbsp; It affects the size of buffers used for sampling&lt;/P&gt;
&lt;P&gt;**&amp;nbsp; The valid values are 32, 64, 128&lt;/P&gt;
&lt;P&gt;*/&lt;/P&gt;
&lt;P&gt;#define SAMPLES_PER_PERIOD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (32)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;* Number of RMS calculations to be remembered&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*/&lt;/P&gt;
&lt;P&gt;#define MAX_RMS_HISTORY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (12)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#define ADC_REF_VOLTAGE (3.3f)&lt;/P&gt;
&lt;P&gt;#define ADC_BITS_PER_SAMPLE (65535)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Allocate ADC sample buffers */&lt;/P&gt;
&lt;P&gt;#define SAMPLE_BUFFER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SAMPLES_PER_PERIOD + 256)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Sampling period in microseconds */&lt;/P&gt;
&lt;P&gt;#define ADC_SAMPLING_PERIOD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1000000 / (LINE_FREQUENCY) / (SAMPLES_PER_PERIOD))&lt;/P&gt;
&lt;P&gt;#define ADC_IDELAY&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; (ADC_SAMPLING_PERIOD - 20)&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;#define ADC_HARDWARE_AVERAGING&amp;nbsp; (0)&lt;/P&gt;
&lt;P&gt;#define ADC_LONG_SAMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2)&lt;/P&gt;
&lt;P&gt;#define ADC_RESULT_RANGE_SCALE&amp;nbsp; 0xFFFF&amp;nbsp; /* not implemented in ADC driver */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Delay voltage sampling from trigger point in microseconds */&lt;/P&gt;
&lt;P&gt;#define ADC_VOLTAGE_DELAY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (0)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#define ADC_CURRENT_DELAY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (ADC_SAMPLING_PERIOD /5)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* LWEVENT masks for meter_shared_event */&lt;/P&gt;
&lt;P&gt;#define ADC_DATA_READY_MASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1 &amp;lt;&amp;lt; 0)&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern LWEVENT_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LVDEvent;&lt;/P&gt;
&lt;P&gt;extern LWEVENT_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrEvent;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Buffers used for calculation */&lt;/P&gt;
&lt;P&gt;extern ADC_RESULT_STRUCT&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; LVDBuff[SAMPLES_PER_PERIOD];&lt;/P&gt;
&lt;P&gt;extern ADC_RESULT_STRUCT&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; CurrBuff[SAMPLES_PER_PERIOD];&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;* Global functions&lt;/P&gt;
&lt;P&gt;*/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;extern void adc_task (uint_32 initial_data);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#endif /* __LVDTask_H__ */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/**HEADER********************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Copyright (c) 2008-2009 Freescale Semiconductor;&lt;/P&gt;
&lt;P&gt;* All Rights Reserved&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; &lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;***************************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR&lt;/P&gt;
&lt;P&gt;* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;/P&gt;
&lt;P&gt;* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. &lt;/P&gt;
&lt;P&gt;* IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,&lt;/P&gt;
&lt;P&gt;* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES&lt;/P&gt;
&lt;P&gt;* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR&lt;/P&gt;
&lt;P&gt;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)&lt;/P&gt;
&lt;P&gt;* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,&lt;/P&gt;
&lt;P&gt;* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING&lt;/P&gt;
&lt;P&gt;* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF&lt;/P&gt;
&lt;P&gt;* THE POSSIBILITY OF SUCH DAMAGE.&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;**************************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* $FileName: adc_task.c$&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Comments:&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*&amp;nbsp;&amp;nbsp; This file contains the source for the ADC example program.&lt;/P&gt;
&lt;P&gt;*&amp;nbsp;&amp;nbsp; Two channels are running, one is running in loop, the second one&lt;/P&gt;
&lt;P&gt;*&amp;nbsp;&amp;nbsp; only once.&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END************************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;mqx.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;bsp.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;string.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;time.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;math.h&amp;gt;&lt;/P&gt;
&lt;P&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#include "LVDTask.h"&lt;/P&gt;
&lt;P&gt;#include "RMSCalculations.h"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#if ! BSPCFG_ENABLE_IO_SUBSYSTEM&lt;/P&gt;
&lt;P&gt;#error This application requires BSPCFG_ENABLE_IO_SUBSYSTEM defined non-zero in user_config.h. Please recompile BSP with this option.&lt;/P&gt;
&lt;P&gt;#endif&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;#ifndef BSP_DEFAULT_IO_CHANNEL_DEFINED&lt;/P&gt;
&lt;P&gt;#error This application requires BSP_DEFAULT_IO_CHANNEL to be not NULL. Please set corresponding BSPCFG_ENABLE_TTYx to non-zero in user_config.h and recompile BSP with this option.&lt;/P&gt;
&lt;P&gt;#endif&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Function prototypes */&lt;/P&gt;
&lt;P&gt;extern void process_calculation(void);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_init(void);&lt;/P&gt;
&lt;P&gt;static void adc_init_redo(void);&lt;/P&gt;
&lt;P&gt;static _mqx_int adc_calibrate(void);&lt;/P&gt;
&lt;P&gt;static _mqx_int adc_save_calibration_data(void);&lt;/P&gt;
&lt;P&gt;static _mqx_int adc_restore_calibration_data(void);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_channel_init(void);&lt;/P&gt;
&lt;P&gt;static void adc_start_measuring(void);&lt;/P&gt;
&lt;P&gt;static void adc_idelay_callback(void);&lt;/P&gt;
&lt;P&gt;static void adc_error_callback(void);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_init(void);&lt;/P&gt;
&lt;P&gt;static void curr_adc_init_redo(void);&lt;/P&gt;
&lt;P&gt;static _mqx_int curr_adc_calibrate(void);&lt;/P&gt;
&lt;P&gt;static _mqx_int curr_adc_save_calibration_data(void);&lt;/P&gt;
&lt;P&gt;static _mqx_int curr_adc_restore_calibration_data(void);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_channel_init(void);&lt;/P&gt;
&lt;P&gt;static void curr_adc_start_measuring(void);&lt;/P&gt;
&lt;P&gt;static void curr_adc_idelay_callback(void);&lt;/P&gt;
&lt;P&gt;static void curr_adc_error_callback(void);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* ADC device init struct string definitions */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;const ADC_INIT_STRUCT adc_init_param = {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; ADC_RESOLUTION_16BIT,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* resolution */&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;** Line voltage - logical channel init structures&lt;/P&gt;
&lt;P&gt;*/&lt;/P&gt;
&lt;P&gt;#define LVD_ADC_STR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "adc1:"&lt;/P&gt;
&lt;P&gt;#define LVD_ADC_CHNLSTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "adc1:LVD"&lt;/P&gt;
&lt;P&gt;#define CURR_ADC_STR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "adc0:"&lt;/P&gt;
&lt;P&gt;#define CURR_ADC_CHNLSTR&amp;nbsp;&amp;nbsp;&amp;nbsp; "adc0:Curr"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;const ADC_INIT_CHANNEL_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LVDChannelParam =&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;/* physical ADC channel&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; */ ADC1_SOURCE_AD3,&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* runs continuously after PDB trigger&amp;nbsp;&amp;nbsp; */ (ADC_CHANNEL_MEASURE_LOOP | ADC_CHANNEL_START_TRIGGERED),&lt;/P&gt;
&lt;P&gt;/* number of samples in one run sequence */ SAMPLES_PER_PERIOD,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* time offset from trigger point in us&amp;nbsp; */ ADC_VOLTAGE_DELAY,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* period in us&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; */ ADC_SAMPLING_PERIOD,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* scale range of result (not used now)&amp;nbsp; */ ADC_RESULT_RANGE_SCALE,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* circular buffer size (sample count)&amp;nbsp;&amp;nbsp; */ SAMPLE_BUFFER,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* adc trigger&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; */ ADC_PDB_TRIGGER,&lt;/P&gt;
&lt;P&gt;/* lwevent object&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;amp;LVDEvent,&lt;/P&gt;
&lt;P&gt;/* lwevent 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; */ ADC_DATA_READY_MASK,&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;const ADC_INIT_CHANNEL_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrChannelParam =&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;/* physical ADC channel&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; */ ADC0_SOURCE_AD3,&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* runs continuously after PDB trigger&amp;nbsp;&amp;nbsp; */ (ADC_CHANNEL_MEASURE_LOOP | ADC_CHANNEL_START_TRIGGERED),&lt;/P&gt;
&lt;P&gt;/* number of samples in one run sequence */ SAMPLES_PER_PERIOD,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* time offset from trigger point in us&amp;nbsp; */ ADC_CURRENT_DELAY,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* period in us&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; */ ADC_SAMPLING_PERIOD,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* scale range of result (not used now)&amp;nbsp; */ ADC_RESULT_RANGE_SCALE,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* circular buffer size (sample count)&amp;nbsp;&amp;nbsp; */ SAMPLE_BUFFER,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;/* adc trigger&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; */ ADC_PDB_TRIGGER,&lt;/P&gt;
&lt;P&gt;/* lwevent object&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;amp;CurrEvent,&lt;/P&gt;
&lt;P&gt;/* lwevent 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; */ ADC_DATA_READY_MASK,&lt;/P&gt;
&lt;P&gt;};&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* ADC file pointers */&lt;/P&gt;
&lt;P&gt;MQX_FILE_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fLVD;&amp;nbsp;&amp;nbsp; /* File for line voltage detect ADC */&lt;/P&gt;
&lt;P&gt;MQX_FILE_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCurr;&amp;nbsp; /* File for line voltage detect ADC */&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Calculation buffer */&lt;/P&gt;
&lt;P&gt;ADC_RESULT_STRUCT&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; LVDBuff[SAMPLES_PER_PERIOD];&lt;/P&gt;
&lt;P&gt;ADC_RESULT_STRUCT&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; CurrBuff[SAMPLES_PER_PERIOD];&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;* history of RMS values of line voltage&lt;/P&gt;
&lt;P&gt;* These buffers keep recent RMS values of the cycles&lt;/P&gt;
&lt;P&gt;* */&lt;/P&gt;
&lt;P&gt;uint_16 RMSLVDHistory[MAX_RMS_HISTORY];&lt;/P&gt;
&lt;P&gt;uint_16 RMSCurrHistory[MAX_RMS_HISTORY];&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Number of ADC results read in a cycle */&lt;/P&gt;
&lt;P&gt;uint_32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LVDReadNum;&lt;/P&gt;
&lt;P&gt;/* Number of ADC results read in a cycle */&lt;/P&gt;
&lt;P&gt;uint_32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrReadNum;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Event structure used between process and ADC driver to signal a period completion */&lt;/P&gt;
&lt;P&gt;LWEVENT_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LVDEvent;&lt;/P&gt;
&lt;P&gt;LWEVENT_STRUCT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrEvent;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/* Global variables */&lt;/P&gt;
&lt;P&gt;/* This lwsem is trigger on zero crossing of LVD */&lt;/P&gt;
&lt;P&gt;LWSEM_STRUCT ZClwsem;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;float voltagePerBit =&amp;nbsp; ADC_REF_VOLTAGE / ADC_BITS_PER_SAMPLE;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;char floatPrintBuf[256];&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*ISR*-----------------------------------------------------&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Task Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : int_service_routine&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : This interrupt service called on zero&lt;/P&gt;
&lt;P&gt;* crossing of line voltage&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*-----------------------------------------------------*/&lt;/P&gt;
&lt;P&gt;void ZC_int_service_routine(void *pin)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwgpio_int_clear_flag((LWGPIO_STRUCT_PTR) pin);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwsem_post(&amp;amp;ZClwsem);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*TASK******************************************************&lt;/P&gt;
&lt;P&gt;**&lt;/P&gt;
&lt;P&gt;** Task Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_task&lt;/P&gt;
&lt;P&gt;** Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;**&lt;/P&gt;
&lt;P&gt;*END*******************************************************/&lt;/P&gt;
&lt;P&gt;&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 adc_task&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; (&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint_32 initial_data&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int tdiff;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean overflow = FALSE;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_TICK_STRUCT ticks;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_TICK_STRUCT dticks;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWGPIO_STRUCT led1, led2, led3, btn1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_TICK_STRUCT&amp;nbsp; time1, time2, diff;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LWGPIO_STRUCT zcpzt, zcneg;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_uint counter = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int usecs;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; boolean overlap;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_uint result;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float rmsVoltage;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float rmsCurrent;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("\n\n*****************************\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("ADC task is running\n");&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* opening pins for input */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!lwgpio_init(&amp;amp;zcpzt, LVD_ZEROCROSS_TO_PZT, LWGPIO_DIR_INPUT, LWGPIO_VALUE_NOCHANGE))&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; printf("Initializing button GPIO as input failed.\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwgpio_set_functionality(&amp;amp;zcpzt, BSP_ZCPZT_MUX_GPIO);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwgpio_set_attribute(&amp;amp;zcpzt, LWGPIO_ATTR_OPEN_DRAIN, LWGPIO_AVAL_ENABLE);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable gpio functionality for given pin, react on falling edge */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!lwgpio_int_init(&amp;amp;zcpzt, LWGPIO_INT_MODE_RISING))&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; printf("Initializing button GPIO for interrupt failed.\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&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; /* install gpio interrupt service routine */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _int_install_isr(lwgpio_int_get_vector(&amp;amp;zcpzt), ZC_int_service_routine, (void *) &amp;amp;zcpzt);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set the interrupt level, and unmask the interrupt in interrupt controller*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bsp_int_init(lwgpio_int_get_vector(&amp;amp;zcpzt), 3, 0, TRUE);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable interrupt on GPIO peripheral module*/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_init();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curr_adc_init();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Calibrate ADC devices used in 3-phase meter */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Calibrating ADC devices... ");&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; if (MQX_OK == adc_calibrate())&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("done\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("failed\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&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;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (MQX_OK == curr_adc_calibrate())&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("done\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("failed\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create the event object */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_lwevent_create(&amp;amp;LVDEvent, 0) != MQX_OK) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("\nLVDEvent event failed!\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwevent_set_auto_clear( &amp;amp;LVDEvent, ADC_DATA_READY_MASK);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Create the event object */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_lwevent_create(&amp;amp;CurrEvent, 0) != MQX_OK) {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("\nLVDEvent event failed!\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwevent_set_auto_clear( &amp;amp;CurrEvent, ADC_DATA_READY_MASK);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Initialize ADC channel */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curr_adc_channel_init();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_channel_init();&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lwgpio_int_enable(&amp;amp;zcpzt, TRUE);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Trigger ADC measurements */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_start_measuring();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl (fLVD, ADC_IOCTL_PAUSE_CHANNEL, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl (fCurr, ADC_IOCTL_PAUSE_CHANNEL, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = 0;&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; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LVDReadNum = read(fLVD, LVDBuff, SAMPLES_PER_PERIOD * sizeof(LVDBuff[0].result));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrReadNum = read(fCurr, CurrBuff, SAMPLES_PER_PERIOD * sizeof(CurrBuff[0].result));&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwsem_wait(&amp;amp;ZClwsem);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_get_elapsed_ticks(&amp;amp;ticks);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl (fLVD, ADC_IOCTL_RESUME_CHANNEL, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl (fCurr, ADC_IOCTL_RESUME_CHANNEL, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Wait for adc data ready event */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (_lwevent_wait_ticks (&amp;amp;LVDEvent, ADC_DATA_READY_MASK, TRUE, 0) == MQX_OK)&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;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl (fLVD, ADC_IOCTL_PAUSE_CHANNEL, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LVDReadNum&amp;nbsp; = read(fLVD, LVDBuff, SAMPLES_PER_PERIOD * sizeof(LVDBuff[0].result));&lt;/P&gt;
&lt;P&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; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //_lwevent_wait_ticks (&amp;amp;LVDEvent, ADC_DATA_READY_MASK, TRUE, 0);&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl (fCurr, ADC_IOCTL_PAUSE_CHANNEL, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CurrReadNum = read(fCurr, CurrBuff, SAMPLES_PER_PERIOD * sizeof(CurrBuff[0].result));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Process metering algorithms */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //process_calculation();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //i = Average(&amp;amp;LVDBuff[0]);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_get_elapsed_ticks(&amp;amp;dticks);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tdiff = _time_diff_microseconds(&amp;amp;dticks, &amp;amp;ticks, &amp;amp;overflow);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RMSLVDHistory[i]&amp;nbsp; = RMS(LVDBuff);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RMSCurrHistory[i] = RMS(CurrBuff);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rmsVoltage = voltagePerBit * RMSLVDHistory[i];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rmsCurrent = voltagePerBit * RMSCurrHistory[i];&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //printf("%d , %.4f\n", tdiff, rmsVoltage );&lt;/P&gt;
&lt;P&gt;&amp;nbsp; printf("%d , %.4f&amp;nbsp;&amp;nbsp;&amp;nbsp; - %.4f \n", tdiff, rmsVoltage, rmsCurrent );&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; //_time_delay(300);&lt;/P&gt;
&lt;P&gt;/*&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i&amp;lt;SAMPLES_PER_PERIOD; i++ )&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d&amp;nbsp; =&amp;nbsp; %d\n", i, LVDBuff[i].result);&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;&amp;nbsp;&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; //_lwsem_wait(&amp;amp;ZClwsem);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i++ &amp;gt;= MAX_RMS_HISTORY) i = 0;&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;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_init&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_init(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_uint&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Opening ADC devices */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("Opening ADC devices for measurement\n");&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fLVD&amp;nbsp;&amp;nbsp; = fopen(LVD_ADC_STR, (const char*)&amp;amp;adc_init_param);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fLVD&amp;nbsp; != NULL)&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&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; /* Set long sample time */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_LONG_SAMPLE, (pointer)ADC_LONG_SAMPLE);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set hardware averaging to be taken from 16 samples */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_HW_AVERAGING,(pointer)ADC_HARDWARE_AVERAGING);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set low conversion speed */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_HIGH_SPEED,&amp;nbsp;&amp;nbsp; NULL);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set common sampling period for all ADC channels */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_BASE_PERIOD, (pointer)ADC_SAMPLING_PERIOD);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Set idelay function call back */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_IDELAY_FCN, &amp;amp;adc_idelay_callback);&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; error_code += ioctl(fLVD, ADC_IOCTL_SET_IDELAY, (pointer)(ADC_IDELAY));&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set ADC error call back function for capturing triggering errors */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_ERROR_FCN, &amp;amp;adc_error_callback);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; error_code++;&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;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_channel_init&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_channel_init(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_uint&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("Opening ADC channels ..LVD . measurement\n");&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Opening ADC channels for L1 voltage and current measurements */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("LVD voltage channel...");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fLVD&amp;nbsp; = fopen(LVD_ADC_CHNLSTR, (const char*)&amp;amp;LVDChannelParam);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fLVD != NULL)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&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; /* Force L1 voltage channel data to be processed in PDB interrupt */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fLVD, ADC_IOCTL_SET_IDELAY_PROCESS, NULL);&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("opened\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&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; puts("failed\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&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; puts("\n LVD channel is waiting for trigger\n");&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_calibrate&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : _mqx_int&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static _mqx_int adc_calibrate(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp; error_code = MQX_OK;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ADC calibration */&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = ioctl(fLVD, ADC_IOCTL_CALIBRATE, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (error_code != MQX_OK)&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; return error_code;&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; return&amp;nbsp; error_code;&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;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_start_measuring&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_start_measuring(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Triggering */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("Starting measurement..LVD.\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(fCurr, ADC_IOCTL_FIRE_TRIGGER, (pointer) ADC_PDB_TRIGGER);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(fLVD, ADC_IOCTL_FIRE_TRIGGER, (pointer) ADC_PDB_TRIGGER);&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&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;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_idelay_callback&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;volatile uint_32 adc_idelay_count = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_idelay_callback(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_idelay_count++;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_error_callback&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;volatile uint_32 adc_error_count = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void adc_error_callback(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_error_count++;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_init&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_init(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_uint&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Opening ADC devices */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("Opening ADC devices for measurement CURR\n");&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCurr&amp;nbsp;&amp;nbsp; = fopen(CURR_ADC_STR, (const char*)&amp;amp;adc_init_param);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fCurr&amp;nbsp; != NULL)&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&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; /* Set long sample time */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_LONG_SAMPLE, (pointer)ADC_LONG_SAMPLE);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set hardware averaging to be taken from 16 samples */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_HW_AVERAGING,(pointer)ADC_HARDWARE_AVERAGING);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set low conversion speed */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_HIGH_SPEED,&amp;nbsp;&amp;nbsp; NULL);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set common sampling period for all ADC channels */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_BASE_PERIOD, (pointer)ADC_SAMPLING_PERIOD);&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set idelay function call back */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_IDELAY_FCN, &amp;amp;curr_adc_idelay_callback);&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; error_code += ioctl(fCurr, ADC_IOCTL_SET_IDELAY, (pointer)(ADC_IDELAY));&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Set ADC error call back function for capturing triggering errors */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_ERROR_FCN, &amp;amp;curr_adc_error_callback);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; error_code++;&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;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_channel_init&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_channel_init(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_uint&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("Opening ADC channels ..CURR. measurement\n");&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Opening ADC channels for L1 voltage and current measurements */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("CURR voltage channel...");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fCurr&amp;nbsp; = fopen(CURR_ADC_CHNLSTR, (const char*)&amp;amp;CurrChannelParam);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fCurr != NULL)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&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; /* Force L1 voltage channel data to be processed in PDB interrupt */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code += ioctl(fCurr, ADC_IOCTL_SET_IDELAY_PROCESS, NULL);&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("opened\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&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; puts("failed\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _task_block();&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; puts("\n CURR channel is waiting for trigger\n");&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_calibrate&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : _mqx_int&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static _mqx_int curr_adc_calibrate(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp; error_code = MQX_OK;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* ADC calibration */&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_code = ioctl(fCurr, ADC_IOCTL_CALIBRATE, NULL);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (error_code != MQX_OK)&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; return error_code;&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; return&amp;nbsp; error_code;&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;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_start_measuring&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_start_measuring(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Triggering */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts("Starting measurement...\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ioctl(fCurr, ADC_IOCTL_FIRE_TRIGGER, (pointer) ADC_PDB_TRIGGER);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_idelay_callback&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;volatile uint_32 curr_adc_idelay_count = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_idelay_callback(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curr_adc_idelay_count++;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : adc_error_callback&lt;/P&gt;
&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;
&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/P&gt;
&lt;P&gt;*&lt;/P&gt;
&lt;P&gt;*END*********************************************************************/&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;volatile uint_32 curr_adc_error_count = 0;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;static void curr_adc_error_callback(void)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; curr_adc_error_count++;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mehmet&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Apr 2013 08:49:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240121#M6768</guid>
      <dc:creator>mehmetekici</dc:creator>
      <dc:date>2013-04-02T08:49:25Z</dc:date>
    </item>
    <item>
      <title>Re: ADC driver task safety</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240122#M6769</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mehet,&lt;/P&gt;&lt;P&gt;Sorry for delayed response. I was trying to confirm my reply.&lt;/P&gt;&lt;P&gt;My reply is follows:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;“if you have a sequencing error, it really is&lt;BR /&gt;an indication of a configuration issue rather than a need to just clear the&lt;BR /&gt;error flag.&amp;nbsp; With error interrupt, I think the solution is to disable&lt;BR /&gt;ADC/PDB, re-initialize, and change timing/delay values to re-test.”&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Response from our MQX Development team:&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri','sans-serif'; font-size: 11pt;"&gt;&lt;SPAN style="color: #575757; font-family: Arial; font-size: 10pt;"&gt;"&lt;/SPAN&gt;You must reinit the ADC in order to make it work. The error flag&lt;BR /&gt;is there to indicate some discrepancies in the configuration.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="color: #1f497d; font-family: 'Calibri','sans-serif'; font-size: 11pt;"&gt;At the present we do not have any example that would do reinit&lt;BR /&gt;of the ADC.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; T&lt;SPAN style="color: #1f497d; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;he overly complex ADC driver in Kinetis is to be replaced by LWADC in future MQX release"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;P&gt;PS for future please attach source file rather than pasting it. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 08 Apr 2013 15:43:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/ADC-driver-task-safety/m-p/240122#M6769</guid>
      <dc:creator>DavidS</dc:creator>
      <dc:date>2013-04-08T15:43:57Z</dc:date>
    </item>
  </channel>
</rss>

