knight_hu 发表于 2015-9-23 16:55:33

FRDM K64平台QMX系统下ADC采样值可否批量获取sample值

大家好,小弟近来在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);
    }

jzkn 发表于 2015-9-23 17:24:53

门外汉瞎说一下:底层用内存池存满了,发一个事件给进程,再来读不就OK了哇。像STM32单片机的ADC就可以用DMA驱动由硬件自动放到缓冲区循环采集,应用程序想读随时去读就OK了。不占用软件资源和CPU。

knight_hu 发表于 2015-9-23 18:39:28

嗯,这个原理我明白,不过像请教下,能否调用一次read读出所有sample值呢?

FSL_TICS_DANIEL 发表于 2015-9-30 15:28:08

不知楼主使用的是 MQX那个版本, 我们推荐客户使用lwadc driver, lwadc driver 更好使用 。   老版本的 adc driver.      在MQX 4.1中就已经删除了。

ljt80158015 发表于 2015-10-2 09:31:49

adc 驱动我们都是在底层自己做
页: [1]
查看完整版本: FRDM K64平台QMX系统下ADC采样值可否批量获取sample值