ARM嵌入式工控机研究:PC/104总线与CAN总线驱动实现

需积分: 49 21 下载量 30 浏览量 更新于2024-08-07 收藏 5.38MB PDF 举报
"深入理解软件构造系统原理与最佳实践,尤其是缓冲区管理在Linux及CAN驱动中的应用,以及基于ARM的PC/104总线嵌入式工控机的研究和实现" 在计算机系统中,缓冲区管理是一个至关重要的环节,特别是在实时通信如CAN(Controller Area Network)总线通信中。在Linux系统中,为了有效地处理数据传输,通常使用环形缓冲区作为收发数据的临时存储区域。环形缓冲区的设计允许连续的数据流在接收和处理之间进行平滑过渡,避免了数据丢失。 在CAN驱动设计中,接收缓冲区的实现采用了一个固定大小的数组,如`canmsg_t can[in_buf][CAN_IN_BUF_SIZE]`,其大小为`CAN_IN_BUF_SIZE`。这个缓冲区由头部索引`can_in_buf_head`和尾部索引`can_in_buf_tail`来跟踪已读取和待读取的数据位置。当`can_in_buf_head == can_in_buf_tail`时,表示缓冲区为空。在接收数据时,会检查缓冲区是否存在未读取的数据帧,若有则读取,否则等待新的数据到来。发送操作则是通过`can_write_busy`标志来控制,确保在发送过程中不进行新的写入操作。 在嵌入式系统领域,特别是在工业控制中,低功耗和高性能的需求推动了ARM处理器的广泛应用。ARM处理器相比于x86架构,具有更低的功耗和更高的能效比。在基于ARM的PC/104总线嵌入式工控机设计中,由于ARM不直接支持PC/104总线,因此需要通过CPLD(Complex Programmable Logic Device)来实现总线转换。具体来说,硬件设计包含了最小系统、CAN网络、以太网络和PC/104总线控制器等部分,其中,PC/104总线控制器的实现涉及到ARM本地总线和PC/104总线时序的匹配,这通常需要使用硬件描述语言(如VHDL)进行逻辑设计。 软件方面,嵌入式Linux操作系统被选用,其移植过程包括配置、编译和下载运行调试。在Linux上开发了PC/104总线驱动,实现了地址映射和中断绑定。同时,还编写了CAN总线驱动,包括初始化、中断处理、数据缓冲区管理和文件操作接口。这些驱动程序的编译和下载过程确保了系统与总线通信的正确性。 在具体的应用场景中,例如机车工业控制,该系统经过了严格的性能测试和环境适应性测试,如高低温测试和射频干扰测试,并在实际装车试运行3个月,证明了系统的稳定性和满足设计要求的能力。 总结来说,这个资源涵盖了缓冲区管理技术在CAN通信中的运用,以及基于ARM处理器和PC/104总线的嵌入式系统设计与实现,展示了如何在实际工程中解决数据通信和硬件兼容性问题。