我有一个需要微秒延迟的驱动程序。为了创建这种延迟,我的驱动程序使用了内核的udelay函数。具体来说,有一次调用udelay(90):iowrite32(data,addr+DATA_OFFSET);iowrite32(trig,addr+CONTROL_OFFSET);udelay(30);trig|=1;iowrite32(trig,addr+CONTROL_OFFSET);udelay(90);//Thisistheproblematiccall我们的设备存在可靠性问题。经过大量调试,我们将问题追踪到驱动程序在90us之前恢复。(参见下面的“证明”。)我在IntelPentium
我有一个需要微秒延迟的驱动程序。为了创建这种延迟,我的驱动程序使用了内核的udelay函数。具体来说,有一次调用udelay(90):iowrite32(data,addr+DATA_OFFSET);iowrite32(trig,addr+CONTROL_OFFSET);udelay(30);trig|=1;iowrite32(trig,addr+CONTROL_OFFSET);udelay(90);//Thisistheproblematiccall我们的设备存在可靠性问题。经过大量调试,我们将问题追踪到驱动程序在90us之前恢复。(参见下面的“证明”。)我在IntelPentium
我们有一个使用3.2内核的ARM9——一切似乎都运行良好。最近我被要求添加一些代码以在启动时在某些GPIO线上添加50ms脉冲。脉码没问题;正如预期的那样,我可以看到线条上下移动。udelay()函数不符合我的预期。阅读文档让我觉得单位是微秒,但在逻辑分析仪中测量它太短了。所以我最后添加了这段代码以获得50ms。//wait50mstobesurePCIEresettakesfor(i=0;i我不喜欢它,但它工作正常。udelay代码中有一些奇怪的常量和指令。有人可以告诉我这应该如何工作吗?此代码在所有时钟初始化后调用,因此其他一切似乎都正常。 最佳答案