荻花圣殿阿萨辛变身:再识C8051F500

来源:百度文库 编辑:偶看新闻 时间:2024/05/08 14:42:12

再识C8051F500

(2010-08-23 11:02:56)转载 标签:

杂谈

分类: C8051F系列

用到C8051F500的CAN总线,虽然有F500的CAN总线相关官方代码,但是由于对CAN总线的协议不太了解,故先对CAN总线做一个深入认识。

首先,从CAN总线的背景应用分析:基于CAN的监控系统包括以下几个部分:
  (1)上位PC机收集总线上传输的所有信息,对系统的运行状态进行监控,检测所有设备的运行参数的调整及越限时的声光报警等功能。并通过CAN接口卡接入网络之中。
  (2)智能测控单元(下位机系统)包括智能传感器、智能执行器和智能控制器等,它们被安装在测控现场,用于直接获取现场设备的参数或者执行相应操作和功能。

   总结:此次的CAN总线背景需求是为了解决一个小型局域网内的上位机与下位机的通信,上位机需要全称监视现场检测的节点的所有信息,并能对意外情况作出及时的处理。而CAN总线在当中只不过是对上下微机起到一个数据传递的作用,只是基于CAN总线的数据传递能保证数据传输的抗干扰性和稳定性。

 

第二部分,对CAN总线的工作流程的认识:

    CAN处理器有32个消息对象,可以配置为发送或者接收数据。输入数据,消息对象,标识掩码存储在CAN的消息RAM中。所有数据发送和接受过滤的协议处理全部由CAN控制器完成,不用单片机干预。CAN寄存器和消息处理器为CAN控制器和单片机之间提供数据传送和状态通知的接口。也就是说,单片机与CAN总线的通信是通过消息处理器以及CAN的寄存器来通信的。单片机不直接跟CAN总线进行通信。其中,消息处理器与单片机的通信方式是中断申请的方式。(或许存在查询方式)。常用的访问寄存器有CAN的控制寄存器,CAN的测试寄存器,CAN的状态寄存器等。

 

第三部分:CAN的工作流程

3-1:软件的初始化

     可以通过CAN的控制寄存器的Init位来对CAN总线进行初始化,初始化之后,总线处于空闲状态,所有在CAN总线上传输的消息都将被停止。CAN总线的输出CAN_TX位是recessive隐性电平。设置Init位不会改变已经设置的寄存器的值。

    CPU需要设置位定时寄存器和每个消息对象来对CAN控制器进行初始化。如果不需要一个消息对象做控制基本模式(即直接控制模式,不经过CAN的RAM直接到CPU接口),只需将其MsgVal(消息有效位)设置为无效即可。否则,全部消息对象将被初始化。

 

   初始化CAN控制器一般步骤如下:

   1,将SFAPAGE寄存器设置为CAN0_PAGE;

   2,将CAN0CN寄存器中的INIT和CCE位置高;

   3,设置位定时寄存器和BRP扩展寄存器中的时序参数;

   4,舒适化每个消息对象或将其MsgVal设置为NOT VALID;

   5,将INIT位清零。

 

3-2:CAN 消息传输

    一旦CAN初始化完成之后,CAN的核心变保持和CAN总线同步并开始消息传输,在通过了消息处理器过滤之后,接受到的消息将被储存到适当的消息对象中。所有的消息都被存在消息对象中,包括所有的仲裁位,DLC和8个数据字节。CPU可以在任何适合通过接口寄存器对消息进行读和写的操作。CPU可以对要传输的数据进行更新,如果有消息对象中部分消息长期存在,这时只要对数据字节进行更新,便可通过设置TxRqst(发送控制位)和NewDat(新数据位)来开始传输。如果多个传输的消息被分配给同一个消息对象,所有的消息对象需要在请求消息的传输前进行设置。

 

3-3: 出错自动重传

 

3-4:测试模式

    通过将CAN控制寄存器中的Test设为1,进入测试模式。在测试模式下,测试寄存器中的Tx1,Tx0,LBaxk,Silent以及Basic位均是科协的。Rx位见识引脚CAN_RX的状态,并且本身只能读。Test置零后,测试寄存器所有功能被禁止。

 

3-5:沉默模式

 

3-6:会送模式

    这个模式主要用作自我检测使用。为了同外部磁极保持独立,CAN核在会送模式下忽略确认错误。在这个模式下,CAN核在Tx输出和Rx输入之间实施内部反馈。CAN核并不关心CAN_RX引脚上的实际值。

 

3-7:会送和沉默模式的结合

 

3-8:基本模式

    若把测试寄存器中的Basic位设为1,CAN核便工作在基本模式下。在这个模式下,CAN模块在没有消息存储器的情况下工作,即不用消息队列暂存交换的数据。在基本模式下,需要用到IF1和IF2命令请求寄存器。

    IF1寄存器用作传输缓存。当IF1寄存器的Busy写1时,IF1寄存器中的内容被请求进行传输。将Busy位设置为1可以将IF1寄存器锁定,表明传输将要进行。一旦总线空闲,IF1寄存器就被装入CAN核的移位寄存器并开始进行传输。传输完成以后,Busy位被置零,IF1寄存器解除锁定状态。当IF1寄存器处于锁定状态,可以在任何时间通过将IF1寄存器中的Busy位复位来放弃将要进行的传输。

    IF2寄存器用作接收缓存。在接收到消息以后,移位寄存器中的内容在不需要任何过滤的情况下存入IF2寄存器,另外,在消息传输期间,IF2寄存器可以监视移位寄存器中的当前内容。每次可通过将IF2寄存器中的Busy位置高来初始化对消息对象的读操作。而移位寄存器中的内容被存入IF2寄存器中。

    在基本模式下,不能取得消息对象相关的控制和状态位以及IFx命令掩码寄存器的控制位的值。命令请求寄存器的消息数目也无法求的。IF2消息控制寄存器的NewDat位和MsgLst保持他们的功能。DLC3-0会显示收到的DLC,其他的控制位会被视为0。在基本模式下准备输出位CAN_WAIT_B无效。

 

3-9: 对CAN_TX引脚的软件控制

      CAN的传输引脚CAN_TX有四个可用的输出功能。除了它默认功能连续数据输出外,它能驱动CAN采样信号去见识CAN核的位定时。而且它还能驱动持续的显性值或者隐性值。将最后两个功能与刻度CAN接受引脚结合,用于检验CAN总线的物理层。

      通过设置测试寄存器的Tx1和Tx0位,可以对CAN_TX引脚的输出模式进行选择。