您当前的位置:五五电子网电子知识电子知识资料总线技术CAN总线节点的程序设计 正文
CAN总线节点的程序设计

CAN总线节点的程序设计

点击数:7383 次   录入时间:03-04 11:44:39   整理:http://www.55dianzi.com   总线技术

  CAN总线节点的软件设计主要包括三大部分:CAN节点初始化、报文发送和报文接收。
  
  熟悉这三部分程序的设计就能编写出利用CAN总线进行通信的一般应用程序。当然要将CAN总线应用于通信任务比较复杂的系统中还需详细了解有关CAN总线错误处理总线脱离处理接收滤波处理波特率参数设置和自动检测以及CAN总线通信距离和节点数的计算等方面的内容,下面就前面提到的三部分程序的设计作一个描述。
  
  1.初始化SJA1000
  
  SJA1000的初始化只有在复位模式下才可以进行。初始化主要包括工作方式的设置、接收滤波方式的设置、接收屏蔽寄存器AMR和接收代码寄存器ACR的设置、波特率参数设置和中断允许寄存器IER的设置等。在完成SJA1000的初始化设置以后,SJA1000就可以回到工作状态进行正常的通信任务。初始化SJA1000的流程图如下图所示。

SJA1000流程图

  函数SJAlOOO_Config_Normal()实现初始化SJA1000的功能。程序首先使SJA1000进入复位模式,然后配置组态时钟分频器、认可码和屏蔽寄存器、总线定时寄存器和输出控制寄存器,然后进入运行模式。程序代码如下:

程序代码

 



www.55dianzi.com

  2.报文的发送
  
  报文的发送是CAN控制器SJA1000依据CAN协议规范自动进行的,主控制器要将发送的报文写入SJA1000的发送缓冲区,并将发送请求位(TransmitRequest)置1,发送过程既可以采用中断方式,也可以采用查询方式(查询SJA1000控制段的状态标志)。
  
  如下图所示为查询方式的报文发送流程,在查询方式下CAN发送中断应被屏蔽。

报文发送流程

  
  一旦报文开始发送,发送缓冲器写闭锁,因此主控制器要查询“发送缓冲器状态”标志,确定是否可以将一个新的报文版式TXBuffer。
  
  若发送缓冲器写闭锁,循环查询状态寄存器,主控制器进入等待状态,直到发送缓冲器空闲。若发送缓冲器被释放,主控制器将新报文写入发送缓冲器TXBuffer,并置命令寄存器的发送请求标志TR=1,执行报文的发送。
  
  报文发送程序如下:

报文发送程序

 



www.55dianzi.com

  3.报文的接收
  
  接收报文是CAN控制器依据CAN协议规范自动进行的,接收报文被放在RXBuffer中,一个报文是否可以传送给主控制器,由状态寄存器的接收缓冲器状态RBS和接收中断标明(若中断开放),主控制器要将有效数据读入其内存,并释入RXBuffer,并对报文进行处理,传送过程既可由中断控制,也可通过查询状态寄存器标志来完成。下图所示给出了查询方式接收过程流程,CAN控制器的接收中断应屏蔽,主控制器读SJA1000状态寄存器(周期性的)、查询接收缓冲器状态标志(RBS),是否接收缓冲器中到有一个报文存在(报文这些标志的定义位于控制段的寄存器)。

接收过程流程

  报文接收程序如下:

报文接收程序

报文接收程序

 



www.55dianzi.com  在单片机与CAN总线通信时,要注意以下事项。
  
  (1)在设计微处理器与SJA1000的接口电路时,首先要根据微处理器选择SJA1000的接口模式,其次要注意SJA1000的片选地址应与其他的外部存储器无冲突。还应注意SJA1000的复位电路应为低电平有效。
  
  (2)微处理器对SJA1000的控制访问是以外部存储器的方式,来访问SJA1000的内部寄存器,所以应该正确定义微处理器访问SJA1000时,SJA1000内部寄存器的访问地址。
  
  (3)微处理器可以通过中断或查询的方式来访问SJA1000。
  
  (4)微处理器访问SJA1000时,SJA1000有两种不同的模式。工作模式和复位模式。对SJA1000的初始化只能在SJA1000的复位模式下进行。初始化包括(设置验收滤波器、总线定时器、输出控制、时钟分频中的特定控制等)。设置复位请求后,一定要校验,以确保设置成功。
  
  (5)向SJA1000的发送缓冲区中写入数据时,一定要检查发送缓冲区是否处于锁定状态。如锁定,这时写入的数据丢失。
  
  (6)对SJA1000的操作难点在于总线定时器的设置。设置总线定时器包括:设置总线波特率、同步跳转宽度、位周期的长度、采样点的位置和在每个采样点的采样数目。


本文关键字:程序设计  总线技术电子知识资料 - 总线技术

上一篇:USB总线原理