金牌会员
- 积分
- 2775
- 威望
- 1231
- 贡献
- 784
- 兑换币
- 794
- 注册时间
- 2014-4-3
- 在线时间
- 380 小时
|
5#
楼主 |
发表于 2015-4-22 12:16:17
|
只看该作者
uint16 ADC_Once(int MoudelNumber,int Channel,uint8 accuracy,uint8 ab)//采集某路模拟量的AD值
{
uint16 result = 0;
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;
}
//配置正常电源模式,总线时钟,总线时钟4分频,长采样时间使能,设置精度
ADC_CFG1_REG(ADCMoudel) = ADLPC_NORMAL
| ADC_CFG1_ADIV(ADIV_4)
| ADLSMP_LONG
| ADC_CFG1_MODE(ADCCfg1Mode)
| ADC_CFG1_ADICLK(ADICLK_BUS);
//配置禁止异步时钟使能输出,ADxxat通道选择,高速配置,长采样时间
if(ab==0)
{
ADC_CFG2_REG(ADCMoudel) = MUXSEL_ADCA
| ADACKEN_DISABLED
| ADHSC_HISPEED
| ADC_CFG2_ADLSTS(ADLSTS_20) ;
}
else
{
ADC_CFG2_REG(ADCMoudel) = MUXSEL_ADCB
| ADACKEN_DISABLED
| ADHSC_HISPEED
| ADC_CFG2_ADLSTS(ADLSTS_2) ;
}
ADC_SC1_REG(ADCMoudel,A) = AIEN_OFF |DIFF_SINGLE | ADC_SC1_ADCH(Channel);
// hw_adc_config_alt(ADC1_BASE_PTR, &Master_Adc_Config); // 配置ADC1
//等待转换完成
while (( ADC_SC1_REG(ADCMoudel,A) & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK)
{
}
//读取转化结果
result = ADC_R_REG(ADCMoudel,A);
//清ADC转换完成标志
ADC_SC1_REG(ADCMoudel,A) &= ~ADC_SC1_COCO_MASK;
return result;
} |
|