微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 基于FPGA的CAN总线控制器SJA1000软核的设计

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

时间:03-25 来源:单片机与嵌入式系统 点击:

3 初始化模块

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

4 位查询模块

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

5 数据处理模块

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


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

6 缓冲区释放模块与双端口模块

在缓冲区的数据被读入后,需要对缓冲区的数据清零,为后续的数据读入做准备。本质上仍是对SJA1000的命令寄存器(CMR)写操作。在状态寄存器与接收缓冲区相关的位为RRB,置1即可释放缓冲区,这样就会导致接收缓冲区内的另一条信息立即有效,从而进入下一帧数据的数据查询、处理过程。

在本设计中,输出的数据引脚为双向引脚,设计成三态输出,这是因为双向端口在完成输入功能时,必须使端口处于高阻态,否则外部数据不能正确读入。

其设计关键在于,实体部分必须对端口属性进行申明,端口属性必须为inout类型,在构造体对输出信号进行有条件的高阻控制。

结语

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top