悲催的是我的串口有点问题,没法print信息。只能Debug查看变量看数值了。幸好AD转换代码不多,用F10看的转换结果。具体配置参考datasheet各个寄存器的配置。
/*************************************************************************************
* main.c: the main file
* NXP --> LPC1768
*
*
* Author : light
* Date : 2012-4-21
*
* Email : lightwu@hotmail.com
***************************************************************************************/
#include
#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();
}
}
上一篇:LPC1768之外部中断
下一篇:2440外部中断实验遇到问题与总结
推荐阅读最新更新时间:2024-03-16 15:46