Other Parts Discussed in Thread: TMDSEVM437X
Hi all,
I’m testing the operation of the ADC1 in the following environment.
HW : TMDSEVM437X Rev.1.5B
SW : C:\ti\pdk_am437x_1_0_5 & C:\ti\pdk_am437x_1_0_8
(Problem)
ADC1 can not measure accurately if a voltage of 1.6 V or less is input.
I checked the register, but I do not know the cause.
By the way, ADC0 is correctly converted.
Input voltage 1.8V -> (conversion value) 4096 = 1.8V
Input voltage 1.6V -> (conversion value) 3640 = 1.6V
Input voltage 1.2V -> (conversion value) 3413 = 1.5V
Input voltage 1.0V -> (conversion value) 2958 = 1.3V
Input voltage 0.4V-> (conversion value) 2048 = 0.9V
Input power supply is regulated DC power supply.
The setting of ADC1 is as follows.
/* ADC1(MagCard) Wake-Up */
regVal = HW_RD_REG32(SOC_CM_PER_REG + PRCM_CM_PER_MAG_CARD_CLKCTRL);
regVal |= PRCM_CM_PER_MAG_CARD_CLKCTRL_MODULEMODE_ENABLE;
HW_WR_REG32((SOC_CM_PER_REG + PRCM_CM_PER_MAG_CARD_CLKCTRL), regVal);
while ((HW_RD_REG32(SOC_CM_PER_REG + PRCM_CM_PER_MAG_CARD_CLKCTRL) & \
PRCM_CM_PER_MAG_CARD_CLKCTRL_MODULEMODE_MASK) != \
PRCM_CM_PER_MAG_CARD_CLKCTRL_MODULEMODE_ENABLE);
/* Configure the clock divider value. (16bit Register) */
HW_WR_REG16((ADC1_BASE_ADDR + ADC1_CLKDIV), ((ADC1_MODULE_CLOCK/ADC1_AFE_CLOCK) - 1));
/* ADC1 Control value */
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_CTRL),(0x63));
/* ADC1 Config & Delay setup */
/* Step1 */
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPCONFIG1),(0x40001));
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPDELAY1),(0));
/* Step2 */
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPCONFIG2),(0x40001));
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPDELAY2),(0));
/* Step3 */
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPCONFIG3),(0x40001));
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPDELAY3),(0));
/* Step4 */
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPCONFIG4),(0x40001));
HW_WR_REG32((ADC1_BASE_ADDR + ADC1_STEPDELAY4),(0));
Best regards,
Sasaki