【求助】T1-CHL ADC采集阻塞时间太长和adc ddev open error问题
【1】tuyaOS版本:3.11.11
【2】问题描述:
将ADC采样频率设置为8000,每次连续采64个数据点。每隔一段时间,通过tkl_adc_read_data读取64个数据点的采样值,用IO,测量采样前后的时间。发现调用tkl_adc_read_data会导致IO阻塞18.5ms左右。
具体参考图片测试。其中相关的ADC代码如下:
特别说明
1.已经在driver/tkl_adc.c中将ADC_BUF_SIZE_MIN配置为65,能保证ADC连续采64次。
2.哪怕我将ADC配置连续采样数量调整为4,调用tkl_Adc_read_data也需要18.5ms左右Code: Select all
#define CONFIG_BSP_ADC_SAMPLE_TIMES 64
static uint16_t adc_buf[CONFIG_BSP_ADC_SAMPLE_TIMES];
static int init(void)
{
OPERATE_RET ret;
const TUYA_ADC_BASE_CFG_T adc_cfg={
.ch_list.data = 1<<CONFIG_BSP_ADC_CHANNEL,
.ch_nums = 1,
.width = 12,
.mode = TUYA_ADC_CONTINUOUS,
.type = TUYA_ADC_INNER_SAMPLE_VOL,
.conv_cnt = CONFIG_BSP_ADC_SAMPLE_TIMES,
.freq = 8000,
};
ret = tkl_adc_init(CONFIG_BSP_ADC_NUM,&adc_cfg);
if(ret != OPRT_OK){
ELOG("adc init fail:%d");
return 1;
}else{
ILOG("adc init success");
}
return 0;
}
/// @brief 定时采集
/// @param
static void handler(void)
{
OPERATE_RET ret;
uint32_t adc[CONFIG_BSP_ADC_SAMPLE_TIMES];
bsp_gpio_test_ctrl(3,1);
ret = tkl_adc_read_data(CONFIG_BSP_ADC_NUM,adc,CONFIG_BSP_ADC_SAMPLE_TIMES);
bsp_gpio_test_ctrl(3,0);
if(ret!=OPRT_OK){
ELOG("adc read fail:%d",ret);
return ;
}
for(int i=0;i<CONFIG_BSP_ADC_SAMPLE_TIMES;i++){
adc_buf[i] = (uint16_t)(adc[i]);
}
}以下是ADC报错的问题,我程序中仅有一个ADC采集任务,会出现偶尔ADC打开失败的问题,请问需要如何解决?
(代码中handler(void)函数体)