#include "LPC17xx.H" void adc_init() { LPC_SC->PCONP |= (1 << 12); //set PCADC for power on ADC ; LPC_ADC->ADCR |= (1 << 21); // start adc LPC_PINCON->PINSEL1 &= ~0x003FC000; /* P0.23~26, A0.0~3, function 01 */ LPC_PINCON->PINSEL1 |= 0x00154000; LPC_PINCON->PINMODE1 &= ~0x003FC000; LPC_PINCON->PINMODE1 |= 0x002A8000; } int ADCRead(char channelNum) { int data; LPC_ADC->ADCR &= 0xFFFFFF00; // clear channels LPC_ADC->ADCR |= (1 << 24) | (1 << channelNum); // set chanel and start convert while (!(LPC_ADC->ADGDR & (1<<31))); //wait to done data = LPC_ADC->ADDR7; LPC_ADC->ADCR &= 0xF8FFFFFF; /* stop ADC now */ data = ( data >> 4 ) & 0xFFF; return ( data ); /* return A/D conversion value */ } |
/*------------------------------------------------------------------------------- www.ECA.ir LPC1768 Dev Board Rev.A --------------------------------------------------------------------------------*/ #include <LPC17xx.h> #include <stdio.h> #include "uart.h" #include "adc.h" void Delay (uint32_t Time) { uint32_t i; i = 0; while (Time--) { for (i = 0; i < 5000; i++); } } int main(void) { volatile int i=0; unsigned char lcd_buf[32]; SystemInit(); adc_init(); UART0_Init(); while (1) { i++; sprintf(lcd_buf,"AnalogRead(%d)(A0): %d\r\n\n",i,ADCRead(0)); UART0_SendString(lcd_buf); Delay(2000); } } |
data = LPC_ADC->ADGDR; while(!(data >> 31)) /* test the DONE bit, which is bit 31 */ { data = LPC_ADC->ADGDR; } return(0xfff & (data >> 4)); |
while(!(dr >> 1)) |
while (!(LPC_ADC->ADGDR & (1<<31))); //wait to done data = LPC_ADC->ADDR7; |
data = LPC_ADC->ADGDR; while(!(dr >> 1)) { data = LPC_ADC->ADGDR; } return(0xfff &(data >> 4)); |
/*------------------------------------------------------------------------------- www.ECA.ir LPC1768 Dev Board Rev.A --------------------------------------------------------------------------------*/ #include <lpc17xx.h> main(){ int a; SystemInit(); LPC_GPIO2->FIODIR = 0xfff; LPC_PINCON->PINSEL3 |= (3UL<<30); /* P1.31 is AD0.5 */ LPC_SC->PCONP |= (1<<12); /* Enable power to ADC block */ LPC_ADC->ADCR = (1<< 5) | /* select AD0.5 pin */ (4<< 8) | /* ADC clock is 25MHz/5 */ (1<<21); /* enable ADC */ while(1){ LPC_ADC->ADCR &= ~(7<<24); /* stop conversion */ LPC_ADC->ADCR |= (1<<24); /* start conversion */ while (!(LPC_ADC->ADGDR & (1UL<<31))); /* Wait for Conversion end */ a = (LPC_ADC->ADGDR>>4 & 0xfff); LPC_GPIO2->FIOPIN = a>>4; } } |