>设置gpio高
> Save Flags&禁用中断
> gpio低
>停顿
> gpio高
>再重复2次
>恢复标志/重新启用中断
这是与GPIO相连的逻辑分析仪的输出.
大部分时间它都很好用,脉冲持续不到1us.然而,大约10%的低点持续很多很多微秒.即使禁用了中断,也会导致代码流中断.
我很茫然. RT Linux可能在这里没有帮助,因为问题不是延迟,它似乎是在低端发生的事情,即使没有任何东西应该在禁用IRQ时中断它.非常感谢任何建议.
解决方法
但是,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,从而实现了亚微秒级响应.