int ReadAdc(BYTE ch)
{
DWORD preScaler;
DWORD ADCCON_save = g_pADCReg_bat->ADCCON;
int iRet =50;
int i;
//DEBUGCHK(v_pIOPregs!=NULL);
if(ghBattTouchMutex )
{
WaitForSingleObject(ghBattTouchMutex, MUTEX_TIMEOUT);
}
preScaler = 49; //A/D converter freq = PCLK/(prescaler+1),这个值是根据你采样频率来设置。
g_pADCReg_bat->ADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //enable prescaler,set channel}
for(i = 0;i<500;i++); //delay to set up the channel
g_pADCReg_bat->ADCCON |= 0x1; //start ADC
while(g_pADCReg_bat->ADCCON & 0x1); //check if Enable_start is low
while(!(g_pADCReg_bat->ADCCON&0x8000)); //check if EC(End of Conversion) flag is high
iRet = (int)g_pADCReg_bat->ADCDAT0 & 0x3ff;
g_pADCReg_bat->ADCCON = ADCCON_save;
if(ghBattTouchMutex)
{
ReleaseMutex(ghBattTouchMutex);
}
return iRet;
}
WINCE60 AD转换函数
最新推荐文章于 2020-05-17 21:48:27 发布