I have just started writing a simple application for the LPC2129. I have a problem with polling the DONE bit of the ADC. The ADC clock is 3.68 MHz. I set the ADC to be 10 bits, single shot. I start the ADC and then poll the done bit like this:- while( !(ADDR & 0x80000000) ); The code is compiled using the Keil ARM tools (demo version). When I run the code on the simulator it works correctly, when I run it on the target it returns incorrect values. The returned value does track the input voltage but is quantised to 0x0000, 0x6000, 0x8000 or 0xE000 (Only 4 discrete values). If I single step or place a delay function before polling the DONE bit then the code runs correctly. Am I doing something wrong or is there a problem with polling this bit?
The ADC registers are defined like this:- /* A/D Converter */ #define ADCR (*((volatile unsigned long *) 0xE0034000)) #define ADDR (*((volatile unsigned long *) 0xE0034004)) I think that's correct. I did notice a problem when single-stepping with the ULINK in that the test for the DONE bit gets stuck because in single step mode the bit is cleared before it is tested. I have to overwrite the CPU register that is used for the comparison in order to force it out of the loop. Once I've done that the result is always correct in single-step mode. Paul
"The ADC registers are defined like this ... I think that's correct." I do too, so a few more things: