T1-CHL ADC采集问题
【1】需求/目标:对咪头按照8K/16K采样速率进行ADC采集,每周期采样64个点
根据T1的tuyaos_demo_examples中的driver_adc例程,将adc配置修改为:
Code: Select all
#define CONFIG_BSP_ADC_CHANNEL 2
#define CONFIG_BSP_ADC_SAMPLE_TIMES 64
#define CONFIG_BSP_ADC_NUM TUYA_ADC_NUM_0
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 = 80000,
};
并对ADC进行测试,测试代码如下:
Code: Select all
char strbuf[1024];
STATIC VOID user_main(VOID_T)
{
OPERATE_RET ret;
uint32_t buf[CONFIG_BSP_ADC_SAMPLE_TIMES];
uint32_t v;
int len;
memset(buf,0,sizeof(buf));
v = 0;
while(1) {
ret = tkl_adc_read_single_channel(CONFIG_BSP_ADC_NUM,CONFIG_BSP_ADC_CHANNEL,&v);
if(ret !=OPRT_OK){
TAL_PR_ERR("single adc read fail:%d",ret);
}else{
TAL_PR_DEBUG("ADC value:%d",v);
}
ret = tkl_adc_read_data(CONFIG_BSP_ADC_NUM,buf,CONFIG_BSP_ADC_SAMPLE_TIMES);
if(ret != OPRT_OK){
TAL_PR_ERR("adc read fail:%d",ret);
}else{
len =0;
for(int i=0;i<CONFIG_BSP_ADC_SAMPLE_TIMES;i++){
len += snprintf(strbuf+len,sizeof(strbuf)-len,"%04d, ",buf[i]);
if(i%8==7){
len += snprintf(strbuf+len,sizeof(strbuf)-len,"\n");
strbuf[len]='\0';
TAL_PR_DEBUG_RAW("%s",strbuf);
len = 0;
}
}
if(len!=0){
strbuf[len]='\0';
TAL_PR_DEBUG_RAW("%s",strbuf);
}
TAL_PR_DEBUG_RAW("\n");
}
tal_system_sleep(1000); // 3s
}
return;
}
发现:
1】当CONFIG_BSP_ADC_SAMPLE_TIMES定义的值>=5时,读出的结果均为0,<=4时,ADC读出结果正确
问题:
1】请问需要如何配置ADC才能实现按照特定采样率、采样次数采样?(.conv_cnt只能<=4的限制如何突破?)
2】例程中TUYA_ADC_BASE_CFG_T结构体.ch_list.data 的值取1<<CONFIG_BSP_ADC_CHANNEL,其中CONFIG_BSP_ADC_CHANNEL值为2,即ADC0第二通道,根据《T1-U-HL 模组规格书涂鸦开发者平台涂鸦开发者平台.pdf》手册,只看到一个ADC,且对应为P20,想知道这个2的定义来源或ADC的引脚映射关系。