<?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>LPCXpresso IDE中的主题 Single Software Controlled ADC Conversion on LPC1769</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593364#M30422</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by lsimons on Fri Feb 03 08:49:48 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;In order to sample a single ADC channel on the LPC1769, I used Timer0 to start a software conversion (set the START bits in ADCR to 001).&amp;nbsp; I have this Timer0 interrupt toggling a pin so I can verify that it is occurring at the desired 4kHz.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the ADC interrupt handler, I can see the DONE bit on ADGDR reset on reading the data (which I think is how that interrupt is cleared?).&amp;nbsp; The ADC interrupt fires, but it is toggling it's debug pin at almost 1MHz.&amp;nbsp; Since this is faster than than the ADC's fastest rate, it looks to me like I'm missing something when it comes to resetting the interrupt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After reading the user manual some more, it looks like maybe I should just put the ADC into START on MATch mode and save the function calls.&amp;nbsp; However, I'd like to understand what's going on before I rewrite the architecture.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Louis&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 02:49:12 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T02:49:12Z</dc:date>
    <item>
      <title>Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593364#M30422</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by lsimons on Fri Feb 03 08:49:48 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;In order to sample a single ADC channel on the LPC1769, I used Timer0 to start a software conversion (set the START bits in ADCR to 001).&amp;nbsp; I have this Timer0 interrupt toggling a pin so I can verify that it is occurring at the desired 4kHz.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the ADC interrupt handler, I can see the DONE bit on ADGDR reset on reading the data (which I think is how that interrupt is cleared?).&amp;nbsp; The ADC interrupt fires, but it is toggling it's debug pin at almost 1MHz.&amp;nbsp; Since this is faster than than the ADC's fastest rate, it looks to me like I'm missing something when it comes to resetting the interrupt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After reading the user manual some more, it looks like maybe I should just put the ADC into START on MATch mode and save the function calls.&amp;nbsp; However, I'd like to understand what's going on before I rewrite the architecture.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Louis&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593364#M30422</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:12Z</dc:date>
    </item>
    <item>
      <title>Re: Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593365#M30423</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by lsimons on Fri Feb 03 09:36:38 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;So, after changing the ADCR register START bits to begin capture on toggle of MAT0.1 (external match from Timer 0 at MR1 match), the ADC interrupt is occuring at 960 kHz.&amp;nbsp; I don't know if this is a coincidence (24 MHz ADC peripheral clock / 960 kHz = 25.0), but it seems like I'm not understanding how to prevent immediate re-entry into the ADC interrupt.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593365#M30423</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:13Z</dc:date>
    </item>
    <item>
      <title>Re: Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593366#M30424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by lsimons on Fri Feb 03 12:23:45 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;So, I modified the code to only initiate an ADC read once.&amp;nbsp; The ADC Interrupt handler keeps firing in the hundreds of hertz rather than just once as it should.&amp;nbsp; It seems like it's definitely because the ADC interrupt bit isn't clearing in IABR0.&amp;nbsp; Bit 22 remains high even after reading from the ADC data registers.&amp;nbsp; The funny thing is the ADC data register done bit succesfully clears.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am I missing something stupid?&amp;nbsp; I've checked the errata sheet and it doesn't mention a problem with ADC interrupts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's my ADC handler.&amp;nbsp; I've tried to make it somewhat self-documenting:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void ADC_IRQHandler(void)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16_t result;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t adc_status;

&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_set_timing_pin_high();

&amp;nbsp;&amp;nbsp;&amp;nbsp; set_reg_masked_bits(&amp;amp;LPC_ADC-&amp;gt;ADCR, 7&amp;lt;&amp;lt;24, 0&amp;lt;&amp;lt;24);

&amp;nbsp;&amp;nbsp;&amp;nbsp; /// @note Interrupt SHOULD BE cleared when ADC read
&amp;nbsp;&amp;nbsp;&amp;nbsp; adc_status = LPC_ADC-&amp;gt;ADSTAT;
&amp;nbsp;&amp;nbsp;&amp;nbsp; result = LPC_ADC-&amp;gt;ADGDR &amp;amp; 0xFFFF;

&amp;nbsp;&amp;nbsp;&amp;nbsp; /*if (on_complete_handler)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on_complete_handler(result);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }*/

&amp;nbsp;&amp;nbsp;&amp;nbsp; debug_set_timing_pin_low();

&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Edit:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It's starting to look like a timing bug.&amp;nbsp; If I put a breakpoint into the handler before anything happens, and then start running again, the interrupt is cleared properly.&amp;nbsp; I can't find any type of timing requirement in the user manual, though.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593366#M30424</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:13Z</dc:date>
    </item>
    <item>
      <title>Re: Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593367#M30425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by lsimons on Fri Feb 03 14:04:31 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;For those playing along at home, I think it's solved.&amp;nbsp; It's not pretty, and I don't think it should be necessary (I may be reading the manual wrong), but if I read from all of the channel registers, the interrupt clears on returning from the handler.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t dummy;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( i = 0; i &amp;lt; 8; i++ )
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dummy = ((uint32_t *)0x40034010)&lt;I&gt;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dummy = dummy &amp;gt;&amp;gt; 4;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dummy = ( dummy &amp;gt;&amp;gt; 4 ) &amp;amp; 0xFFF;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/I&gt;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm hoping to hear back from NXP on why this is and will provide an update if it's useful.&amp;nbsp; It's also possible I've messed up some magic bit.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593367#M30425</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:14Z</dc:date>
    </item>
    <item>
      <title>Re: Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593368#M30426</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Ex-Zero on Fri Feb 03 14:30:42 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Sorry, can't follow you without timer setup :rolleyes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is a working timer triggered sample: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#ifdef __USE_CMSIS
#include "LPC17xx.h"
#endif

#define LED&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //define GPIO0.21 LED
#define LED_TOG LPC_GPIO0-&amp;gt;FIOPIN^=(1&amp;lt;&amp;lt;LED);

volatile unsigned int adc0_val=0;
volatile unsigned char adc0_ready=0;

void adc_init(void)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //init adc
{
 LPC_SC-&amp;gt;PCONP |= (1 &amp;lt;&amp;lt; 12);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set adc power
 LPC_PINCON-&amp;gt;PINSEL1 &amp;amp;= ~(3&amp;lt;&amp;lt;14);
 LPC_PINCON-&amp;gt;PINSEL1 |=&amp;nbsp; (1&amp;lt;&amp;lt;14);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set AD0.0 P0.23

 LPC_ADC-&amp;gt;ADCR = ( 0x01 &amp;lt;&amp;lt; 0 ) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //channel 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( 4 &amp;lt;&amp;lt;&amp;nbsp; 8 ) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //CLKDIV 4 =&amp;gt; 25MHz /5 = 5 MHz
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( 1 &amp;lt;&amp;lt; 21 ) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //normal operation
//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( 0 &amp;lt;&amp;lt; 24 ) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //start conversion
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( 4 &amp;lt;&amp;lt; 24 ) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //start conversion with MAT0.1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ( 0 &amp;lt;&amp;lt; 27 ) ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //start conversion on rising edge of match
 LPC_ADC-&amp;gt;ADINTEN = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //int channel0 enable
 NVIC_EnableIRQ(ADC_IRQn);&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 int enable
}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //end adc init

void ADC_IRQHandler(void)
{
 unsigned int regVal,regOver;
 regVal = LPC_ADC-&amp;gt;ADSTAT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //clear interrupt
 if (regVal &amp;amp; 0x0000FF00)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //check OVERRUN error first
 {
&amp;nbsp; regOver = (regVal &amp;amp; 0x0000FF00) &amp;gt;&amp;gt; 0x08;
&amp;nbsp; switch (regOver)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; case 0x01:regOver = LPC_ADC-&amp;gt;ADDR0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x02:regOver = LPC_ADC-&amp;gt;ADDR1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x04:regOver = LPC_ADC-&amp;gt;ADDR2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x08:regOver = LPC_ADC-&amp;gt;ADDR3;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x10:regOver = LPC_ADC-&amp;gt;ADDR4;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x20:regOver = LPC_ADC-&amp;gt;ADDR5;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x40:regOver = LPC_ADC-&amp;gt;ADDR6;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x80:regOver = LPC_ADC-&amp;gt;ADDR7;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; default:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp; }
 }
 else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //no overrun
 {
&amp;nbsp; regVal = (regVal &amp;amp; 0x000000FF);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //check done bit
&amp;nbsp; switch (regVal)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; case 0x01:regVal = LPC_ADC-&amp;gt;ADDR0;&amp;nbsp;&amp;nbsp;&amp;nbsp; //read channel 0
&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_val = (regVal &amp;gt;&amp;gt; 4) &amp;amp; 0xFFF;//calc 12 bit value
&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_ready =1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 adc ready
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LED_TOG;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //toggle LED
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x02:regVal = LPC_ADC-&amp;gt;ADDR1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x04:regVal = LPC_ADC-&amp;gt;ADDR2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x08:regVal = LPC_ADC-&amp;gt;ADDR3;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x10:regVal = LPC_ADC-&amp;gt;ADDR4;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x20:regVal = LPC_ADC-&amp;gt;ADDR5;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x40:regVal = LPC_ADC-&amp;gt;ADDR6;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; case 0x80:regVal = LPC_ADC-&amp;gt;ADDR7;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp;&amp;nbsp; default:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
&amp;nbsp; }
 }
}

void timer0_init(void)
{
 LPC_TIM0-&amp;gt;MR1 = 25000;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MR1 counter @ 25MHz = 1KHz
 LPC_TIM0-&amp;gt;MCR = (3&amp;lt;&amp;lt;3);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //interrupt &amp;amp; reset MR1
 LPC_TIM0-&amp;gt;EMR = (1&amp;lt;&amp;lt;1)|(3&amp;lt;&amp;lt;6);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //toggle external match bit, ADC read = 1/2 of 1kHz
//set match bit to MAT0.1 output is not necessary !!!
 LPC_PINCON-&amp;gt;PINSEL3 =(0x03&amp;lt;&amp;lt;26);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set MAT0.1 @ GPIO 1.29
 LPC_TIM0-&amp;gt;TCR =1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //run timer 0
}

int main(void)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //main
{
 LPC_GPIO0-&amp;gt;FIODIR |= (1&amp;lt;&amp;lt;LED);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //set LED output
 adc_init();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //init ADC
 timer0_init();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //init timer0
 while(1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //start loop
 {
&amp;nbsp; if(adc0_ready)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 ready
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; adc0_ready=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //reset adc ready
&amp;nbsp;&amp;nbsp; //LED_TOG;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //toggle LED
&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //end adc ready
 }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //end loop
 return 0 ;
}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //end main
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593368#M30426</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:14Z</dc:date>
    </item>
    <item>
      <title>Re: Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593369#M30427</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by lsimons on Wed Feb 08 07:08:11 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;That looks very similar to the timer triggered version I had impemented, though I hadn't checked for OVERRUN or tried reading from any of the registers except the global ADDR.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Reading the individual registers rather than the global ADDR seems to fix it for me.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Louis&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593369#M30427</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:15Z</dc:date>
    </item>
    <item>
      <title>Re: Single Software Controlled ADC Conversion on LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593370#M30428</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by elef on Fri Aug 03 22:24:13 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: Zero&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
&amp;nbsp; regVal = LPC_ADC-&amp;gt;ADSTAT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //clear interrupt
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I might be wrong, but i think reading ADSTAT doesn't clear the interrupt as far as i can tell... I think you actually have to read the data registers to clear the DONE flags...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:49:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Single-Software-Controlled-ADC-Conversion-on-LPC1769/m-p/593370#M30428</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:49:16Z</dc:date>
    </item>
  </channel>
</rss>

