打印
[CAN-bus/DeviceNet]

一头雾水

[复制链接]
1689|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxj1952|  楼主 | 2007-6-16 17:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SJA1000的16~28号寄存器地址,复位模式下是ACR和AMR,操作模式下是TXB和RXB,那么,是不是说,SJA1000内部有3个相同地址的寄存器(堆)——ACR/AMR,TXB,RXB?
是这样认为吗?

相关帖子

沙发
桂电飞天鼠| | 2007-6-16 19:40 | 只看该作者

同问

根据求是科技出的一本《单片机通信技术与工程实践》上关于CAN总线内容:

工作模式: 读/写       复位模式:   读/写
     16   帧信息                  验收代码0
     17   识别码1                 验收代码1
     18   识别码2                 验收代码2
     19   识别码3                 验收代码3
     20   识别码4                 验收屏蔽0
     21   数据1                   验收屏蔽1
     22   数据2                   验收屏蔽2
     23   数据3                   验收屏蔽3
     24   数据4         
     25   数据5
     26   数据6
     27   数据7

根据这本书的内容,按我的理解,TX,RX与AMR/ACR地址确实是相同。

使用特权

评论回复
板凳
wxj1952|  楼主 | 2007-6-17 10:38 | 只看该作者

有没有不同解?

看来写书的人也只知道照抄/翻译手册而以。关键是:硬件设计上来说,为什么要这样做?
刚看了一篇**,意思是说“标准答案总是有质疑的。”后来美国的考试题修改为没有标准答案,只看谁有创意答案。例如:“你手上有一块砖头,请说出它的50种用途。”这样培养/选拔出来的学生,真是太可怕了。
   我们现在手上有一本SJA1000数据手册,它表面叙述上看,ACR、AMR、TXB/RXB是同地址,这好像是标准答案。后来,huwanbin网友质疑:“既然TXB、RXB同地址,那么RXB数据必然等于TXB发送数据,(实验结果也是一样。)自测试有什么意义?”
   
   这是对标准答案的质疑,他至少说出了砖头的另一种用途。

使用特权

评论回复
地板
桂电飞天鼠| | 2007-6-17 10:44 | 只看该作者

确实是呀~~

当看到这个问题,就知道要的肯定不是标准答案~

使用特权

评论回复
5
coolhu| | 2007-6-18 17:48 | 只看该作者

rt

是不是类似于51的RX,TX,地址一样,但在内部是分开的

使用特权

评论回复
6
wxj1952|  楼主 | 2007-6-20 08:41 | 只看该作者

如果没有框架/规矩限制.

我说16~28地址的TXB、RXB根本没有实际的寄存器存在,它不过是2个窗口,2个“孔洞”而已。可以通过实验来证明这一点。
.......

因此,实际上的16~24地址有唯一寄存器ACR/AMR。25~28地址暂时保留以后用,读恒为0。

使用特权

评论回复
7
wxj1952|  楼主 | 2007-7-26 20:45 | 只看该作者

关于“空洞”

   发送缓冲区与接收缓冲区实际上不是同一地址,16~28的RAM只是2个窗口。真正的发送缓冲区在96~108,接收缓冲区在32~95。如果实验(在复位模式下)往96~108里写数据,然后CMR.0启动发送,与程序中send()函数由16~28写入发送缓存,发送结果一样。
    操作模式下,96~108只读不可写,数据是通过窗口16~28写入的。16~28窗口比喻起来就好像是一个餐厅的传菜口。仅仅是个“孔洞”,没有硬件内存的。
    接收缓存RXB也是如此,接收到的数据实际是写到了RAM地址32~95里。程序读出的只是从16~28窗口看见的部分。比喻起来RXB就象是轮船的货舱口,每吊出一“帧”货物之后,就要把里面的货物往舱口移,......只是货舱操作是先入后出FIBO罢了。
    RX寄存器(RAM地址29)是报文计数器,它记录了所接收到的报文数目,每接收到一帧报文,RX加一。RBSA寄存器(RAM地址30)是指针,指向64字节FIFO接收缓存RX中未读取报文的起始地址。每次执行释放命令CMR=4,RX减一,RBSA+DLC+3/5,指向新的报文起始地址,FIFO接收缓冲区滚动,RBSA指向下一帧接收区,相当于窗口移动,窗口内数据更新。......反复进行,直到RX=0,接收中断位RI才等于0,接收缓冲器状态位RBS也才等于0。
    可见,接收缓存RXB窗口所看到的数据内容总是FIFO内以RBSA所指向的起始地址的13字节数据内容。
    这些内容书上写的挺清楚的。没有强调的是RX和RBSA的联动行为,以及SR.0/IR.0与RX的关联关系。

使用特权

评论回复
8
桂电飞天鼠| | 2007-7-27 14:14 | 只看该作者

不错,受教了~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

757

帖子

1

粉丝