找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1144|回复: 3
收起左侧

最近在自学CAN总线,有些关于SJA1000寄存器配置的问题,请高手指教

[复制链接]
ID:53813 发表于 2022-11-11 16:14 | 显示全部楼层 |阅读模式
网上流行的程序如下
#include  "stdio.h"
#include  "string.h"
#include  "intrins.h"
//#include "AT89X51.H"
#include "reg52.h"
//定义SJA1000的基址
#define SJA_BaseAdr  0X7F00
// 控制寄存器
#define         REG_MODE          SJA_BaseAdr+0x00       //内部控制寄存器
...
#define         REG_RXERR         SJA_BaseAdr+0x0E         //接收错误计数器
#define         REG_TXERR         SJA_BaseAdr+0x0F         //发送错误计数器
#define         REG_ACR1          SJA_BaseAdr+0x10       //验收代码寄存器
#define         REG_ACR2          SJA_BaseAdr+0x11       //验收代码寄存器
...
#define         REG_AMR3          SJA_BaseAdr+0x16       //验收屏蔽寄存器
#define         REG_AMR4          SJA_BaseAdr+0x17       //验收屏蔽寄存器
// 发送缓冲区寄存器
#define         REG_TXD_FID       SJA_BaseAdr+0x10         //发送缓冲区1
#define         REG_TXD_ID1       SJA_BaseAdr+0x11         //发送缓冲区2
#define         REG_TXD_ID2       SJA_BaseAdr+0x12         //发送缓冲区3
#define         REG_TXD_ID3       SJA_BaseAdr+0x13         //发送缓冲区4
#define         REG_TXD_ID4       SJA_BaseAdr+0x14         //发送缓冲区5
#define         REG_TXBuffer1     SJA_BaseAdr+0x15         //发送缓冲区6
...
#define         REG_TXBuffer8     SJA_BaseAdr+0x1C         //发送缓冲区13
// 接收缓冲区寄存器
#define         REG_RXD_FID       SJA_BaseAdr+0x10         //接收缓冲区1
#define         REG_RXD_ID1       SJA_BaseAdr+0x11         //接收缓冲区2
#define         REG_RXD_ID2       SJA_BaseAdr+0x12         //接收缓冲区3
#define         REG_RXD_ID3       SJA_BaseAdr+0x13         //接收缓冲区4
....
#define         REG_RXCOUNT       SJA_BaseAdr+0x1D         //RX报文计数器
#define         REG_RBSA          SJA_BaseAdr+0x1E         //接收缓冲区起始地址
#define         REG_CDR           SJA_BaseAdr+0x1F         //时钟分频寄存器

如上,
  SJA_BaseAdr+0x10  在上面设置中,即当验收代码寄存器,又当 接收缓冲区,还可以是发送缓冲区

这么设置不会冲突吗?
为啥可以这样设置?
我买的书里他是这么设置的,直接按照顺序一路下来
有点迷糊,是不是两个都可以?
51hei图片_20221111161341.png
51hei图片_20221111161352.png
回复

使用道具 举报

ID:195496 发表于 2022-11-12 08:22 | 显示全部楼层
收发是同一个地址,但是两个缓冲区,你读与写操作的是两个不同的缓冲区,这个跟串口通信的缓冲区是一样的,读与写是同一地址但是两个不同的缓冲区,一个你只能读,另一个你只能写
回复

使用道具 举报

ID:308903 发表于 2022-11-17 08:13 | 显示全部楼层
大漠落日 发表于 2022-11-12 08:22
收发是同一个地址,但是两个缓冲区,你读与写操作的是两个不同的缓冲区,这个跟串口通信的缓冲区是一样的, ...

学习了
回复

使用道具 举报

ID:283207 发表于 2023-1-9 15:17 | 显示全部楼层
大漠落日 发表于 2022-11-12 08:22
收发是同一个地址,但是两个缓冲区,你读与写操作的是两个不同的缓冲区,这个跟串口通信的缓冲区是一样的, ...

学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表