免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12841 | 回复: 14
打印 上一主题 下一主题

在linux驱动中实现纳秒的延时用哪个函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-15 08:31 |只看该作者 |倒序浏览
20可用积分
arm920t linux2.6.9
通过gpio连接ADC,
ADC需要的频率0.8M-3.2M,也就是周期312-1250ns

写一个gpio生成方波的驱动,要用延时来产生周期。
在linux驱动中实现纳秒的延时用哪个函数?

udelay 微妙级
ndelay 纳秒级

可是ndelay 纳秒级实现不了纳秒级,请问高手应该用什么延时函数?

万分感谢

最佳答案

查看完整内容

还是看看cpu上面有没有pwm波控制器才是正经办法

论坛徽章:
0
2 [报告]
发表于 2007-11-15 08:31 |只看该作者
还是看看cpu上面有没有pwm波控制器才是正经办法

论坛徽章:
0
3 [报告]
发表于 2007-11-15 10:45 |只看该作者
恐怕只有锁住中断,使用循环空代码实现,

论坛徽章:
0
4 [报告]
发表于 2007-11-15 10:59 |只看该作者

回复 #2 美丽人生 的帖子

也就是说linux下没有真正能实现纳秒级延时的调用?

论坛徽章:
0
5 [报告]
发表于 2007-11-15 12:42 |只看该作者
MontaVista 4.0 (kernel version 2.6.X) 支持HRT,可以实现微妙级的延时,好像还到不了纳秒。

用关中断和busy loop来实现当然可以,但是关中断时间不能太长,而且只能在内核空间实现,肯定影响其他任务调度。
如果需要长时间产生这样的信号,那感觉用不太适合用Linux来实现。

论坛徽章:
0
6 [报告]
发表于 2007-11-15 13:29 |只看该作者

回复 #4 frameyl 的帖子

感谢各位的恢复

关中断和busy loop中的busyloop就是个while循环吧,那为什么要关中断啊?
这一点能帮忙详细讲解一下吗,我对linux内核不太清晰。

谢谢

论坛徽章:
0
7 [报告]
发表于 2007-11-15 14:49 |只看该作者
如果不关中断,在进程上下文上可能会被中断,从而进入中断处理程序,再被内核切换出来时,会重新调度进程。如果进程被调度出去则,时延很可能超过XXX纳秒。

论坛徽章:
0
8 [报告]
发表于 2007-11-15 15:28 |只看该作者

回复 #6 frameyl 的帖子

那我在实现上延时是通过while循环来实现的。你的意思是这种解决方案不稳定吧?
那加上关中断会影响其他任务调度,会影响高层应用程序吗?比如web dhcp

论坛徽章:
0
9 [报告]
发表于 2007-11-15 18:17 |只看该作者

回复 #5 againyuan 的帖子

请问在内核空间如何关中断,确实不太懂,请指教。

论坛徽章:
0
10 [报告]
发表于 2007-11-16 13:42 |只看该作者

回复 #7 againyuan 的帖子

如果关中断时间长肯定会影响其他任务运行的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP