>设置gpio高
> Save Flags&禁用中断
> gpio低
>停顿
> gpio高
>再重复2次
>恢复标志/重新启用中断
这是与GPIO相连的逻辑分析仪的输出.
大部分时间它都很好用,脉冲持续不到1us.然而,大约10%的低点持续很多很多微秒.即使禁用了中断,也会导致代码流中断.
我很茫然. RT Linux可能在这里没有帮助,因为问题不是延迟,它似乎是在低端发生的事情,即使没有任何东西应该在禁用IRQ时中断它.非常感谢任何建议.
解决方法 IMX25(ARM926)上的ARM缓存是16K代码,16K数据L1,长度为32byte或8条指令. DDR-SDRAM控制器运行在133Mhz和16位总线,传输速率约为300MB / s.缓存填充应该只需要大约100nS,而不是9uS;这大约是100倍.但是,linux还有其他四个问题.
> TLB未命中和页面表行走.
>数据中止.
> DMA主人窃取.
> FIQ中断.
除非你有一个巨大的显示屏,否则LCD主机不太可能窃取足够的带宽.您的显示器是否大于1 / 4VGA?如果没有,这只是内存带宽的10%,这将与处理器一起流水线.你有以太网或USB有效吗?这些外设具有更高的数据速率,并且可能导致与SDRAM的这种类型的争用.
所有这些问题都可以通过编写相关的toggler PC并将其复制到IRAM来避免.见:iram_alloc.c;此文件应该可以移植到旧版本的linux. Xbar开关允许同时从SDRAM和IRAM提取. IRAM仍然可以成为其他DMA主设备的目标.如果您真的被按下,请将代码移动到ETB缓冲区,系统中没有其他主机可以访问.
TLB未命中实际上可能非常陡峭,因为它可能需要运行几个单拍SDRAM周期;仍然应该在1uS以下.您尚未发布代码,因此变量和/或其他可能导致数据故障无法屏蔽.
如果您有任何使用FIQ的驱动程序,即使您屏蔽了正常的IRQ中断,它们仍可能仍在运行.例如,该系统的ALSA驱动程序通常使用FIQ.
ETB和IRAM都是32位数据路径和低等待状态.任何一个都可能比DDR-SDRAM提供更好的响应.
我们通过使用FIQ和IRAM在IMX258上使用其他协议使用位冲击来切换GPIO,从而实现了亚微秒级响应.
总结以上是内存溢出为你收集整理的ARM Linux内核驱动程序中的关键时序全部内容,希望文章能够帮你解决ARM Linux内核驱动程序中的关键时序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)