PHY6222配置多路ADC采集的时候,使用软件定时20ms采集一次导致配网失败,将采集频率降低到100ms一次的时候就没有问题,是不是我ADC多路配置有问题?
Code: Select all
tal_adc_deinit(TUYA_ADC_NUM_0);
TUYA_ADC_BASE_CFG_T adc_cfg = {
.ch_list.data = 1<<0,
.width = 12,
.type = TUYA_ADC_EXTERNAL_SAMPLE_VOL,
};
tal_adc_init(TUYA_ADC_NUM_0, &adc_cfg);
OPERATE_RET tkl_adc_init(TUYA_ADC_NUM_E port_num, TUYA_ADC_BASE_CFG_T *cfg)
{
if(port_num == TUYA_ADC_NUM_0) {
if(cfg == NULL) {
return OPRT_INVALID_PARM;
}
memcpy(&tkl_adc_cfg[0], cfg, SIZEOF(TUYA_ADC_BASE_CFG_T));
if(cfg->ch_list.data == 0) {
return OPRT_INVALID_PARM;
}
TY_PRINTF("cfg->ch_list.data: %d", cfg->ch_list.data);
UINT8_T channel = get_channel_num(cfg->ch_list.data) + 2;
TY_PRINTF("channel: %d", channel);
if(channel >= ADC_CH_NUM || channel < 2) {
return OPRT_NOT_SUPPORTED;
}
if(cfg->width != 12) {
return OPRT_NOT_SUPPORTED;
}
hal_adc_init();
sg_adc_cfg[0].channel = 0xA4;
sg_adc_cfg[0].is_continue_mode = 0;
sg_adc_cfg[0].is_differential_mode = 0;
sg_adc_cfg[0].is_high_resolution = 0;
hal_adc_clock_config(HAL_ADC_CLOCK_320K);
sg_adc_value[0] = 0;
}
return OPRT_OK;
}
OPERATE_RET tkl_adc_read_voltage(TUYA_ADC_NUM_E port_num, INT32_T *buff, UINT16_T len)
{
if(port_num == TUYA_ADC_NUM_0) {
if(buff == NULL) {
return OPRT_INVALID_PARM;
}
if(len == 0) {
return OPRT_INVALID_PARM;
}
hal_adc_config_channel(sg_adc_cfg[0], tkl_adc_evt_handler);
hal_adc_start(INTERRUPT_MODE);
WaitUs(300);
UINT32_T adc_mv = (UINT32_T)(sg_adc_value[0] * 1000);
UINT32_T adc_mv1 = (UINT32_T)(sg_adc_value[1] * 1000);
UINT32_T adc_mv2 = (UINT32_T)(sg_adc_value[2] * 1000);
buff[0] = adc_mv;
buff[1] = adc_mv1;
buff[2] = adc_mv2;
}
return OPRT_OK;
}
VOID_T tkl_adc_evt_handler(adc_Evt_t* pev)
{
if(pev->ch==ADC_CH1N_P11)
{
sg_adc_value[0] = hal_adc_value_cal(pev->ch, pev->data, pev->size,
sg_adc_cfg[0].is_high_resolution & BIT(pev->ch),
sg_adc_cfg[0].is_differential_mode & BIT(pev->ch));
}
if(pev->ch==ADC_CH2P_P14)
{
sg_adc_value[1] = hal_adc_value_cal(pev->ch, pev->data, pev->size,
sg_adc_cfg[1].is_high_resolution & BIT(pev->ch),
sg_adc_cfg[1].is_differential_mode & BIT(pev->ch));
}
if(pev->ch==ADC_CH3P_P20)
{
sg_adc_value[2] = hal_adc_value_cal(pev->ch, pev->data, pev->size,
sg_adc_cfg[2].is_high_resolution & BIT(pev->ch),
sg_adc_cfg[2].is_differential_mode & BIT(pev->ch));
}
}
如果配置有问题的话,需要怎么修改?
求助大佬