返回信息流请教大家,如果是裸机程序,AD可以到100KSPS以上,可是用同样的方法在linux里写驱动,采样率就在几K,提不上去了,怀疑是ioremap的问题,总之一定是内核里耗了很多时间,但是对内核不是很了解,不知有没有人遇到过此类问题?求解~
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #14167同步于 2013/11/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
S3C2440 AD采样速度提不上去
Listen
2013/11/8镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
从硬件上来说,这是不可能的。只要给AD模块配置同样的时钟和分频系数,那它的采样率就是一样的。你可以在两个环境下,分别读取AD的配置寄存器,看看这两个环境下AD的输入时钟、分频比等,应该是不一样的。
很有可能是因为在裸机和linux下cpu本身的工作频率就配置的不一样,导致输入到AD的时钟频率不同,即使这时候分频比是一样的,那采样率也是不同的。
预分频设置成一样,我在linux用get_clk_rate获取adc的时钟,也是50M,跟裸机里是一样的,难道这还不是adc的实际频率?
【 在 afeionline 的大作中提到: 】
: 从硬件上来说,这是不可能的。只要给AD模块配置同样的时钟和分频系数,那它的采样率就是一样的。你可以在两个环境下,分别读取AD的配置寄存器,看看这两个环境下AD的输入时钟、分频比等,应该是不一样的。
: 很有可能是因为在裸机和linux下cpu本身的工作频率就配置的不一样,导致输入到AD的时钟频率不同,即使这时候分频比是一样的,那采样率也是不同的。
没错,不过我这里是关注采样速度的问题,用示波器怎么看?接哪个口?
【 在 lxfcys 的大作中提到: 】
: 1 linux不是实时系统,
: 2 时钟频率对不对可以用示波器看
【 在 lxfcys 的大作中提到: 】
: 1 linux不是实时系统,
: 2 时钟频率对不对可以用示波器看
Linux非实时系统,进程波动性较大,而且是I/O通信,速度肯定更慢,涉及到进程调度和切换(进程切换是非常慢的)。
提两个建议:
1.裸机驱动验证一下,目的:验证硬件是否有问题;
2.换嵌入式实时操作系统试试。
那ADC的采样速率应该是一样的。你说的速度提不上去,该不会是读取速度吧?这个可就跟ADC本身无关了,要看读取数据的方式。
如果是在linux下,建议在中断服务程序里读ADC的数据,这样能保证相对实时,速度也快一些。
【 在 Listen 的大作中提到: 】
: 预分频设置成一样,我在linux用get_clk_rate获取adc的时钟,也是50M,跟裸机里是一样的,难道这还不是adc的实际频率?
嗯,是读取速度,我用中断和查询都试过,还是慢。。。
【 在 afeionline 的大作中提到: 】
: 那ADC的采样速率应该是一样的。你说的速度提不上去,该不会是读取速度吧?这个可就跟ADC本身无关了,要看读取数据的方式。
: 如果是在linux下,建议在中断服务程序里读ADC的数据,这样能保证相对实时,速度也快一些。