bleSDK_expansion_board/projects/bleRemoteControl/Master/src/rf_vbg_cal.c

53 lines
1.7 KiB
C

uint16_t ft_rfbandgap_test(void)
{
// coreldo replace aonldo
APBMISC->AON_PMU_CTRL.AON_PWR_SEL_RUN = 1;
uint16_t adc_data = 0, trim_val = 0x10;
uint16_t max_rfbandgap_voleage = 0, min_rfbandgap_voleage = 0, rfbandgap_voleage = 0, coreldo_voltage = 0;
#if 1//(DBG_MODE)
RF->ANA_TRIM.LDO_RX_TRIM = 0;
RF->ANAMISC_CTRL1.AT0_SEL = 0;
RF->ANA_PWR_CTRL.TEST_EN_LDO_IF = 1;
RF->DIG_CTRL.LDO_TEST_EN = 1;
RF->ANA_EN_CTRL.EN_BG = 1;
GPIO->DIR_CLR = 1 << 18;
iom_ctrl(18, IOM_ANALOG);
#endif
// coreldo_voltage = RD_32(CORELDO_VOLTAGE_ADDR);
coreldo_voltage = 1220;//1194;//get_trim_vdd12_voltage();//1200;
max_rfbandgap_voleage = 1170 * 1024 / coreldo_voltage;
min_rfbandgap_voleage = 1130 * 1024 / coreldo_voltage;
rfbandgap_voleage = (max_rfbandgap_voleage + min_rfbandgap_voleage) >> 1;
debug("0---max:%d, min:%d, rf_vbg:%d\r\n\r\n",max_rfbandgap_voleage, min_rfbandgap_voleage, rfbandgap_voleage);
sadc_init(SADC_ANA_VREF_1V2);
sadc_conf(SADC_CR_DFLT);
bootDelayMs(2);
RF->RF_RSV |= 1 << 1;
for (uint8_t step = 0x10; step > 0; step >>= 1)
{
RF->ANA_TRIM.BG_RES_TRIM = trim_val;
bootDelayMs(2);
adc_data = sadc_read(15, 10);
debug("0---step:%02x, trim_val:%02X,adc:%d\r\n",step, trim_val,adc_data);
if ((adc_data > min_rfbandgap_voleage) && (adc_data < max_rfbandgap_voleage))
break;
trim_val = trim_val + (step >> 1) - ((adc_data > rfbandgap_voleage) ? step : 0);
}
RF->RF_RSV &= ~(1UL << 1);
debug("0---trim_val:0x%02X\r\n\r\n",trim_val);
return trim_val;
}