搜索
bottom↓
回复: 4

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

[复制链接]

出0入0汤圆

发表于 2015-9-23 16:55:33 | 显示全部楼层 |阅读模式
大家好,小弟近来在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周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2015-9-23 18:39:28 来自手机 | 显示全部楼层
嗯,这个原理我明白,不过像请教下,能否调用一次read读出所有sample值呢?

出0入0汤圆

发表于 2015-9-30 15:28:08 | 显示全部楼层
不知楼主使用的是 MQX那个版本, 我们推荐客户使用lwadc driver, lwadc driver 更好使用 。   老版本的 adc driver.      在MQX 4.1中就已经删除了。

出0入0汤圆

发表于 2015-10-2 09:31:49 来自手机 | 显示全部楼层
adc 驱动我们都是在底层自己做
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 15:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表