标题: 最近在自学CAN总线,有些关于SJA1000寄存器配置的问题,请高手指教 [打印本页]

作者: 三极管一样的人    时间: 2022-11-11 16:14
标题: 最近在自学CAN总线,有些关于SJA1000寄存器配置的问题,请高手指教
网上流行的程序如下
#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 (242.03 KB, 下载次数: 62)

51hei图片_20221111161341.png

51hei图片_20221111161352.png (286.1 KB, 下载次数: 67)

51hei图片_20221111161352.png

作者: 大漠落日    时间: 2022-11-12 08:22
收发是同一个地址,但是两个缓冲区,你读与写操作的是两个不同的缓冲区,这个跟串口通信的缓冲区是一样的,读与写是同一地址但是两个不同的缓冲区,一个你只能读,另一个你只能写
作者: 1261867136qq    时间: 2022-11-17 08:13
大漠落日 发表于 2022-11-12 08:22
收发是同一个地址,但是两个缓冲区,你读与写操作的是两个不同的缓冲区,这个跟串口通信的缓冲区是一样的, ...

学习了
作者: hyzqq    时间: 2023-1-9 15:17
大漠落日 发表于 2022-11-12 08:22
收发是同一个地址,但是两个缓冲区,你读与写操作的是两个不同的缓冲区,这个跟串口通信的缓冲区是一样的, ...

学习了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1