打印
[CAN-bus/DeviceNet]

高手请来指导一下

[复制链接]
1419|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alearc|  楼主 | 2007-8-2 00:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我按照ZLG的PDF搭了一个常见的CAN节点:sja1000 ,at89s52(用仿真器代替),CTM1050T(82c250带光耦)上电复位以后,按照书上的流程初始化后,读SR为00111100即:总线开启;错误未达到报警限制;正在发送信息;正在接收信息;发送完毕;可向发送缓冲器写数据;无数据溢出;无可用信息。
读IR为00000000即:中断寄存器全部复位。
问题是我设置的是MOD为00001100;中断使能为0xff,所以奇怪为什么状态是00111100,而且中断寄存器全部是0,接下来该怎么操作很让我头疼,我第一次接触can没有什么经验,程序主要是借鉴桂电飞天鼠的,请高手多多指教.谢谢~!

相关帖子

沙发
1181zjf| | 2007-8-2 10:06 | 只看该作者

这样试试

试试正常输出模式!
sja1000用的是多大的晶振?
basic模式没自检测!可以再搞一套实验板联调!

使用特权

评论回复
板凳
alearc|  楼主 | 2007-8-2 10:46 | 只看该作者

谢谢

 谢谢,我试过了在PELI下正常发送模式,用的是16M 晶振 ,结果还是一样的,还没有在basic模式下自测试,今天试一下,我已经搭了2个板子,另一个板子:可以写数据到96以后,16到26也是正确的数据,然后置为CMR。0就是写不进去,不发送。
两个板子是一样的。
谢谢请大家继续指教~。

使用特权

评论回复
地板
桂电飞天鼠| | 2007-8-4 16:03 | 只看该作者

你用的哪一个程序?

自测试只有在Peli模式下才有。
你先自测试通过再两块板子一起做实验吧,这样容易排除问题。

自测试时把屏蔽码验收码全设为0xff,全通;
波特率参考标准的随便拿一个(16M晶振下的);
然后再发送(模式寄存器的D2位STM)。

另外要注意你的片选端所接位置,如接P2.7,基地址可用0x7f00;接P2.0,可用0xfe00;

使用特权

评论回复
5
alearc|  楼主 | 2007-8-6 13:59 | 只看该作者

是这样

是你发到网上的程序,基址是7f,是再PELI模式下,
就是状态读出来是00111100(复位以后进入正常自测试模式),觉得很矛盾啊,你有没有遇到这样的问题

使用特权

评论回复
6
alearc|  楼主 | 2007-8-6 19:46 | 只看该作者

最新的

  现在可以往16到26里面写数据了(我用的是标准帧),但是奇怪的是:
 for (i=0; i<len; i++)
{
      SJARegWrite(16+i,SendDataBuf);
                 }
    flag = 0;
这样写入的值从16到23都是对了,24,25,26里面的值为0,但是看96以后的值又都是正确的,不知道怎样改正。观测LEN 的值,这个时候是11,而且有的时候16到26的值没有变化,启动自收发后,0寄存器的复位置位了,进入了复位状态,书上没有这样说过,不知道怎么回事,那位高手遇到过这样问题,盼指教!

使用特权

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

rt

耐心一点,先用之前别人已经完整的程序来实验,成功后再按自己的想法去更改,这样可以保证问题的出处。

使用特权

评论回复
8
桂电飞天鼠| | 2007-8-8 12:37 | 只看该作者

rt

没必要用仿真器的~~~
读哪个寄存器,都可以通过SJA1000驱动中的读寄存器函数可以得到~~~~

如:
uchar tempdata;
tempdata = SJARegRead(IR);//tempdata = SJARegRead(SR);

其中IR与SR均为SJA1000对应寄存器的地址(基址+偏移)。

使用特权

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

本版积分规则

3

主题

12

帖子

0

粉丝