【问题标题】:Bitbanging a PIO on Coldfire/ucLinux在 Coldfire/ucLinux 上对 PIO 进行 Bitbanging
【发布时间】:2011-01-30 03:36:59
【问题描述】:
问题是:我需要通过 PIO 的 2 个引脚(1 个时钟,1 个数据)对一些硬件进行编程。时序限制很严格——10ms 时钟周期时间。当然,这一切都是在我维护非常高级别的服务(CAN 总线、TCP/IP)的同时。下游单元还通过将配置为输入的 PIO 引脚置为高电平来确认。所以这个循环必须读写。我需要在串行流中发送 16 位。
有没有一种既定的方法来做这种事情,或者我应该让硬件人员添加一个 PIC 或类似的东西。
在这个阶段,我更愿意避免使用 RTAI 扩展等外来元素。我确实曾经看到过对用户模式 IO 的引用,它暗示了一个可能的中断驱动驱动程序,但忘记了它。
欢迎任何指点。
【问题讨论】:
标签:
hardware
port
uclinux
coldfire
【解决方案1】:
根据我的经验,最简单的方法是编写内核驱动程序。当然,前提是它不存在——1 个时钟,1 个数据听起来像 i2c(尽管 10ms 周期听起来比 i2c 慢得多),并且已经存在用于 Coldfire 的位碰撞 i2c 驱动程序。即使不是 i2c,您也可能会发现使用 i2c-adap-mcf_gpio 作为起点。
实际上你很幸运,因为它是一个 10 毫秒的周期——默认内核节拍是 10 毫秒(必要时可以调整),所以你应该能够使用适当的内核睡眠功能。
(这还取决于您使用的内核。简单的用户模式 I/O 在 2.6 内核中很容易使用 - 2.4 内核中有一些功能,但它们可能需要更多工作。)