SJA1000+XC7Z030,SJA1000初始化及PS数据读取

本人某高校研究生,刚刚研一,接触了一些小项目,想单纯记录一下项目进度以及成果。水平不足,仅供参考,希望能够对大家有所帮助。

板卡介绍:板卡上共4片SJA1000-T芯片,具体芯片功能不进行赘述了,布线方面,四片SJA1000的AD0~AD7拉成了一套数据地址总线,RD#、WR#、RST均是总线形式,ALE、INT#、CS#则是每片使用。

以下是SJA1000的具体原理图,采用了两片晶振分别为16MHZ和12MHZ,通过拨码开关进行选择。

接下来进行SJA1000初始化的具体操作:

Vivado部分:

首先,在Vivado中加入system.bd以及AXI GPIO IP核,此程序选择dual channel 模式:

Auto Connect以后生成以下design。其中GPIO_0是所有的控制引脚,GPIO2_0则为AD0~AD7(需要注意的是,这里的信号反向全部使用IO,在SDK中我们可以通过XGpio_SetDirection函数进行输入输出方向的设置,其内部原理就是控制IOBUF中的IO_t引脚高低电平)

之后Create HDL——Genrate Output——xdc管脚约束——generate bitstream——export hardware——launch sdk

SDK部分:

1.首先我们要根据Datasheet中给出的寄存器偏移地址写出SJA1000.h文件方便之后寄存器调用

#ifndef  __SJA1000_H__
#define  __SJA1000_H__
#include  "string.h"


#define  SJA_BaseAdr  0X00


#define         REG_CONTROL       SJA_BaseAdr+0x00       //内部控制寄存器
#define         REG_COMMAND       SJA_BaseAdr+0x01       //命令寄存器      只写
#define         REG_STATUS        SJA_BaseAdr+0x02       //状态寄存器      只读
#define         REG_INTERRUPT     SJA_BaseAdr+0x03       //中断寄存器      只读
#define         REG_INTENABLE     SJA_BaseAdr+0x04       //中断使能寄存器   可读可写
#define         REG_RESVER0       SJA_BaseAdr+0x05       //保留0
#define         REG_BTR0          SJA_BaseAdr+0x06       //总线定时寄存器0  复位模式读写
                                                         //定义了波特率预设值BRP 和同步跳转宽度SJW 的值
#define         REG_BTR1          SJA_BaseAdr+0x07       //总线定时寄存器1  复位模式读写
//总线定时寄存器1 定义了每个位周期的长度采样点的位置和在每个采样点的采样数目
#define         REG_OCR           SJA_BaseAdr+0x08       //输出控制寄存器  复位模式读写
//输出控制寄存器实现了由软件控制不同输出驱动配置的建立
#define         REG_TEST          SJA_BaseAdr+0x09       //测试寄存器
#define         REG_RESVER1       SJA_BaseAdr+0x0A       //保留1
#define         REG_ARBITRATE     SJA_BaseAdr+0x0B       //仲裁丢失捕捉    只读
#define         REG_ERRCATCH      SJA_BaseAdr+0x0C       //错误代码捕捉    只读
#define         REG_ERRLIMIT      SJA_BaseAdr+0x0D       //错误报警限额    工作模式只读 复位模式可读写


#define         REG_RXERR         SJA_BaseAdr+0x0E         //接收错误计数器工作模式只读 复位模式可读写
#define         REG_TXERR         SJA_BaseAdr+0x0F         //发送错误计数器工作模式只读 复位模式可读写


#define         REG_ACR0          SJA_BaseAdr+0x10       //验收代码寄存器
#define         REG_ACR1          SJA_BaseAdr+0x11       //验收代码寄存器
#define         REG_ACR2          SJA_BaseAdr+0x12       //验收代码寄存器
#define         REG_ACR3          SJA_BaseAdr+0x13       //验收代码寄存器
#define         REG_AMR0          SJA_BaseAdr+0x14       //验收屏蔽寄存器
#define         REG_AMR1          SJA_BaseAdr+0x15       //验收屏蔽寄存器
#define         REG_AMR2          SJA_BaseAdr+0x16       //验收屏蔽寄存器
#define         REG_AMR3          SJA_BaseAdr+0x17       //验收屏蔽寄存器


// 发送缓冲区寄存器  (发送缓冲区长13字节,在CAN地址是16-28即0x10-0x1c)
#define         REG_TXBuffer1     SJA_BaseAdr+0x10         //发送缓冲区1
#define         REG_TXBuffer2     SJA_BaseAdr+0x11         //发送缓冲区2
#define         REG_TXBuffer3     SJA_BaseAdr+0x12         //发送缓冲区3
#define         REG_TXBuffer4     SJA_BaseAdr+0x13         //发送缓冲区4
#define         REG_TXBuffer5     SJA_BaseAdr+0x14         //发送缓冲区5
#define         REG_TXBuffer6     SJA_BaseAdr+0x15         //发送缓冲区6
#define         REG_TXBuffer7     SJA_BaseAdr+0x16         //发送缓冲区7
#define         REG_TXBuffer8     SJA_BaseAdr+0x17         //发送缓冲区8
#define         REG_TXBuffer9     SJA_BaseAdr+0x18         //发送缓冲区9
#define         REG_TXBuffer10    SJA_BaseAdr+0x19         //发送缓冲区10
#define         REG_TXBuffer11    SJA_BaseAdr+0x1A         //发送缓冲区11
#define         REG_TXBuffer12    SJA_BaseAdr+0x1B         //发送缓冲区12
#define         REG_TXBuffer13    SJA_BaseAdr+0x1C         //发送缓冲区13


// 接收缓冲区寄存器   (接收缓冲区长13字节,在CAN地址是16-28即0x10-0x1c)
#define         REG_RXBuffer1     SJA_BaseAdr+0x10       //接收缓冲区1
#define         REG_RXBuffer2     SJA_BaseAdr+0x11       //接收缓冲区2
#define         REG_RXBuffer3     SJA_BaseAdr+0x12        //接收缓冲区3
#define         REG_RXBuffer4     SJA_BaseAdr+0x13       //接收缓冲区4

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值