查看: 5034|回复: 10

[其他] ADC_INIT_CHANNEL_STRUCT 疑问

[复制链接]

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
发表于 2014-7-24 16:09:51 | 显示全部楼层 |阅读模式
 ADC_INIT_CHANNEL_STRUCT中有个参数number_samples,这参数有什么用,是什么采样次数?驱动中也没能看出,请高手指点一下?
另外MQX的ADC驱动可以加入DMA功能吗?
我知道答案 目前已有10人回答
回复

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-25 13:27:24 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

仔细看了一下,好像是进行多次采样后,计算平均值的。读取的结果是多次平均后的值。
typedef struct adc_init_channel_struct {
   uint_16   source;           /* one of ADC_SOURCE_* definitions defined in .//adc_.h - CPU specific header file */
   uint_16   flags;            /* initialization flags, combination of ADC_CHANNEL_ possibilities above */
   uint_32   number_samples;   /* the number of samples needed to trigger event */
   uint_32   time_offset;      /* the time offset applied once after measurement on given channel is started, in microseconds */
   uint_32   time_period;      /* the time slot between two samples in microseconds */
   /* NOTE: the following item is not used in the current ADC driver and is prepared to be used in the future */
   uint_32   range;            /* the range of result sample(s), NOT USED NOW */
                               /* Note #1: using ADC_CHANNEL_ACCUMULATE, you can achieve finer resolution than specified in ADC */
                               /* Note #2: The result of ADC driver always fits to the range specified here */
                               /* Note #3: if range is too low, then you lose LSbits */
                               /* Note #4: if range is too high, then you get LSbits cleared */
                               /* Note #5: range can be only a number 2^N (in C language: 1
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-25 13:32:09 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

 ADC使用例程可以能正常读取出数据,但是我建立一个HWtimer,在定时中断中读取ADC的值,只能读取出前两次。其余时候,read的返回值都是0,不知道什么原因。
 
void hwtimer1_callback(pointer p)
{               
                _mqx_int num;
    if(f_ch1 == NULL)
    {    
        printf("the adc is not ready ,return\n");
                                return;
    }
                time_count++;
                num = read(f_ch1,Result_data,64*sizeof(ADC_RESULT_STRUCT));
                printf("NO. = %d,ADC ch 1: %4d \n", time_count,num);
                return;
}
其中的f_ch1 是个全局的文件指针。
 
 
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-25 14:01:19 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

感觉是ADC转换几次后,就停止转换了,BUFFER中的数据不更新了
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2014-7-25 14:41:55 | 显示全部楼层

RE:ADC_INIT_CHANNEL_STRUCT 疑问

楼主使用的是哪个例程?
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-25 15:56:31 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

回复第 5 楼 于2014-07-25 14:41:55发表:
楼主使用的是哪个例程?
 
MQX下的例程,我另外加了个定时器,现在好的,是我定时器没有使用对,
谢谢!
 
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-25 16:00:59 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

 另外一个问题,
MQX中关于ADC的驱动可能有点问题,请你确认。
 
adc_kadc.c中的_adc_hw_ioctl(MQX_FILE_PTR f, _mqx_uint cmd, pointer param_ptr)的最后一个参数的处理,
传入的是指针,转换为数据的过程有问题,如:
  if ((uint_32) param_ptr == 20)
应该修改为:
  if (*(uint_32*) param_ptr == 20)
 
 
不知道我理解的对不?
 
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-25 16:07:11 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

 K60的ADC中的
Long sample和Hardware average enable
这两个功能有人用过吗?对精度提高有多大帮助。
我试着设置了一下,好像并不起作用呢。
哪位用过的给点指点。
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

196

帖子

0

中级会员

Rank: 3Rank: 3

积分
380
最后登录
1970-1-1
发表于 2014-7-29 09:49:51 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

回复第 7 楼 于2014-07-25 16:00:59发表:
 另外一个问题,
MQX中关于ADC的驱动可能有点问题,请你确认。
 
adc_kadc.c中的_adc_hw_ioctl(MQX_FILE_PTR f, _mqx_uint cmd, pointer param_ptr)的最后一个参数的处理,
传入的是指针,转换为数据的过程有问题,如:
  if ((uint_32) param_ptr == 20)
应该修改为:
  if (*(uint_32*) param_ptr == 20)
 
 
不知道我理解的对不?
 
 

楼主正确。谢谢分享
另外 ADC demo已经没有维护了,  在MQX 4.1 中已经被LWADC 取代了
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

44

帖子

0

注册会员

Rank: 2

积分
92
最后登录
1970-1-1
 楼主| 发表于 2014-7-29 11:34:04 | 显示全部楼层

回复:ADC_INIT_CHANNEL_STRUCT 疑问

回复第 9 楼 于2014-07-29 09:49:51发表:
回复第 7 楼 于2014-07-25 16:00:59发表:
 另外一个问题,
MQX中关于ADC的驱动可能有点问题,请你确认。
 
adc_kadc.c中的_adc_hw_ioctl(MQX_FILE_PTR f, _mqx_uint cmd, pointer param_ptr)的最后一个参数的处理,
传入的是指针,转换为数据的过程有问题,如:
  if ((uint_32) param_ptr == 20)
应该修改为:
  if (*(uint_32*) param_ptr == 20)
 
 
不知道我理解的对不?
 
 

楼主正确。谢谢分享
另外 ADC demo已经没有维护了,  在MQX 4.1 中已经被LWADC 取代了
 
 
不会吧,LWADC功能很弱的,连PDB都没有用上,以后就不支持ADC的驱动了?
 
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-21 06:37 , Processed in 0.102208 second(s), 29 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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