我正在做一个项目,其中 gpio 切换应该像 40MHz 速度一样快。我检查了“sysfs”接口,开关速度在 300Hz 左右。在我们的情况下,这是完全不能接受的。因此,在我阅读的一些论坛中,使用 /dev/mem 访问会提高切换速度。我使用 /dev/mem 并达到了 30-32MHz 的速度,这对我们来说没问题。现在该项目正在进行现场测试,从长远来看,它是否会导致内核崩溃之类的问题。
问问题
391 次
1 回答
1
据我所知,i.mx6 没有原子引脚设置/重置功能,因此您必须确保所有 GPIO 输出引脚都由您的应用程序控制,内核或其他进程都不应该尝试更改任何输出引脚相同的 GPIO 控制器。读取输入管脚,或将一些管脚分配给其他外设应该没问题,但始终确保不会在后台发生 bit-banging(例如,一些 SPI 驱动程序认为他们更清楚何时设置或重置 CS,并悄悄地设置 CS 管脚到 GPIO 输出,将其从 SPI 外设中取出)
只要您的过程不中断,您就可以维持该输出速度。如果您不禁用中断,则会在输出中出现故障。如果你这样做了,那么内核调度程序和中断驱动的硬件驱动程序就会停止工作。在双核或四核系统上,应该可以保留一个核心供您的进程独占使用,并让系统的其余部分在其他核心上运行。不要只是盲目地禁用中断,而是使用sched_setaffinity(2)
和isolcpus
内核参数。
于 2017-02-28T14:48:06.750 回答