UINT32 ADC_Init( BYTE unit)
{
UINT32 ADC_Data=0;
PCONP=PCONP|(1<<12); /*ADC上电 */
/*The PCONP register allows turning off selected peripheral functions for the purpose of
saving power. This is accomplished by gating off the clock source to the specified
peripheral blocks.Some peripherals, particularly those that include analog functions, may consume power
that is not clock dependent. These peripherals may contain a separate disable control that
turns off additional circuitry to reduce power.If a peripheral control bit is 1, that peripheral is enabled.
If a peripheral bit is 0, that peripheral’s clock is disabled (gated off) to conserve power */
switch(unit)
{
case 0:
PINSEL1 |= (1<<14); /* AD0.0 *//*引脚功用装备*/
AD0CR=(1<<0) | /* SEL =0,挑选通道0*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR0;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x01|(1<<24) ; /* 设置通道0,并进行第一次转化*/
//DelayNS(20);
while((AD0DR0&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR0&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR0;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
case 1:
PINSEL1 |= (1<<16); /* AD0.1 */
AD0CR=(1<<1) | /* SEL =1,挑选通道1*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR1;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x02|(1<<24) ; /* 设置通道1,并进行第一次转化*/
//DelayNS(20);
while((AD0DR1&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR1&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR1;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
case 2:
PINSEL1 |= (1<<18); /* AD0.2 */
AD0CR=(1<<2) | /* SEL =2,挑选通道2*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR2;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x04|(1<<24) ; /* 设置通道2,并进行第一次转化*/
//DelayNS(20);
while((AD0DR2&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR2&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR2;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
case 3:
PINSEL1 |= (1<<20); /* AD0.3 */
AD0CR=(1<<3) | /* SEL =3,挑选通道3*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR3;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x08|(1<<24) ; /* 设置通道3,并进行第一次转化*/
//DelayNS(20);
while((AD0DR3&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR3&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR3;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
case 4:
PINSEL3 |= (3<<28); /* AD0.4 */
AD0CR=(1<<4) | /* SEL =4,挑选通道4*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR4;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x10|(1<<24) ; /* 设置通道4,并进行第一次转化*/
//DelayNS(20);
while((AD0DR4&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR4&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR4;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
case 5:
PINSEL3|=0xc0000000; /* AD0.5 */
AD0CR=(1<<5) | /* SEL =5,挑选通道5*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR5;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x20|(1<<24) ; /* 设置通道5,进行第一次转化*/
//DelayNS(20);
while((AD0DR5&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR5&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR5;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
case 6:
PINSEL0 |= (3<<24); /* AD0.6 */
AD0CR=(1<<6) | /* SEL =6,挑选通道6*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR6;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x40|(1<<24) ; /* 设置通道6,进行第一次转化*/
//DelayNS(20);
while((AD0DR6&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR6&0x80000000)==0); /*等候转化完毕 */
ADC_Data=AD0DR6; /*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF; /*数值转化*/
/********************************************************/
break;
case 7:
PINSEL0 |= (3<<26); /* AD0.7 */
AD0CR=(1<<7) | /* SEL =7,挑选通道7*/
((Fpclk/1000000-1)<<8) | /* CLKDIV=Fpclk/1000000-1,即转化时钟为1MHz*/
(0<<16) | /* BURST=0,软件操控转化操作 */
(0<<17) | /* CLKS=0, 运用11clock转化 */
(1<<21) | /* PDN=1, 正常作业形式 (非掉电转化形式)*/
(0<<22) | /* Reversed*/
(1<<24) | /* START=1, 直接发动AD转化 */
(0<<27);
//DelayNS(0x10);
ADC_Data=AD0DR7;
/**************************************************/
AD0CR=(AD0CR&0x00FFFF00)|0x40|(1<<24) ; /* 设置通道6,进行第一次转化*/
//DelayNS(20);
while((AD0DR7&0x80000000)==0); /*等候转化完毕 */
//DelayNS(20);
AD0CR=AD0CR|(1<<24); /*再次发动转化 */
while((AD0DR7&0x80000000)==0);/*等候转化完毕 */
ADC_Data=AD0DR7;/*读取转化成果 */
ADC_Data=(ADC_Data>>6)&0x3FF;/*数值转化*/
/********************************************************/
break;
default:
break;
}
//ADC_result = ((ADC_Data*1.0/1023)/0.4*3.3);
return(ADC_Data);
}