|
大家好,小弟近来在QMX系统中做一个ADC采样的评估,想对一个通道的ADC的采样值批量读取后再做二次处理,通过网上的例子,现在可以读取当前值,但想问下,有办法可以通过read这个api批量读取所有的sample值么?
我的通道配置是这样的:
/* Logical channel #1 init struct */
const ADC_INIT_CHANNEL_STRUCT adc_channel_param1 =
{
ADC0_SOURCE_ADPM0,
ADC_CHANNEL_MEASURE_LOOP | ADC_CHANNEL_START_TRIGGERED,
4096, /* number of samples in one run sequence */
0, /* time offset from trigger point in us */
20, /* period in us (= 0.00002 sec) */
0x10000, /* scale range of result (not used now) */
4096, /* circular buffer size (sample count) */
ADC_TRIGGER, /* logical trigger ID that starts this ADC channel */
#if MQX_USE_LWEVENTS
&evn,
0x01 /* mask of event to be set */
#endif
};
最终目标是想实现按照一定的采样率例如50KHz采样率,采集满4096点的数据后,批量读出,现在是用fopen和read这两个api实现的单个结果的读取,可否批量读出4096个sample呢?请各位高手指教,谢谢!
例程大致如下:
#if MQX_USE_LWEVENTS
if (_lwevent_create(&evn, 0) != MQX_OK) {
printf("\nMake event failed!\n");
_task_block();
}
#endif
printf("Opening ADC device ...");
f = fopen(ADC_0, (const char*)&adc_init);
if(f != NULL)
{
printf("done\n");
}
else
{
printf("failed\n");
_task_block();
}
printf("Opening channel #1 ...");
f_ch1 = fopen(ADC_0 "first", (const char*)&adc_channel_param1);
if(f_ch1 != NULL)
{
printf("done, prepared to start by trigger\n");
}
else
{
printf("failed\n");
_task_block();
}
_time_delay(1000);
printf("Triggering channel #1...");
ioctl(f, ADC_IOCTL_FIRE_TRIGGER, (void*)ADC_TRIGGER);
printf("triggered!\n");
for(i = 0; ; i++)
{
/* channel 1 sample ready? */
if (read(f_ch1, &data, sizeof(data) ))
printf("ADC ch 1: %4d \n", data.result);
_time_delay(100);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|