高级会员
- 积分
- 760
- 威望
- 347
- 贡献
- 199
- 兑换币
- 225
- 注册时间
- 2012-11-2
- 在线时间
- 107 小时
|
4#
楼主 |
发表于 2013-4-14 12:55:38
|
只看该作者
uint16 hw_adc_once_init(int MoudelNumber,int Channel,uint8 accuracy,uint8 diff)//采集某路模拟量的AD值
{
uint8 ADCCfg1Mode = 0;
ADC_MemMapPtr ADCMoudel;//保存ADC模块地址指针
switch(accuracy)
{
case 8:
ADCCfg1Mode = 0x00;
break;
case 12:
ADCCfg1Mode = 0x01;
break;
case 10:
ADCCfg1Mode = 0x02;
break;
case 16:
ADCCfg1Mode = 0x03;
break;
default:
ADCCfg1Mode = 0x00;
}
if(MoudelNumber==0)//选择ADC模块0
{
ADCMoudel = ADC0_BASE_PTR;
}
else //选择ADC模块1
{
ADCMoudel = ADC1_BASE_PTR;
}
//1 配置正常电源模式,总线时钟,总线时钟2分频,长采样时间使能,设置精度
ADC_CFG1_REG(ADCMoudel) = ADLPC_NORMAL
| ADC_CFG1_ADIV(ADIV_2)
| ADLSMP_LONG
| ADC_CFG1_MODE(ADCCfg1Mode)
| ADC_CFG1_ADICLK(ADICLK_BUS);
//2 配置禁止异步时钟使能输出,ADxxat通道选择,高速配置,长采样时间
ADC_CFG2_REG(ADCMoudel) = MUXSEL_ADCA
| ADACKEN_DISABLED
| ADHSC_HISPEED
| ADC_CFG2_ADLSTS(ADLSTS_20) ;
//4 设置为硬件触发,参考电压选择外部vref.
ADC_SC2_REG(ADCMoudel) |= ADC_SC2_ADTRG_MASK;
ADC_SC2_REG(ADCMoudel) |= ADC_SC2_REFSEL(0);
//5 硬件平均滤波使能,32次滤波,单次转换开启
ADC_SC3_REG(ADCMoudel) = ADC_SC3_AVGE_MASK | ADC_SC3_AVGS(0x3); //设置平均使能,8次硬件平均
ADC_SC3_REG(ADCMoudel) &= ~ADC_SC3_ADCO_MASK; //开启单次模式
//3 设置通道号,设置差分
if(diff)
{
ADC_SC1_REG(ADCMoudel,A) = AIEN_ON | DIFF_DIFFERENTIAL | ADC_SC1_ADCH(Channel); //设置差分
}
else
{
ADC_SC1_REG(ADCMoudel,A) = AIEN_ON | DIFF_SINGLE | ADC_SC1_ADCH(Channel); //设置单端输入
}
hw_uart_send_string(UART0,(uint8*)"adc_pdb is ok\n\r");
return 1;
} |
|