int IMM_GetOneChannelValue(int dwChannel, int deCount) { unsigned int u4Sample_times = 0; unsigned int dat = 0; unsigned int u4channel[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0}; unsigned int adc_esult=0; /* Enable ADC power bit */ mt65xx_ADC_2G_power_up(); mt65xx_ADC_3G_power_up(); /* Initialize ADC control register */ AUXADC_DRV_WriteReg16(AUXADC_CON0, 0); AUXADC_DRV_WriteReg16(AUXADC_CON1, 0); AUXADC_DRV_WriteReg16(AUXADC_CON2, 0); AUXADC_DRV_WriteReg16(AUXADC_CON3, 0); do { //pmic_adc_vbat_enable(KAL_TRUE); // move to the whom driver //pmic_adc_isense_enable(KAL_TRUE); // move to the whom driver AUXADC_DRV_WriteReg16(AUXADC_CON1, 0); AUXADC_DRV_WriteReg16(AUXADC_CON1, 0x1FFF); AUXADC_DVT_DELAYMACRO(1000); /* Polling until bit STA = 0 */ while (0 != (0x01 & AUXADC_DRV_ReadReg16(AUXADC_CON3))); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT0); u4channel[0] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT1); u4channel[1] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT2); u4channel[2] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT3); u4channel[3] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT4); u4channel[4] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT5); u4channel[5] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT6); u4channel[6] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT7); u4channel[7] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT8); u4channel[8] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT9); u4channel[9] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT10); u4channel[10] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT11); u4channel[11] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT12); u4channel[12] += (dat & 0x0FFF); dat = AUXADC_DRV_ReadReg16(AUXADC_DAT13); u4channel[13] += (dat & 0x0FFF); u4Sample_times++; } while (u4Sample_times < deCount); /* Disable ADC power bit */ mt65xx_ADC_2G_power_down(); mt65xx_ADC_3G_power_down(); #if 0 printf("BAT_GetVoltage : channel_0 = %d / %d \n", u4channel[0], u4Sample_times ); printf("BAT_GetVoltage : channel_1 = %d / %d \n", u4channel[1], u4Sample_times ); printf("BAT_GetVoltage : channel_2 = %d / %d \n", u4channel[2], u4Sample_times ); printf("BAT_GetVoltage : channel_3 = %d / %d \n", u4channel[3], u4Sample_times ); printf("BAT_GetVoltage : channel_4 = %d / %d \n", u4channel[4], u4Sample_times ); printf("BAT_GetVoltage : channel_5 = %d / %d \n", u4channel[5], u4Sample_times ); printf("BAT_GetVoltage : channel_6 = %d / %d \n", u4channel[6], u4Sample_times ); printf("BAT_GetVoltage : channel_7 = %d / %d \n", u4channel[7], u4Sample_times ); printf("BAT_GetVoltage : channel_8 = %d / %d \n", u4channel[8], u4Sample_times ); printf("BAT_GetVoltage : channel_9 = %d / %d \n", u4channel[9], u4Sample_times ); printf("BAT_GetVoltage : channel_10 = %d / %d \n", u4channel[10], u4Sample_times ); printf("BAT_GetVoltage : channel_11 = %d / %d \n", u4channel[11], u4Sample_times ); printf("BAT_GetVoltage : channel_12 = %d / %d \n", u4channel[12], u4Sample_times ); printf("BAT_GetVoltage : channel_13 = %d / %d \n", u4channel[13], u4Sample_times ); #endif /* Value averaging */ u4channel[0] = u4channel[0] / deCount; u4channel[1] = u4channel[1] / deCount; u4channel[2] = u4channel[2] / deCount; u4channel[3] = u4channel[3] / deCount; u4channel[4] = u4channel[4] / deCount; u4channel[5] = u4channel[5] / deCount; u4channel[6] = u4channel[6] / deCount; u4channel[7] = u4channel[7] / deCount; u4channel[8] = u4channel[8] / deCount; u4channel[9] = u4channel[9] / deCount; u4channel[10] = u4channel[10] / deCount; u4channel[11] = u4channel[11] / deCount; u4channel[12] = u4channel[12] / deCount; u4channel[13] = u4channel[13] / deCount; adc_esult = ((u4channel[dwChannel]*VOLTAGE_FULL_RANGE)/ADC_PRECISE); return adc_esult; }
static u16 mt_tpd_read_adc(u16 pos) { AUXADC_DRV_SetBits16((volatile u16 *)AUXADC_TP_ADDR, pos); AUXADC_DRV_SetBits16((volatile u16 *)AUXADC_TP_CON0, 0x01); while(0x01 & AUXADC_DRV_ReadReg16((volatile u16 *)AUXADC_TP_CON0)) { ; } //wait for write finish return AUXADC_DRV_ReadReg16((volatile u16 *)AUXADC_TP_DATA0); }