CAN总线SJA1000节点测试程序实例

需积分: 10 5 下载量 179 浏览量 更新于2024-11-06 收藏 15KB DOCX 举报
"CAN总线参考程序提供了CAN节点的测试示例,包括SJA1000控制器的初始化、数据接收与发送功能。程序适用于学习和理解SJA1000在CAN通信中的应用。" 在给定的程序中,CAN总线通信的关键在于对SJA1000控制器的配置。SJA1000是一款广泛应用的CAN控制器,由Philips(现NXP)公司生产,它能与微处理器进行接口,处理CAN总线上的通信任务。以下将详细解释程序中的几个重要步骤: 1. **初始化**:`Sja_1000_Init`函数是SJA1000的初始化过程,首先关闭中断(`EA=0`),然后进入CAN控制器的返回模式(`BCAN_ENTER_RETMODEL()`),接着创建通信(`BCAN_CREATE_COMMUNATION()`),设置时钟源(`BCAN_SET_OUTCLK(0xc0)`,这里选择了Pelican模式的时钟),定义对象(`BCAN_SET_OBJECT()`),设置波特率(`BCAN_SET_BANDRATE(CAN_BPS_1M)`),并最后设置控制寄存器(`BCAN_SET_CONTROL(0x08)`)。如果在初始化过程中出现错误,函数会返回相应的错误代码。 2. **设置时钟**:`BCAN_SET_OUTCLK`函数用于设置CAN控制器的时钟输出。参数`Clock_Out`决定了时钟的频率,函数通过写入`REG_CDR`寄存器来完成设置。如果设置成功,返回0,否则返回1。 3. **设置对象**:`BCAN_SET_OBJECT`函数用于配置CAN控制器的对象,包括接收滤波器和发送缓冲区等。参数包括多个ACR(接收滤波器配置)和AMR(接收掩码配置)寄存器的值。这些设置决定了控制器如何过滤接收到的数据帧,并确定哪些数据帧会被接收。 4. **波特率设置**:`BCAN_SET_BANDRATE`函数用来设置CAN总线的波特率。在示例中,选择了1Mbps的波特率(`CAN_BPS_1M`)。这决定了CAN网络的数据传输速度。 5. **控制寄存器设置**:`BCAN_SET_CONTROL`函数设置控制寄存器的值。在本例中,设置为0x08,这可能包含了使能CAN控制器或设置工作模式的相关设置。 6. **中断使能**:初始化完成后,重新开启中断(`EA=1`),使得CAN控制器能够响应来自硬件的中断请求,如数据接收和发送事件。 这个参考程序展示了如何建立一个基本的CAN节点,它能发送和接收数据。对于初学者来说,这是一个很好的学习资源,可以帮助理解CAN总线通信协议以及SJA1000控制器的使用方法。通过这个程序,开发者可以进一步扩展和定制自己的CAN节点应用,例如添加错误处理机制、多节点通信以及更复杂的滤波规则等。