<?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>i.MX Processors中的主题 Re: i.mx28 HSADC</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197275#M10573</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI &lt;A _jive_internal="true" data-avatarid="1034" data-externalid="" data-online="false" data-presence="null" data-userid="209337" data-username="michaelkoelbl" href="https://community.nxp.com/people/michaelkoelbl" style="font-weight: bold; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: inherit;"&gt;Michel&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regarding setting the modes correctly i will try to set it properly. But do you have some sample code from your past work then it will be really very helpful.&lt;/P&gt;&lt;P&gt;I am able to read data from the HW_HSADC_FIFO_DATA register but the overflow bit for fifo is also getting set when i am trying to capture a single samle in one sequence and one sequence only. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF you can help me with the data reading part from the hsadc as not much is given in the documentation other than that for this purpose DMA has to be used.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 08 Aug 2015 10:36:03 GMT</pubDate>
    <dc:creator>imravi</dc:creator>
    <dc:date>2015-08-08T10:36:03Z</dc:date>
    <item>
      <title>i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197258#M10556</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying to use HSADC pin to read adc input. By reading mx28 datasheet, I understand this HSADC is designed for driving the linear image scanner sensor, we just want to use it as a normal 12 bit ADC. So no triggering from PWM, and no need to channel on DMA. What we need just read the value periodically via software. During the past weekend, I was trying to verify this concept. But I couldn't get HSADC to read any values. What I got is always a timeout interrupt (bit 1 and bit 0) read from HW_HSADC_CTRL1.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is my code snippet. Maybe you guys can quickly find out what I missed. Any suggestion or comment is welcomed. Thank you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;int hsadc_init(void)&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; int ret = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int read = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;// Set Power bit for all PLL0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 17), HW_CLKCTRL_PLL0CTRL0_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear clk fraction divider gate&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 15), HW_CLKCTRL_FRAC1_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// set hsadc trigger as GPIO&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;writel((0x03 &amp;lt;&amp;lt; 14), HW_PINCTRL_MUXSEL1_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// set another hsadc trigger as GPIO&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;writel((0x03 &amp;lt;&amp;lt; 10), HW_PINCTRL_MUXSEL8_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // HSADC clk divider normal work, divided by 72&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(0x70000000, HW_CLKCTRL_HSADC);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clk gate cleared&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 31), HW_POWER_ANACLKCTRL_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 26), HW_POWER_ANACLKCTRL_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // INDIV set to 0x02, 1.5 MHz sampling rate&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 1), HW_POWER_ANACLKCTRL_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;writel((0x01 &amp;lt;&amp;lt; 0), HW_POWER_ANACLKCTRL_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // INCLK_SHIFT&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 5), HW_POWER_ANACLKCTRL_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 4), HW_POWER_ANACLKCTRL_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&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; * Set 0x1 to make the configuration INDIV&amp;lt;1:0&amp;gt; and INCLK_SHIFT available,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* but there would be &amp;lt;= 0.67us timing delay between HSADC start conversion&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* and ‘start run’ command from software trigger or PWM trigger. If this delay&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* is not desired, it is recommended to set INDIV&amp;lt;1:0&amp;gt; to 0x2 and using PWM&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;* trigger for HSADC&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 9), HW_POWER_ANACLKCTRL_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = hsadc_reset();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ret)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear Power Down bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 13), HW_HSADC_CTRL2_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i &amp;lt; 1000; i++)&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; udelay(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read = readl(HW_HSADC_CTRL2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(read &amp;amp; (0x01 &amp;lt;&amp;lt; 13)))&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; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &amp;gt;= 1000)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set Pre-Charge bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 0), HW_HSADC_CTRL2_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i &amp;lt; 1000; i++)&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; udelay(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read = readl(HW_HSADC_CTRL2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((read &amp;amp; (0x01 &amp;lt;&amp;lt; 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;&amp;nbsp; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &amp;gt;= 1000)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set on chip ground&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 5), HW_HSADC_CTRL2_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // use HSADC0 pin as analog input&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x07 &amp;lt;&amp;lt; 1), HW_HSADC_CTRL2_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // One (0x01) sample per sequence&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x001), HW_HSADC_SEQUENCE_SAMPLES_NUM);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // One (0x01)squence per conversion&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x001), HW_HSADC_SEQUENCE_NUM);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // all interrupt enabled as default&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ADC triggerd by software&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x03 &amp;lt;&amp;lt; 28), HW_HSADC_CTRL0_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 12 bit sample data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;writel((0x01 &amp;lt;&amp;lt; 17), HW_HSADC_CTRL0_CLR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 18), HW_HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Big endian sample data&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 16), HW_HSADC_CTRL0_SET);&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;// Clear FIFO data before start&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;1000; i++)&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; read = readl(HW_HSADC_CTRL1_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (read &amp;amp; 0x0020)&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; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &amp;gt;= 1000)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -5;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear interrupt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 27), HW_HSADC_CTRL1_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear all interrupt flags&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 26), HW_HSADC_CTRL1_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set trigger delay cycles to&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;writel((0x03 &amp;lt;&amp;lt; 1), HW_HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // HSADC starts to run&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 0), HW_HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; udelay(10);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Trigger the ADC conversion&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 27), HW_HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;&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;// Wait for completion&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;100000; i++)&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; v1 = readl(HW_HSADC_CTRL1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (v1 &amp;amp; 0x01)&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; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; udelay(1);&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;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret = v1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hsadc_checkctrlreg();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;hsadc_checkdatareg();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void hsadc_checkdatareg(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int d0, d1, d2, d3,&amp;nbsp; d4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d0 = readl(HW_HSADC_FIFO_DATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d1 = readl(HW_HSADC_DBG_INFO0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d2 = readl(HW_HSADC_DBG_INFO1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d3 = readl(HW_HSADC_DBG_INFO2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; d4 = readl(HW_HSADC_VERSION);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("data=0x%08x, info0=0x%08x, info1=0x%08x, info2=0x%08x, ver=0x%08x\n",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d0, d1, d2, d3, d4);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void hsadc_checkctrlreg(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int v0, v1, v2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; v0 = readl(HW_HSADC_CTRL0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; v1 = readl(HW_HSADC_CTRL1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; v2 = readl(HW_HSADC_CTRL2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("HW_HSADC_CTRL0 = 0x%08x, HW_HSADC_CTRL1 = 0x%08x, HW_HSADC_CTRL2 = 0x%08x\n",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v0, v1, v2);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The debug console output is like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL0 = 0x00050046, HW_HSADC_CTRL1 = 0xf0000023, HW_HSADC_CTRL2 = 0x000000bf&lt;/P&gt;&lt;P&gt;data=0x00000000, info0=0x00000000, info1=0x00000000, info2=0x00000000, ver=0x00010000&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 20 Dec 2011 16:13:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197258#M10556</guid>
      <dc:creator>mx28</dc:creator>
      <dc:date>2011-12-20T16:13:02Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197259#M10557</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I am also facing the same problem while implementing HSADC on imx28 processor and linux-2.6.35.3 kernel. If you found solution please reply me.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;best regds&lt;/P&gt;&lt;P&gt;iranna&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jan 2012 07:12:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197259#M10557</guid>
      <dc:creator>iranna</dc:creator>
      <dc:date>2012-01-10T07:12:44Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197260#M10558</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;To make HSADC working, you need first implement this work around for a chip hardware problem. Here is the errata link:&lt;/P&gt;&lt;P&gt;&lt;A href="http://cache.freescale.com/files/32bit/doc/errata/IMX28CE.pdf" target="_blank"&gt;http://cache.freescale.com/files/32bit/doc/errata/IMX28CE.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;You need check ENGR116296.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After implemented this, I got HSADC going and I can read data from FIFO register.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Jan 2012 13:49:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197260#M10558</guid>
      <dc:creator>mx28</dc:creator>
      <dc:date>2012-01-10T13:49:05Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197261#M10559</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I am getting ADC_DONE interrupt properly, but not getting constant values, Different values (FIFO reg value) every time when I execute the binary. Is there any thing to be taken care from driver side or Its hardware fault.&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;&amp;nbsp;&amp;nbsp; we are giving 3.3V as reference and ADC input voltage is 1.68V, getting values around 1.5V to 2.3V. Please reply me.&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;Iranna&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Feb 2012 09:03:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197261#M10559</guid>
      <dc:creator>iranna</dc:creator>
      <dc:date>2012-02-01T09:03:26Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197262#M10560</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Mike,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maybe you could post your HSADC driver somewhere?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Fabio Estevam&lt;BR /&gt; &lt;BR /&gt; &lt;CITE&gt;mike z said:&lt;/CITE&gt;&lt;/P&gt;&lt;BLOCKQUOTE cite="http://imxcommunity.org/forum/topics/i-mx28-hsadc#4103961Comment53489"&gt;&lt;DIV&gt;&lt;DIV class="xg_user_generated"&gt;&lt;P&gt;To make HSADC working, you need first implement this work around for a chip hardware problem. Here is the errata link:&lt;/P&gt;&lt;P&gt;&lt;A href="http://cache.freescale.com/files/32bit/doc/errata/IMX28CE.pdf" rel="nofollow" target="_blank"&gt;http://cache.freescale.com/files/32bit/doc/errata/IMX28CE.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;You need check ENGR116296.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After implemented this, I got HSADC going and I can read data from FIFO register.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Feb 2012 19:44:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197262#M10560</guid>
      <dc:creator>fabio_estevam</dc:creator>
      <dc:date>2012-02-01T19:44:35Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197263#M10561</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;BR /&gt; I have tried writing HSADC driver, Using IOCTL call to read ADC converted value on HSADC0 channel, &lt;BR /&gt; that inside calls mxs_read_general() in which enabling interrupts(END_SEQ, ADC_DONE and TIMEOUT), setting RUN bit in Ctrl0 reg and triggring it.&lt;BR /&gt; and waiting for interrupt(ADC_DONE or END_SEQ or TIMEOUT). if TIMEOUT comes again caling mxs_read_general().&lt;BR /&gt; So now I am getting ADC_DONE interrupt and Reading FIFO_DATA reg for value in interrupt handler. but the values are different every time with same voltage.&lt;BR /&gt;Please help me in this any where I am going wrong.&lt;/P&gt;&lt;P&gt;static int mxs_hsadc_module_probe(struct platform_device *pdev)&lt;BR /&gt; {&lt;BR /&gt; int ret = 0;&lt;BR /&gt; struct device *temp_class;&lt;BR /&gt; struct resource *res;&lt;BR /&gt;void __iomem *base;&lt;/P&gt;&lt;P&gt;/* ioremap the base address */&lt;BR /&gt; res = platform_get_resource(pdev, IORESOURCE_MEM, 0);&lt;BR /&gt; if (res == NULL) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "No HSADC base address provided\n");&lt;BR /&gt; goto err_out0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;base = (void __iomem *)IO_ADDRESS(res-&amp;gt;start);&lt;BR /&gt; if (base == NULL) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "Failed to rebase HSADC base address\n");&lt;BR /&gt; goto err_out0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;hsadc_base = (unsigned int)base;&lt;/P&gt;&lt;P&gt;/* create the chrdev */&lt;BR /&gt;mxs_hsadc_major = register_chrdev(0, "mxs-hsadc", &amp;amp;mxs_hsadc_fops);&lt;/P&gt;&lt;P&gt;if (mxs_hsadc_major &amp;lt; 0) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "Unable to get a major for mxs_hsadc\n");&lt;BR /&gt; return mxs_hsadc_major;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/*creating hsadc class */&lt;BR /&gt; mxs_hsadc_class = class_create(THIS_MODULE, "mxs-hsadc");&lt;BR /&gt; if (IS_ERR(mxs_hsadc_class)) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "Error creating mxs_hsadc class.\n");&lt;BR /&gt; ret = PTR_ERR(mxs_hsadc_class);&lt;BR /&gt; goto err_out1;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/*Creating device node */&lt;BR /&gt; temp_class = device_create(mxs_hsadc_class, NULL,&lt;BR /&gt; MKDEV(mxs_hsadc_major, 0), NULL, "mxs-hsadc");&lt;BR /&gt; if (IS_ERR(temp_class)) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "Error creating mxs_hsadc class device.\n");&lt;BR /&gt; ret = PTR_ERR(temp_class);&lt;BR /&gt; goto err_out2;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;adc_data = kmalloc(sizeof(struct mxs_hsadc_data), GFP_KERNEL);&lt;BR /&gt; if (adc_data == NULL)&lt;BR /&gt;return -ENOMEM;&lt;/P&gt;&lt;P&gt;/* requesting hsadc irq */&lt;BR /&gt;adc_data-&amp;gt;irq = platform_get_irq(pdev, 0);&lt;/P&gt;&lt;P&gt;ret = request_irq(adc_data-&amp;gt;irq, mxs_hsadc_interrupt, 0, MOD_NAME, MOD_NAME);&lt;BR /&gt; if (ret) {&lt;BR /&gt; printk(KERN_DEBUG"HSADC : %s : irq registration failed %d\n",__FILE__,ret);&lt;BR /&gt; return ret;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;if (ret != MXS_HSADC_SUCCESS) {&lt;BR /&gt; dev_err(&amp;amp;pdev-&amp;gt;dev, "Error in mxs_hsadc_init.\n");&lt;BR /&gt; goto err_out4;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/*HSADC initialization */&lt;BR /&gt;ret = mxs_hsadc_init();&lt;/P&gt;&lt;P&gt;/* By default, devices should wakeup if they can */&lt;BR /&gt; /* So HSADC is set as "should wakeup" as it can */&lt;BR /&gt;device_init_wakeup(&amp;amp;pdev-&amp;gt;dev, 1);&lt;/P&gt;&lt;P&gt;return ret;&lt;/P&gt;&lt;P&gt;err_out4:&lt;BR /&gt; device_destroy(mxs_hsadc_class, MKDEV(mxs_hsadc_major, 0));&lt;BR /&gt; err_out2:&lt;BR /&gt; class_destroy(mxs_hsadc_class);&lt;BR /&gt; err_out1:&lt;BR /&gt; unregister_chrdev(mxs_hsadc_major, "mxs-hsadc");&lt;BR /&gt; err_out0:&lt;BR /&gt; return ret;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;int mxs_hsadc_init()&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;int i;&lt;BR /&gt; unsigned int reg;&lt;BR /&gt;// mxs_hsadc_clk_enable();&lt;/P&gt;&lt;P&gt;__raw_writel(BF_CLKCTRL_FRAC1_HSADCFRAC(0x3f), HW_CLKCTRL_BASE_ADDRESS+HW_CLKCTRL_FRAC1_CLR); /* Clear */&lt;/P&gt;&lt;P&gt;__raw_writel(BF_CLKCTRL_FRAC1_HSADCFRAC(30), HW_CLKCTRL_BASE_ADDRESS+HW_CLKCTRL_FRAC1_SET); /* Set to 288 MHz*/&lt;BR /&gt; /* Clear the clock gate*/&lt;BR /&gt;__raw_writel(BM_CLKCTRL_FRAC1_CLKGATEHSADC, HW_CLKCTRL_BASE_ADDRESS+HW_CLKCTRL_FRAC1_CLR);&lt;/P&gt;&lt;P&gt;/* Set the HSADC CLK ADC divider to ge the Operation clock of 16 MHz*/&lt;BR /&gt;__raw_writel(BM_CLKCTRL_HSADC_RESETB | BF_CLKCTRL_HSADC_FREQDIV( 1 /*CLKCTRL_HSADC_FREQDIV_18*/), HW_CLKCTRL_BASE_ADDRESS+HW_CLKCTRL_HSADC);&lt;/P&gt;&lt;P&gt;/* 1st workaround for HSADC */&lt;BR /&gt;__raw_writel(HSADC_CTRL0_RESET,hsadc_base + HSADC_CTRL0_CLR);&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt; 10000; i++) {&lt;BR /&gt; reg = __raw_readl(hsadc_base + HSADC_CTRL0);&lt;BR /&gt; if (!(reg &amp;amp; HSADC_CTRL0_RESET))&lt;BR /&gt; break;&lt;BR /&gt; udelay(3);&lt;BR /&gt; }&lt;BR /&gt;__raw_writel(HSADC_CTRL0_RESET &amp;amp; (~HSADC_CTRL0_CLKGATE_OFF), hsadc_base + HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;__raw_writel(HSADC_CTRL0_CLKGATE_OFF,hsadc_base + HSADC_CTRL0_SET);&lt;BR /&gt; __raw_writel(HSADC_CTRL0_CLKGATE_OFF,hsadc_base + HSADC_CTRL0_CLR);&lt;BR /&gt; __raw_writel(HSADC_CTRL0_CLKGATE_OFF,hsadc_base + HSADC_CTRL0_SET);&lt;BR /&gt;/* 1st workaround for HSADC */&lt;/P&gt;&lt;P&gt;// __raw_writel(HSADC_CTRL0_CLKGATE_OFF,hsadc_base + HSADC_CTRL0_CLR);&lt;BR /&gt;__raw_writel(HSADC_CTRL0_RESET,hsadc_base + HSADC_CTRL0_CLR);&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt; 10000; i++) {&lt;BR /&gt; reg = __raw_readl(hsadc_base + HSADC_CTRL0);&lt;BR /&gt; if (!(reg &amp;amp; HSADC_CTRL0_RESET))&lt;BR /&gt; break;&lt;BR /&gt; udelay(3);&lt;BR /&gt; }&lt;BR /&gt;__raw_writel(HSADC_CTRL0_CLKGATE_OFF,hsadc_base + HSADC_CTRL0_CLR);&lt;/P&gt;&lt;P&gt;/*Disable the interrupts*/&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_TIMEOUT_ENB ,hsadc_base + HSADC_CTRL1_CLR);&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_END_SEQ_ENB,hsadc_base + HSADC_CTRL1_CLR);&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_ADC_DONE_ENB,hsadc_base + HSADC_CTRL1_CLR);&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_FIFO_OVFW_ENB,hsadc_base + HSADC_CTRL1_CLR);&lt;BR /&gt; __raw_writel(HSADC_INTR_CLR,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt;__raw_writel(HSADC_INTR_STATUS_CLR,hsadc_base + HSADC_CTRL1_SET);&lt;/P&gt;&lt;P&gt;/* HSADC is set to SINGLE Mode*/&lt;BR /&gt; reg = 0x1;&lt;BR /&gt;__raw_writel(reg , hsadc_base +HSADC_SEQ_NUM);&lt;/P&gt;&lt;P&gt;/*Number of samples*/&lt;BR /&gt; reg = 0x1;&lt;BR /&gt;__raw_writel(reg , hsadc_base +HSADC_SEQ_SAM_NUM);&lt;/P&gt;&lt;P&gt;/*Power Register config */&lt;BR /&gt; reg =0x84000626;&lt;BR /&gt;__raw_writel(reg , REGS_POWER_BASE + HW_POWER_ANACLKCTRL);&lt;/P&gt;&lt;P&gt;/* Wake up from power down mode */&lt;BR /&gt;__raw_writel(HSADC_CTRL2_POWER_DOWN,hsadc_base + HSADC_CTRL2_CLR);&lt;/P&gt;&lt;P&gt;/*Set PreCharge Enable */&lt;BR /&gt;__raw_writel(HSADC_CTRL2_PRECHARGE,hsadc_base + HSADC_CTRL2_SET);&lt;/P&gt;&lt;P&gt;/*Set HSADC_RUN mode*/&lt;BR /&gt;__raw_writel(HSADC_CTRL0_RUN,hsadc_base + HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;return 0; &lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* interrupt handler */&lt;BR /&gt; static irqreturn_t mxs_hsadc_interrupt(int irq, void *dev_id)&lt;BR /&gt; {&lt;BR /&gt;unsigned long reg=0;&lt;/P&gt;&lt;P&gt;hsadc_value = __raw_readl(hsadc_base + HSADC_FIFO_DATA);&lt;BR /&gt; printk(KERN_DEBUG"HSADC : value %x\n",hsadc_value);&lt;BR /&gt; reg = __raw_readl(hsadc_base + HSADC_CTRL1) &amp;amp; HSADC_INTR_STATUS_END_SEQ;&lt;BR /&gt; if(reg)&lt;BR /&gt; {&lt;BR /&gt;printk(KERN_DEBUG"%s : reg value HSADC_INTR_STATUS_END_SEQ %d\n",__FILE__,(int)reg);&lt;/P&gt;&lt;P&gt;goto ADC_DONE&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;reg = __raw_readl(hsadc_base + HSADC_CTRL1) &amp;amp; HSADC_INTR_STATUS_ADC_DONE;&lt;BR /&gt; if(reg)&lt;BR /&gt; {&lt;BR /&gt; printk(KERN_DEBUG"%s : reg value HSADC_INTR_STATUS_ADC_DONE %d\n",__FILE__,(int)reg);&lt;BR /&gt; goto ADC_DONE &lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;reg = __raw_readl(hsadc_base + HSADC_CTRL1) &amp;amp; HSADC_INTR_STATUS_TIMEOUT;&lt;BR /&gt; if (reg)&lt;BR /&gt; {&lt;BR /&gt; /*Disable timeout interrupt*/&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_TIMEOUT_ENB,hsadc_base + HSADC_CTRL1_CLR);&lt;BR /&gt; /*Clear interrupt status and pending interrupts*/&lt;BR /&gt; __raw_writel(HSADC_INTR_CLR,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt; __raw_writel(HSADC_INTR_STATUS_CLR,hsadc_base + HSADC_CTRL1_CLR);&lt;BR /&gt; printk(KERN_DEBUG"%s : reg value HSADC_INTR_STATUS_TIMEOUT %d\n",__FILE__,(int)reg);&lt;BR /&gt; timeout = 1;&lt;BR /&gt;hsadc_conversion=1;&lt;/P&gt;&lt;P&gt;return IRQ_HANDLED;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;ADC_DONE:&lt;/P&gt;&lt;P&gt;/*Clear interrupt status and pending interrupts*/&lt;BR /&gt; __raw_writel(HSADC_INTR_CLR,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt;__raw_writel(HSADC_INTR_STATUS_CLR,hsadc_base + HSADC_CTRL1_CLR);&lt;/P&gt;&lt;P&gt;timeout = 0;&lt;BR /&gt; hsadc_conversion=1;&lt;BR /&gt; return IRQ_HANDLED;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;enum MXS_HSADC_STATUS mxs_hsadc_read_general()&lt;BR /&gt; {&lt;BR /&gt; unsigned long reg = 0;&lt;BR /&gt;hsadc_conversion=0;&lt;/P&gt;&lt;P&gt;/*channel selection */&lt;BR /&gt;__raw_writel((7 &amp;lt;&amp;lt; 1), hsadc_base + HSADC_CTRL2_SET );&lt;/P&gt;&lt;P&gt;/*Clear interrupt status and pending interrupts*/&lt;/P&gt;&lt;P&gt;__raw_writel(HSADC_INTR_CLR,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt;__raw_writel(HSADC_INTR_STATUS_CLR,hsadc_base + HSADC_CTRL1_SET);&lt;/P&gt;&lt;P&gt;/*Enabling the interrupts*/&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_END_SEQ_ENB,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_ADC_DONE_ENB,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt; __raw_writel(HSADC_INTR_CTRL_FIFO_OVFW_ENB,hsadc_base + HSADC_CTRL1_SET);&lt;BR /&gt;__raw_writel(HSADC_INTR_CTRL_TIMEOUT_ENB,hsadc_base + HSADC_CTRL1_SET);&lt;/P&gt;&lt;P&gt;/*Delay cycles*/&lt;BR /&gt; reg = 4 &amp;lt;&amp;lt; 1;&lt;BR /&gt;__raw_writel(reg, hsadc_base + HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;/*Set HSADC_RUN bit*/&lt;BR /&gt;__raw_writel(HSADC_CTRL0_RUN,hsadc_base + HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;mdelay(100);&lt;BR /&gt; __raw_writel(HSADC_CTRL0_SW_TRIGGER, hsadc_base + HSADC_CTRL0_SET);&lt;BR /&gt; mdelay(10);&lt;BR /&gt;__raw_writel(HSADC_CTRL0_SW_TRIGGER, hsadc_base + HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;while(!hsadc_conversion)&lt;BR /&gt; {&lt;BR /&gt; /*Waiting for the interrupt to occur*/&lt;BR /&gt; mdelay(100);&lt;BR /&gt; }&lt;BR /&gt; /*Disable the RUN Bit*/&lt;BR /&gt;__raw_writel(HSADC_CTRL0_RUN,hsadc_base + HSADC_CTRL0_CLR);&lt;/P&gt;&lt;P&gt;if(timeout)&lt;BR /&gt; return MXS_HSADC_ERROR;&lt;BR /&gt; else&lt;BR /&gt;return MXS_HSADC_SUCCESS;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Iranna&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 Feb 2012 10:15:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197263#M10561</guid>
      <dc:creator>iranna</dc:creator>
      <dc:date>2012-02-02T10:15:44Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197264#M10562</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi mike&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; As you said HSADC is working in your board, Kindly Help me in this. what is the HSADC reference voltage and CTRL register values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Iranna&lt;BR /&gt; &lt;BR /&gt; &lt;CITE&gt;mike z said:&lt;/CITE&gt;&lt;/P&gt;&lt;BLOCKQUOTE cite="http://imxcommunity.org/forum/topics/i-mx28-hsadc?commentId=4103961%3AComment%3A53489#4103961Comment53489"&gt;&lt;DIV&gt;&lt;DIV class="xg_user_generated"&gt;&lt;P&gt;To make HSADC working, you need first implement this work around for a chip hardware problem. Here is the errata link:&lt;/P&gt;&lt;P&gt;&lt;A href="http://cache.freescale.com/files/32bit/doc/errata/IMX28CE.pdf" rel="nofollow" target="_blank"&gt;http://cache.freescale.com/files/32bit/doc/errata/IMX28CE.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;You need check ENGR116296.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After implemented this, I got HSADC going and I can read data from FIFO register.&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Feb 2012 11:03:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197264#M10562</guid>
      <dc:creator>iranna</dc:creator>
      <dc:date>2012-02-08T11:03:57Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197265#M10563</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Iranna,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I see two problems in your code:&lt;/P&gt;&lt;P&gt;1. You didn't initial HSADC registers in your init() function.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear Power Down bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 13), HW_HSADC_CTRL2_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i &amp;lt; 1000; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; udelay(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read = readl(HW_HSADC_CTRL2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!(read &amp;amp; (0x01 &amp;lt;&amp;lt; 13)))&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; break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &amp;gt;= 1000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ADC triggerd by software&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x03 &amp;lt;&amp;lt; 28), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Discard first 2 samples&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 20), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 19), HW_HSADC_CTRL0_SET);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bit == '0')&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 8 bit sample data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 18), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 17), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (bit == '1')&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 10 bit sample data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 18), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 17), HW_HSADC_CTRL0_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 12 bit sample data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 18), HW_HSADC_CTRL0_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 17), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Little endian sample data&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 16), HW_HSADC_CTRL0_CLR);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Delay 3 cycle after trigger&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x03 &amp;lt;&amp;lt; 1), HW_HSADC_CTRL0_SET);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sampling at gain 4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 12), HW_HSADC_CTRL2_CLR);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 11), HW_HSADC_CTRL2_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 10), HW_HSADC_CTRL2_SET);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// use HSADC0 pin as analog input&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 3), HW_HSADC_CTRL2_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 2), HW_HSADC_CTRL2_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 1), HW_HSADC_CTRL2_SET);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // adjust headroom of current source &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 9), HW_HSADC_CTRL2_CLR);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // adjust current&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 8), HW_HSADC_CTRL2_CLR);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set Pre-Charge bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 0), HW_HSADC_CTRL2_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i &amp;lt; 1000; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; udelay(1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read = readl(HW_HSADC_CTRL2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((read &amp;amp; (0x01 &amp;lt;&amp;lt; 0)))&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; break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &amp;gt;= 1000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -4;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // One (0x01) sample per sequence&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01), HW_HSADC_SEQUENCE_SAMPLES_NUM);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // One (0x01)squence per conversion&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01), HW_HSADC_SEQUENCE_NUM);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear FIFO data before start&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;1000; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read = readl(HW_HSADC_CTRL1_SET);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (read &amp;amp; 0x0020)&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; break;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &amp;gt;= 1000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -5;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 27), HW_HSADC_CTRL1_SET);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear all interrupt flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((0x01 &amp;lt;&amp;lt; 26), HW_HSADC_CTRL1_SET);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2. It's better read FIFO data after you confirm you get ADC_DONE flag. If you get other flag (like timeout), you shall skip FIFO data, it just has garbage data there.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope these helps.&lt;/P&gt;&lt;P&gt;Michael&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 08 Feb 2012 17:57:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197265#M10563</guid>
      <dc:creator>mx28</dc:creator>
      <dc:date>2012-02-08T17:57:48Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197266#M10564</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I modified code as you mentioned above, But still I am getting varying voltages, As follows&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Voltage at HSADC pin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp; 0.83 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.54&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.02&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; FIfo data value&amp;nbsp; (in HEX)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;nbsp; AD to B2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6E to 73 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 92 to 96&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; Voltage calculated(Vref = 1.3)&amp;nbsp;&amp;nbsp; -&amp;nbsp; 0.877&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 0.55&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.75 &amp;nbsp;&lt;/P&gt;&lt;P&gt;Electrical specifications of HSADC, DC voltage can be used for HSADC is 0.5 to VDDA-0.5 (VDDA =&amp;nbsp; 1.8V). So I am using 1.3V as Ref Voltage. Is this correct?&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Iranna&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Feb 2012 05:00:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197266#M10564</guid>
      <dc:creator>iranna</dc:creator>
      <dc:date>2012-02-13T05:00:34Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197267#M10565</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Ref Voltage can be configured by&amp;nbsp;&amp;nbsp;HW_HSADC_CTRL2_bit.SAH_GAIN_ADJ. I am writing HSADC driver, and the HSADC work correctly now. At first, I used 8 bits mode,&amp;nbsp; but always get a wrong voltage from HSADC ; finally, I found ADC_SAMPLE_SHIFT_BITS_NUM must be 4 in 8 bits mode. In your code , you did nothing with ADC_SAMPLE_SHIFT_BITS_NUM, but you can get a right voltage , I don't know why. Now,I have one question, sample rate =&amp;nbsp; 480M*(18/HW_CLKCTRL_FRAC1.HSADCFRAC) /HW_CLKCTRL_HSADC.FREQDIV/16, (where HSADCFRAC = 18-35). when HW_CLKCTRL_FRAC1.HSADCFRAC = 35 and HW_CLKCTRL_HSADC.FREQDIV = 3(Divide by 72), sample rate = 214K, is the lowest sample rate . Is this correct? How to get a lower sample rate than 214K?&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;sheng&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Jul 2012 01:47:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197267#M10565</guid>
      <dc:creator>greyorbit</dc:creator>
      <dc:date>2012-07-06T01:47:18Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197268#M10566</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello to all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I will soon use the imx28 HSADC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I see Mike and Iranna's works concerning the HSADC, and wonder if since that time, Freescale has created a Linux driver for the part.&lt;/P&gt;&lt;P&gt;Shall I write mine like Mike Z and Iranna did, or did Freescale release an official HSADC Linux driver ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance for your answers and links.&lt;/P&gt;&lt;P&gt;Kind regards,&lt;/P&gt;&lt;P&gt;Gilles.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Dec 2013 18:02:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197268#M10566</guid>
      <dc:creator>Gilles</dc:creator>
      <dc:date>2013-12-26T18:02:49Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197269#M10567</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;is there any official code examples ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;I can't get the HSADC work.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;this is my code:&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;initial:______________________________________________________________________________&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;writel(0x50000000, clk_base + HW_CLKCTRL_HSADC); /* M = 18;RST=High; */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; *((u8*)(clk_base + HW_CLKCTRL_FRAC1 + 1)) = 30; /* HSADC=480*(M/N)=288MHz */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; *((u8*)(clk_base + HW_CLKCTRL_FRAC1_CLR + 1)) = 0x80; /* clear HSADC_CLK_GATE */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0xF0000000, hsadc_base + HW_HSADC_CTRL0_CLR); /* normal run;trigger is sw */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0x0000000F, hsadc_base + HW_HSADC_CTRL2_SET); /* precharge before convert */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set pin to HSADC */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0x00000003, hsadc_base + HW_HSADC_SEQUENCE_SAMPLES_NUM);&lt;SPAN style="font-weight: inherit; font-style: inherit; font-size: 10pt; font-family: inherit;"&gt;/* 1 sample per sequence */&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0x00000003, hsadc_base + HW_HSADC_SEQUENCE_NUM); /* 1 sequence per trig */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0xFC000000, hsadc_base + HW_HSADC_CTRL1_CLR); /* disable all interrupt */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0x01C00001, hsadc_base + HW_HSADC_CTRL0_SET); /* 4 discard &amp;amp; 12bit mode */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* get the HSADC running */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;read the value:________________________________________________________________________&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;// while((readl(hsadc_base + HW_HSADC_CTRL1) &amp;amp; 0x00000020)){ /* if empty then */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; writel(0x08000000, hsadc_base + HW_HSADC_CTRL0_SET); /* trig it! */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;// }&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp; iRes = readl(hsadc_base + HW_HSADC_FIFO_DATA);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;it just not work...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;any help will be apreciated...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Dec 2013 00:49:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197269#M10567</guid>
      <dc:creator>9crkzhou</dc:creator>
      <dc:date>2013-12-27T00:49:23Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197270#M10568</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mike, hello to all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It has been a while you did it, but maybe you could help me.&lt;/P&gt;&lt;P&gt;I try to get hsadc working. After many analyses, I suspect the HSADC analog block not working.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Signs :&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;HSADC_RUN bit disapear as soon as I soft-trigger the block&lt;/LI&gt;&lt;LI&gt;I get the INTERRUPT_TIMEOUT_STATUS as soon as I soft-trigger&lt;/LI&gt;&lt;LI&gt;I never get the ADC_DONE bit.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;My clocks/power settings are the followings :&lt;/P&gt;&lt;P&gt;CLKCTRL_BASE_ADDR + HW_CLKCTRL_HSADC = 0x60000000&lt;/P&gt;&lt;P&gt;CLKCTRL_BASE_ADDR + HW_CLKCTRL_FRAC1 = 0x00925292&lt;/P&gt;&lt;P&gt;REGS_POWER_BASE + HW_POWER_ANACLKCTRL = 0x84000626&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And my registers settings just before soft-trigger are :&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL0 = 0x000c0049&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL1 = 0xc0000020&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL2 = 0x00001f8f&lt;/P&gt;&lt;P&gt;HW_HSADC_SEQUENCES_NUM = 0x00000001&lt;/P&gt;&lt;P&gt;HW_HSADC_SEQUENCE_SAMPLES_NUM = 0x0000000a&lt;/P&gt;&lt;P&gt;And just after soft-trigger :&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL0 = 0x000c0048&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL1 = 0xc0000002&lt;/P&gt;&lt;P&gt;HW_HSADC_CTRL2 = 0x00001f8f&lt;/P&gt;&lt;P&gt;HW_HSADC_SEQUENCES_NUM = 0x00000001&lt;/P&gt;&lt;P&gt;HW_HSADC_SEQUENCE_SAMPLES_NUM = 0x0000000a&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am sure I am missing something obvious to switch on the analog block, but it has been 3 days now, and I am banging my head on my keyboard...&lt;/P&gt;&lt;P&gt;If someone could help me to make my HSADC analog block run, I would be grateful.&lt;/P&gt;&lt;P&gt;Thanks in advance,&lt;/P&gt;&lt;P&gt;Gilles.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;[edit : add registers after trigger ]&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 31 Dec 2013 08:49:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197270#M10568</guid>
      <dc:creator>Gilles</dc:creator>
      <dc:date>2013-12-31T08:49:12Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197271#M10569</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello iranna,&lt;/P&gt;&lt;P&gt;were facing also the problem that we don't get constant values. For test purpose I switched the HSADC to LRADC2-pin (via HW_HSADC_CTRL2) where I have a simple voltage divider (10k/3,5k to 3.3V) with an 100nF capacitor to GND.&lt;/P&gt;&lt;P&gt;I get 12bit values beween about 0x7b0 and 0x880. Most values are near 0x810 but about every 10th value is strange smaller or greater. I write 0x385 in HW_HSADC_CTRL2.&lt;/P&gt;&lt;P&gt;When I bypass ADC sample and hold logics by writing 0x395 in HW_HSADC_CTRL2 I get nearly constant values (0x7ef..0x7f2). Therefore I think I have wrong values for sample and hold logic in HW_HSADC_CTRL2.&lt;/P&gt;&lt;P&gt;Can you help me?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 Jan 2014 09:30:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197271#M10569</guid>
      <dc:creator>michaelkoelbl</dc:creator>
      <dc:date>2014-01-03T09:30:50Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197272#M10570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Were you able to read sampled data from HSADC. I was able to configure the adc properly but i am unable to understand the data read from the HW_HSADC_FIFO_DATA register. Is it the sampled data or some setting register regarding DMA. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Aug 2015 06:21:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197272#M10570</guid>
      <dc:creator>imravi</dc:creator>
      <dc:date>2015-08-06T06:21:54Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197273#M10571</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Hi &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Were you able to read sampled data from HSADC. I was able to configure the adc properly but i am unable to understand the data read from the HW_HSADC_FIFO_DATA register. Is it the sampled data or some setting register regarding DMA. &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I have configured the HSADC as per the code given here and the registers show the values as set in the code later if i read those registers. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Is DMA the only way of reading data from the HSADC ?&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Aug 2015 06:23:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197273#M10571</guid>
      <dc:creator>imravi</dc:creator>
      <dc:date>2015-08-06T06:23:41Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197274#M10572</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Ravi,&lt;/P&gt;&lt;P&gt;its a long time ago and we stopped using the HSADC as the measurement quality was too bad for our purpose. What I can remember is that you only can read the sample correctly if all settings concerning Trigger Mode / Single Mode / Loop Modes are OK. Otherwise the HSADC does not work.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Aug 2015 14:04:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197274#M10572</guid>
      <dc:creator>michaelkoelbl</dc:creator>
      <dc:date>2015-08-07T14:04:23Z</dc:date>
    </item>
    <item>
      <title>Re: i.mx28 HSADC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197275#M10573</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI &lt;A _jive_internal="true" data-avatarid="1034" data-externalid="" data-online="false" data-presence="null" data-userid="209337" data-username="michaelkoelbl" href="https://community.nxp.com/people/michaelkoelbl" style="font-weight: bold; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: inherit;"&gt;Michel&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regarding setting the modes correctly i will try to set it properly. But do you have some sample code from your past work then it will be really very helpful.&lt;/P&gt;&lt;P&gt;I am able to read data from the HW_HSADC_FIFO_DATA register but the overflow bit for fifo is also getting set when i am trying to capture a single samle in one sequence and one sequence only. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IF you can help me with the data reading part from the hsadc as not much is given in the documentation other than that for this purpose DMA has to be used.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Aug 2015 10:36:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-mx28-HSADC/m-p/197275#M10573</guid>
      <dc:creator>imravi</dc:creator>
      <dc:date>2015-08-08T10:36:03Z</dc:date>
    </item>
  </channel>
</rss>

