现在的位置: 首页 > 综合 > 正文

LPC1768之模数转换ADC

2013年07月11日 ⁄ 综合 ⁄ 共 2778字 ⁄ 字号 评论关闭

悲催的是我的串口有点问题,没法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();
		

	}

}

抱歉!评论已关闭.