悲催的是我的串口有点问题,没法print信息。只能Debug查看变量看数值了。幸好AD转换代码不多,用F10看的转换结果。具体配置参考datasheet各个寄存器的配置。
/************************************************************************************* * main.c: the main file * NXP --> LPC1768 * * * Author : light * Date : 2012-4-21 * * Email : lightwu@hotmail.com ***************************************************************************************/ #include <LPC17XX.h> #include "../Source/uart.h" #define ADC_MAX 0XFFF uint32_t AdcFlag = 1; /******************************************************************************** ** Descriptions :ADC initialize ** ** parameters :None ** Returned value :None *********************************************************************************/ void AdcInit(void) { LPC_SC->PCONP |= (1<<12); //打开ADC功率控制器 LPC_PINCON->PINSEL3 |= (3<<30); //设为ADC管脚 LPC_ADC->ADCR |= (1<<5); //选择ADC0.5作为输入 LPC_ADC->ADCR |= (4<<8); LPC_ADC->ADCR |= (1<<21); //正常工作模式 // NVIC_EnableIRQ(ADC_IRQn); /* enable irq in nvic */ // LPC_ADC->ADINTEN |= (1<<5); //中断使能 } /******************************************************************************** ** Descriptions :ADC start convert ** ** parameters :None ** Returned value :None *********************************************************************************/ void AdcStart(void) { LPC_ADC->ADCR &= ~(7<<24); //停止转换 LPC_ADC->ADCR |= (1<<24); //开始转换 } /******************************************************************************** ** Descriptions :ADC stop convert ** ** parameters :None ** Returned value :None *********************************************************************************/ void AdcStop(void) { LPC_ADC->ADCR &= ~(7<<24); //停止转换 } /******************************************************************************** ** Descriptions :ADC convert ** ** parameters :None ** Returned value :None *********************************************************************************/ void AdcCovt(void ) { while((~(LPC_ADC->ADGDR))&(1<<31)); //查询等待转换完成标志 // while(AdcFlag); //ADC转换完成中断标志 // AdcFlag = 1; //ADC转换完成中断标志置一 } /******************************************************************************** ** Descriptions :Get ADC convert value ** ** parameters :None ** Returned value :ADC convet value *********************************************************************************/ uint32_t GetAdcCovt(void ) { uint32_t AdcValue; AdcStart(); AdcCovt(); AdcValue = ((LPC_ADC->ADGDR)>>4) & ADC_MAX; //读取转换结果,12位最大值为0XFFF AdcStop(); return AdcValue; } /******************************************************************************** ** Descriptions :ADC finish interrupt ** ** parameters :None ** Returned value :None *********************************************************************************/ void ADC_IRQHandler(void) { AdcFlag = 0; } /*---------------------------------------------------------------------------- The main Function *----------------------------------------------------------------------------*/ int main(void) { SystemInit(); Uart0Init(115200); AdcInit(); while(1) { GetAdcCovt(); } }