中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

您当前所在位置: 汽车电子 > 查看内容

CAN总线接口设计

文章作者头像
发布:清雅轩 作者: webmaster来源: job.cartech8.com
PostTime:23-5-2008 11:59

以下为文章全文:(本站微信公共账号:cartech8)


汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师

6) r0=addr;dm(CANADDR)=r0; //写入要访问的SJA1000的内部地址

  7) bit clr astat ASTAT_FLG1;

  //Flag1=0

  8) bit clrastat ASTAT_FLG2;

  //Flag2=0,CS=0

  9) i0=CANADDR;r0=dm(i0,0);

  //读取SJA1000相应地址的数据

  10) r1=3;dm(i0,0)=r1;

  //写入数据到SJA1000相应地址

  11) bit set astat ASTAT_FLG2;

  //Flag2=1,CS=1,5

  为说明方便,对各条指令编号。运行指令5、7、8、11各花费25ns,运行指令6、9、10各花费100ns,所以完成一次读或写需300ns。

 基于CPLD的ADSP21062和SJA1000接口设计

  在连接多个外围设备时,其译码电路比较复杂,可以使用CPLD完成逻辑译码控制。利用地址数据信号产生CAN的ALE、CS等信号。其优点在于使用多个总线设备时,可用一片CPLD完成所有总线设备的译码,这种方法有更好的适用性。其连接方法如图3所示。

图3 基于CPLD的ADSP21062和SJA1000设计图

  DSP的程序设计如下:

1) #defi

ne CANNCS 0x400100

  //清CANCS的地址,对此地址操作使CAN的CS无效

  2) #define CANCS  0x400200//置CANCS的地址,对此地址操作使CAN的CS有效

  3) #define CANALE 0x400500

  //置CANALE的地址,对此地址操作使CAN的ALE可变化

  4) #define CANNALE 0x400600

  //清CANALE的地址,对此地址操作使CAN的ALE恒为低

  5) #define CANRW 0x400900

  //对此地址操作完成CAN数据的读、写

  6) r1=0x00047800; dm(SYSCON)=r0;//设置外部空间大小

  7) r0=0x21a8c429;dm (WAIT)=r0;

  //用2个软等待访问MS0

  8) r7=0x07;dm(CANALE)=r7;

  //ALEhigh=1,CANALE为CANWE的取反

  9) r4=addr;dm(CANRW)=r4;

  //写入要访问的SJA1000的内部寄存器空间地址

  10) r7=dm(CANNALE);

  //ALEhigh=0,CANALE总为0

  11) r7=0x07;dm(CANCS)=r7;

  //CANCS=0

  12) r3=dm(CANRW);

  //读取SJA1000相应地址的数据

  13) r1=3;dm(CANRW)=r1;

  //写入数据到SJA1000相应地址

  14) r7=dm(CANNCS);

  //CANCS=1

  运行指令8、9、11、13各花费100ns,运行指令10、12、14各花费75ns,所以完成一次读或写需525ns。速度比前文的简化设计要慢一点,但这种设计更利于扩展,适合于多个外设接口,同时节省了两个Flag引脚。当SJA1000工作在最大传输速度1Mbit/s时,由于在一个数据帧中会插入约42bit其它帧信号,所以完成8bit传输的时间约为50s。前两种设计的速度分别是其167倍和95倍。所以这两种设计都能满足SJA1000的传输速度要求。

  CPLD程序设计

图4 CPLD的逻辑图

  图4中,用74138进行译码,生成ALE、CS等信号。当执行指令6时,设置了外部空间的大小,在访问地址0x400000~0x4fffff时会使能MS0,74138的G2AN将有效。当地址A11~A8=0001,Y1N=0,CANCS的清零由DSP的RD控制,RD信号的低电平将使CANCS=0,指令11完成此功能。当地址A11~A8=0010,数据D19~D16=1000,则Y2N=0,DSP的WR信号的将使CANCS=1,指令14完成此功能;当地址A11~A8=0101,数据D19~D16=0111,则Y5N=0,DSP的WR信号沿将使ALEhigh=1,此时CANWE始终保持1,CANALE为WR取反,指令8完成此功能;当地址A11~A8=0110,则Y6N=0,RD信号的低电平将使ALEhigh=0,此时CANALE始终保持0,CANWE为WR,指令10完成此功能。

  ADSP21062仅有3个外部中断,在挂多个外设时就显得资源紧张。图4中,低电平有效或下降沿有效的中断信号可以用与的关系连接到一个中断上,DSP在响应中断后,读相应的多个外设,判断是来自哪一个外设,这样就可以扩展更多的中断。

  结语

  SJA1000接口为地址/数据复用模式,DSP处理器通常为地址/数据总线分离的结构,本文提供了两种不同接口的思路和方法。测试表明,这种方法确实可行,传输效率高。

<< 前一页

[文章纠错]

文章网友提供,仅供学习参考,版权为原作者所有,如侵犯到

你的权益请联系542334618@126.com,我们会及时处理。

12

会员评价:

0 发表评论

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 5-9-2025 23:13 , Processed in 0.434934 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.