在现代嵌入式系统中,CAN(Controller Area Network)总线因其高可靠性、强实时性和灵活性,在工业控制、汽车电子等领域得到了广泛应用。VxWorks作为一款流行的实时操作系统,因其高效性和稳定性,常用于需要实时性能的嵌入式系统中。CAN驱动程序的开发对于实现硬件与VxWorks系统之间的通信至关重要。下面将详细介绍在VxWorks环境下,如何开发基于SJA1000控制芯片的CAN总线驱动程序。
了解SJA1000芯片的基本功能和特点是非常必要的。SJA1000是Philips公司推出的独立CAN控制器,支持CAN 2.0A和CAN 2.0B协议标准,广泛应用于各种工业和汽车电子领域。SJA1000具有多种工作模式,包括正常模式和睡眠模式,支持11位和29位的ID识别,以及全CAN和PeliCAN两种工作模式,提供对标准帧和扩展帧的全面支持。开发SJA1000的驱动程序,需要熟悉其寄存器操作和硬件特性。
在VxWorks系统中开发CAN驱动程序,一般需要以下几个步骤:
1. 初始化CAN控制器:这包括设置波特率、工作模式、屏蔽码和过滤器等。在初始化过程中,开发者需要根据系统需求,通过编程来配置SJA1000的寄存器,以实现特定的通信协议和速率。例如,设置波特率需要通过调整时序寄存器中的同步跳转宽度(SJW)、时间段1和时间段2的分割值(TSEG1和TSEG2)来实现。
2. 配置中断:由于VxWorks是一个多任务实时系统,因此合理配置中断处理机制非常重要。开发人员需编写中断服务例程(ISR),并将中断向量正确地映射到VxWorks系统中的中断处理函数。在CAN控制器接收到消息或发生错误时,中断服务例程将被触发以处理相关事件。
3. 发送和接收数据:驱动程序需要提供一套标准的接口函数,以便应用程序可以调用这些函数来发送CAN消息或将接收到的消息传递给应用程序。发送消息通常涉及到构造CAN帧并将其写入控制器的发送缓冲区。接收消息则需要从控制器的接收缓冲区中读取消息,并进行相应的处理。
4. 错误处理和维护:CAN总线驱动程序还应当具备处理各种错误条件的能力,例如总线错误、仲裁失败和接收溢出等。此外,还需要实现对控制器的状态监控和诊断功能,确保通信的持续稳定。
在编写CAN驱动程序时,需要采用适合于VxWorks的编程接口。VxWorks提供了相应的API函数来操作硬件设备。比如,使用writereg和readreg这样的API函数来读写硬件寄存器;使用semTake和semGive这样的同步机制来实现线程间的同步等。
对于任何嵌入式系统的开发者而言,驱动程序的测试是不可或缺的一部分。在SJA1000 CAN驱动程序开发完成后,应当编写一系列的测试程序来验证驱动的功能是否符合预期,包括基本的发送接收测试、中断响应测试和错误处理测试等。只有通过严格的测试,才能确保驱动程序在实际应用中的可靠性。
VxWorks下CAN驱动程序开发涉及到对硬件的深刻理解,对实时操作系统的编程技巧,以及对通信协议的准确实施。通过上述步骤的开发和测试,可以完成一个高效、稳定的CAN总线驱动程序,为嵌入式系统提供可靠的通信能力。