您好!
我的要求是以500Hz 的频率对多个通道(3个通道)进行采样。 我让系统以手动触发方式运行、其中的传感器控制器在 RTCTick = 131时被调用。 产生的频率接近500Hz (但不完全是)。
我将在这里放置实现方案。
#初始代码********
//安排第一次执行
fwScheduleTask (1);
#结束初始序列
#执行代码
//启用 ADC
adcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_170_US、ADC_TRIGGER_MANUAL);
//探测点脉冲以检查采样率
//将 GPIO 拉为高电平以指示此采样阶段的开始
gpioSetOutput (AUXIO_O_SAMPLING_PROBE);
对于(U16 n = 0;n < SENSOR_OUTPUT_CNT;n++){
U16 p = n;
//选择 ADC 输入
adcSelectGpioInput (cfg.pAuxoASensorOutput[n]);
//插入延迟以实现稳定
fwDelayU (150、FW_DELAY_RANGE_200_US);
//对 ADC 值进行采样和存储
adcGenManualTrigger();
N = output.head;
adcReadFifo (output.pSamples[n]);
utilIncrAndWrap (n、buffer_size;output.head);
if (output.head=0){
fwGenAlertInterrupt();
}
N = p;
}
//将 GPIO 调低以指示此采样阶段结束
GpioClearOutput (AUXIO_O_SAMPLING_PROBE);
//禁用 ADC
adcDisable();
//安排下一次执行
fwScheduleTask (1);
#结束执行代码
终止代码中没有任何内容。
此代码起作用。 但是、我想使用 AuxTimer0获取 ADC 采样、但无法执行该操作。
首先、我在初始化代码中引入了 StartAuxTimer0 (2000)、希望采样每2000年发生一次。 我在执行代码中引入了以下语句时、代码陷入停顿。 后来我读出、一旦 StartAuxTimer0启动、就无法引入 adcEnableSync 或 adcEnableAsync。
AdcEnableSync (ADC_REF_FIXED、ADC_SAMPLE_TIME_170_US、ADC_TRIGGER_AUX_TIMER0);
稍后、我在启动 AuxTimer0之前移动了 Init 例程中的 adcEnableSync 语句。 代码运行、但 ADC 输出是固定的、并且永远不会随着输入被提供的输入而改变。 我还尝试 在 adcEnableSync 之后将 StartAuxTimer0放入执行代码中、并在代码结束时停止 AuxTimer0、然后再禁用 ADC。 代码运行、但显然采样不是我所需要的。 我明白、为了获得连续的样本序列、AuxTimer0必须持续运行、并且无法启动和停止。
我已经搜索了很多东西来找到实现这一目标的正确方法、但不幸的是、关于这个主题的文档就在旁边、您能帮我实现使用 AuxTimer0进行采样的基本实现吗、即使它用于单个通道也是如此。