关 闭

新闻中心

EEPW首页>工控自动化>设计应用> 基于FPGA的CAN总线控制器SJA1000软核的设计

基于FPGA的CAN总线控制器SJA1000软核的设计

作者: 时间:2011-04-15 来源:网络 收藏

2 接口控制逻辑模块
接口控制逻辑是本系统的核心模块,它与4个功能模块、读写模块相连接,由一个状态机组成,即系统的主状态机。在状态机的不同状态中,控制读写状态机与对应的功能模块相连接,3个模块互相配合完成一项功能。QuartuslI生成的模块图如6所示。

本文引用地址://m.amcfsurvey.com/article/162166.htm

e.JPG


每一个功能模块都有对应的接口信号,而data_in_infer、addr_out_infer、data_in_infer、w_ok_in、r_ok_in是读写模块的信号接口。
需要注意的是,本系统中使用了主从状态机,即状态机的嵌套。在主状态进入初始化状态机后,立即给出一个enable信号,启动从状态机,并设置一个从状态机的完成信号finish(高电平有效),且初始值为低,然后在主状态机不停的检测finish信号,如果finish为高,则进入下一个状态,查询状态。而在从状态机中,则不停地检测enable信号,如果为高,则开始工作,当完成从状态机后,将finish信号置高。如此就完成了主从状态机的互动。接口控制逻辑模块中的start、end信号即为系统主从状态机互动信号。

3 初始化模块
初始化模块的功能是完成的初始化。2.0B规范允许工作在两种模式,即Basic模式和Peli模式,上电默认为BasicCAN模式。在两种模式下都需要对的模式寄存器CR、验收码寄存器ACR、验收屏蔽寄存器AMR、定时寄存器BTR0、BTR1和输出控制寄存器OCR写入控制命令。
在本中,借用ROM的思想,将需要读写的寄存器地址和数据统一编码,固化存储起来,对SJA1000进行读写时,只需要按照一定的顺序读出数据和地址,输出到即可。

4 位查询模块
位查询模块主要功能是在SJA1000转入工作模式后能够读取存在接受缓冲区RXFIFO的帧信息,在本中读取帧信息采用了查询方式,即不停地查询SJA1000状态寄存器SR的RBS位,如果查询到RBS位为“1”,即表明接收缓冲区满,RXFIFO中有可用信息,此时将转入数据处理模块,由数据处理模块进行数据读入,并进行处理。在查询过程中,对SJA1000的状态寄存器进行了读操作。

5 数据处理模块
数据处理模块功能是从SJA1000的缓冲区读入数据,并作处理。在读入数据时,只需将输出的地址定位到SJA1000接收缓冲区的数据场依次将数据从缓冲区读入即可。在CAN的通信中,发送的为帧信息,其数据帧结构如图7所示。

f.JPG


在对数据进行处理时,前16位为ID,有用的数据是在帧中的数据场(Data Field)中,因此只需略过前16位,对后面最多8个字节的数据进行处理,分配到步进电机的引脚上即可。

6 缓冲区释放模块与双端口模块
在缓冲区的数据被读入后,需要对缓冲区的数据清零,为后续的数据读入做准备。本质上仍是对SJA1000的命令寄存器(CMR)写操作。在状态寄存器与接收缓冲区相关的位为RRB,置1即可释放缓冲区,这样就会导致接收缓冲区内的另一条信息立即有效,从而进入下一帧数据的数据查询、处理过程。
在本中,输出的数据引脚为双向引脚,设计成三态输出,这是因为双向端口在完成输入功能时,必须使端口处于高阻态,否则外部数据不能正确读入。
其设计关键在于,实体部分必须对端口属性进行申明,端口属性必须为inout类型,在构造体对输出信号进行有条件的高阻控制。

结语
CAN接口由VHDL语言描述,易于修改和移植,可以将几个集成到一个芯片上去,具有单片机所没有的优势,在汽车领域具有良好的应用前景。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭