[Tyos] PHY6222的ADC采样问题

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


Post Reply
wuyoujr
Posts: 5

Tuyaos版本:

问题描述:
参考你们官方文档里面的那篇微博去实现了两路ADC采样并定义了一个10ms的软件定时器去获取两路通道的ADC值。但是在软件定时器里面去获取ADC值会影响我的定时器值定时不准。

参考微博:viewtopic.php?t=2426&hilit=phy6222+ADC

相关波形:见附件

相关代码:
tal_adc_deinit(TUYA_ADC_NUM_0); //++1027

Code: Select all

TUYA_ADC_BASE_CFG_T Func_adc_cfg[2] = {
		[0]={.ch_list.data = 1<<0,
		.width = 12,
		.type = TUYA_ADC_EXTERNAL_SAMPLE_VOL,},
		[1]={.ch_list.data = 1<<3,
		.width = 12,
		.type = TUYA_ADC_EXTERNAL_SAMPLE_VOL,}
};
tal_adc_init(TUYA_ADC_NUM_0, &Func_adc_cfg[0]);

hal_timer_init(Func_timer_int_process);
hal_timer_mask_int(AP_TIMER_ID_5,1);
hal_timer_set(AP_TIMER_ID_5,125);

void Func_timer_int_process(uint8_t evt)
{
switch(evt)
{
case HAL_EVT_TIMER_5:


Code: Select all

        if(TestVarII==0)
        {
            TestVarII = 1;
            tal_gpio_write(TUYA_GPIO_NUM_33,1);
        }
        else
        {
            TestVarII = 0;
            tal_gpio_write(TUYA_GPIO_NUM_33,0);
        }
        break;

    case HAL_EVT_TIMER_6:
        LOG("t6\n");
        break;

    case HAL_EVT_WAKEUP:
        LOG("wakeup\n");
        LOG("timer will disable when sleep,so if you want it work please init it when wakeup");
        break;

    case HAL_EVT_SLEEP:
        LOG("sleep\n");
        break;

    default:
        LOG("err ");
        break;
}

}

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) {
return OPRT_NOT_SUPPORTED;
}

Code: Select all

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);

buff[0] = adc_mv;
buff[1] = adc_mv1;

return OPRT_OK;

}

static void FunctionI_timeout_handler(TIMER_ID timer_id, void *arg)
{

Code: Select all

	tal_adc_read_voltage(TUYA_ADC_NUM_0,GetHandleAndBarkAD,1);

if(TestVar==0)
	{
			TestVar = 1;
			tal_gpio_write(TUYA_GPIO_NUM_34,1);
	}
	else
	{
			TestVar = 0;
			tal_gpio_write(TUYA_GPIO_NUM_34,0);
	}

}


Tags:
Post Reply