void ADC_Init(BYTE bCh)
{
//ad6 數字輸入檢測模式
ATDDIEN = 0xFFFF & (~bCh); //AN6開啟輸入模式
ATDCTL1 = 0x3F; //選用10位模數轉換,放電檢測模式
ATDCTL2 = 0x40; //啟動A/D轉換,快速清零,禁止中斷
ATDCTL3 = 0x88; //每次轉換1個通道,右對齊模式
ATDCTL4 = (BUS_CLOCK / (ADC_CLK * 2) - 1) | 0x60; //10周期掃描,AD模塊時鐘頻率為2MHz BUS_CLOCK / 4000000 -1 = ATDOCTL4
#ifndef MULTI_CHANNEL
ATDCTL5 = 0x0F & bCh; //轉換AD00和AD01,單次轉換模式
#else
#endif
}
/*--------------------------------------------------------------------------*/
/* @(p) */
/* NAME : XXXXXXX */
/* FUNCTION : This is the initialization function of the XX module */
/* RETURN : none */
/* ARGUMENT : none */
/* CREATE : XXXX 2013/06/21 */
/* UPDATE : */
/* REMARK : */
/*--------------------------------------------------------------------------*/
void ADC_Close(void)
{
//ATDCTL5 &= 0xCF;
}
SHORT ADC_StartConvert(BYTE bCh)
{
WORD wErrTime = 0;
ATDCTL5 = 0x0F & bCh;
//VOL1 超時故障
for(wErrTime=0; wErrTime<ADC_ERRTIME; wErrTime++)
{
if(ATDSTAT0_SCF==1) //TXREG EMPTY
{
break;
}
}
if(wErrTime < ADC_ERRTIME)
{
m_wADin = (WORD)(*((WORD*)ADC_BASE_ADDR ));
ATDSTAT0_SCF = 1;
}
else
{
//g_stcSYSFaultFlag.bTempSensorFaultFlag = 1;
//counter
//while(1);
return -1;
}
return (m_wADin);
}
|