⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 lpc2368 source files
💻 C
字号:
/*****************************************************************************
 *   adc.c:  ADC module file for NXP LPC23xx Family Microprocessors
 *   ***********  DEVELOPED BY RAVINDRANATH G *************
 ******************************************************************************/
#include "LPC23xx.h"         /* LPC23xx definitions */
#include "type.h"
#include "adc.h"
//******************************************************************************
void init_ADC(BYTE channel)
{
	/* Enable CLOCK into ADC controller */
    PCONP |= (1 << 12);

	AD0CR = ( 0x01 << channel ) | 	/* SEL=1,select channel 0~7 on ADC0.0 */
		( 1 << 8 ) |  		/* CLKDIV = Fpclk / 1000000 - 1 */ 
		( 1 << 11 ) |		/* CLKDIV = 9 i.e. 4.2 Mhz*/
		( 0 << 16 ) | 		/* BURST = 0, no BURST, software controlled */
		( 0 << 17 ) |  		/* CLKS = 0, 11 clocks/10 bits */
		( 1 << 21 ) |  		/* PDN = 1, normal operation */
		( 0 << 22 ) |  		/* TEST1:0 = 00 */
		( 0 << 24 ) |  		/* START = 0 A/D convezrsion stops */
		( 0 << 27 );	   /* EDGE = 0 (CAP/MAT singal falling,trigger A/D conversion) */ 
}

DWORD read_ADC(BYTE channel)
{
	DWORD regVal, ADC_Data;

	AD0CR &= 0xFFFFFF00;  /* switch channel,start A/D convert */
    AD0CR |= (1 << 24) | (1 << channel); //AD0.0

	while ( 1 )			/* wait until end of A/D convert */
    {
	    regVal = *(volatile unsigned long *)(AD0_BASE_ADDR 
			+ ADC_OFFSET + ADC_INDEX * channel);
				/* read result of A/D conversion */
	    if ( regVal & ADC_DONE )
	    {
		    break;
	    }
    }

	AD0CR &= 0xF8FFFFFF;	/* stop ADC now */
	if ( regVal & ADC_OVERRUN )	/* save data when it's not overrun, otherwise, return zero */
    {
	    return ( 0 );
    }
    ADC_Data = ( regVal >> 6 ) & 0x3FF;
    return ( ADC_Data );	/* return A/D conversion value */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -