4068|5

43

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

两块 DSP2812 对接 CAN通信 [复制链接]

哪位亲做过 两块 DSP2812 对接 CAN通信,一片 做接收,一片做发送file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/X1%60E@%60R9LLX~6VHSWO%60NXY0.gif   

我目前通信失败,找不出因由,望指教 ,既不发送成功,也不能接收成功


我两片 DSP的ECAN的初始化都是这样的,是个例程里面的, 我对照过TI的文档,初始化的顺序也是对的:


void InitECan(void)
{   
struct ECAN_REGS ECanaShadow;
EALLOW;

//配置GPIO引脚工作在eCAN功能
GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1;
GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1;

//配置eCAN的RX和TX分别为eCAN的接收和发送引脚
ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
ECanaShadow.CANTIOC.bit.TXFUNC = 1;
ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;

ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
ECanaShadow.CANRIOC.bit.RXFUNC = 1;
ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
EDIS;

EALLOW;
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.STM = 0;    //工作在正常模式
ECanaShadow.CANMC.bit.SCM = 1;    //工作在ecan模式
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;

//初始化所有主设备控制区域为0,MCF所有的位都初始化为0
ECanaMboxes.MBOX0.MCF.all = 0x00000000;
    ECanaMboxes.MBOX1.MCF.all = 0x00000000;
ECanaMboxes.MBOX2.MCF.all = 0x00000000;
ECanaMboxes.MBOX3.MCF.all = 0x00000000;
ECanaMboxes.MBOX4.MCF.all = 0x00000000;
ECanaMboxes.MBOX5.MCF.all = 0x00000000;
ECanaMboxes.MBOX6.MCF.all = 0x00000000;
ECanaMboxes.MBOX7.MCF.all = 0x00000000;
ECanaMboxes.MBOX8.MCF.all = 0x00000000;
ECanaMboxes.MBOX9.MCF.all = 0x00000000;
ECanaMboxes.MBOX10.MCF.all = 0x00000000;
ECanaMboxes.MBOX11.MCF.all = 0x00000000;
ECanaMboxes.MBOX12.MCF.all = 0x00000000;
ECanaMboxes.MBOX13.MCF.all = 0x00000000;
ECanaMboxes.MBOX14.MCF.all = 0x00000000;
ECanaMboxes.MBOX15.MCF.all = 0x00000000;
ECanaMboxes.MBOX16.MCF.all = 0x00000000;
ECanaMboxes.MBOX17.MCF.all = 0x00000000;
ECanaMboxes.MBOX18.MCF.all = 0x00000000;
ECanaMboxes.MBOX19.MCF.all = 0x00000000;
ECanaMboxes.MBOX20.MCF.all = 0x00000000;
ECanaMboxes.MBOX21.MCF.all = 0x00000000;
ECanaMboxes.MBOX22.MCF.all = 0x00000000;
ECanaMboxes.MBOX23.MCF.all = 0x00000000;
ECanaMboxes.MBOX24.MCF.all = 0x00000000;
ECanaMboxes.MBOX25.MCF.all = 0x00000000;
ECanaMboxes.MBOX26.MCF.all = 0x00000000;
ECanaMboxes.MBOX27.MCF.all = 0x00000000;
ECanaMboxes.MBOX28.MCF.all = 0x00000000;
ECanaMboxes.MBOX29.MCF.all = 0x00000000;
ECanaMboxes.MBOX30.MCF.all = 0x00000000;
ECanaMboxes.MBOX31.MCF.all = 0x00000000;
/* Clear all TAn bits */
ECanaRegs.CANTA.all = 0xFFFFFFFF;

/* Clear all RMPn bits */
ECanaRegs.CANRMP.all = 0xFFFFFFFF;

/* Clear all interrupt flag bits */
ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
ECanaRegs.CANGIF1.all = 0xFFFFFFFF;

/* Configure bit timing parameters */
EALLOW;
//ECanaRegs.CANMIM.all = 0xFFFFFFFF;  /*邮箱中断使能*/
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 1;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;

//CPU请求向CANBTC和CANGAM写配置信息,该位置1后必须等到CANED.CCE为1,才能
//对CANBTC进行操作。
do
{
   ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 1);

EALLOW;
/*(BRPREG+1)=10 feeds a 15MHz CAN clock*/
ECanaShadow.CANBTC.bit.BRP = 9;
/*150/10=15*/
ECanaShadow.CANBTC.bit.TSEG2 = 2;
ECanaShadow.CANBTC.bit.TSEG1 = 10;
ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;

ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
ECanaShadow.CANMC.bit.CCR = 0;
ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
EDIS;
do
{
  ECanaShadow.CANES.all = ECanaRegs.CANES.all;
}while(ECanaShadow.CANES.bit.CCE != 0);  //等待CCE位清零

//屏蔽所有邮箱
ECanaRegs.CANME.all = 0;  //在写MSGID之前要完成该操作

/*发送邮箱的ID号*/
ECanaMboxes.MBOX0.MID.all = 0x00C80000;

/*接收邮箱的ID号*/
ECanaMboxes.MBOX16.MID.all =  0x00C80000;

/*邮箱0为TX,16为RX*/
ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
ECanaShadow.CANMD.bit.MD0 =0;
    ECanaShadow.CANMD.bit.MD16 =1;
ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;


/*数据长度 8个BYTE*/
ECanaMboxes.MBOX0.MCF.bit.DLC = 8;
ECanaMboxes.MBOX16.MCF.bit.DLC = 8;
   
//设置发送优先级  2009.3.15 Add
ECanaMboxes.MBOX0.MCF.bit.TPL = 0;
ECanaMboxes.MBOX16.MCF.bit.TPL = 0;
   
   
/*没有远方应答帧被请求*/
ECanaMboxes.MBOX0.MCF.bit.RTR = 0;
ECanaMboxes.MBOX16.MCF.bit.RTR = 0;


//向邮箱RAM区写数据
ECanaMboxes.MBOX0.MDRL.all = 0x01234567;
ECanaMboxes.MBOX0.MDRH.all = 0x89ABCDEF;
    //邮箱使能Mailbox0

ECanaShadow.CANME.all = ECanaRegs.CANME.all;
ECanaShadow.CANME.bit.ME0 =1;
ECanaShadow.CANME.bit.ME16 =1;
ECanaRegs.CANME.all = ECanaShadow.CANME.all;
}

最新回复

您好,楼主,您的问题解决了吗,我这也是遇到了同样的问题,求解,非常感谢  详情 回复 发表于 2016-4-26 10:38
 
点赞 关注

回复
举报

40

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
有没有使用Transceiver啊?如果没有的话,是没法成功的,CAN模块需要通过收发器从总线上把自己发出的bit读取回来做仲裁判断,如果没有用Transceiver,那么TX发送1,RX读取回来是0,CAN模块就认为自己丢失了仲裁权了,所以不能成功。
土办法是把两个片子的TX和RX都连在一起,但是需要引脚能够设置成开漏模式才行,否则两边发送不同电平的时候,引脚就烧了...

点评

我的开发板上有收发器,还是不行啊!  详情 回复 发表于 2014-2-25 15:27
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/472920150/QQ/WinTemp/RichOle/%60LW07TWV%7B]VYH%257@6R1(%25IY.jpg[img]file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/472920150/QQ/WinTemp/RichOle/HF0FPK$%25~2_Y%60[IOUQH)F$N.jpg[/img]
这是两块开发板的CAN通信的驱动芯片,这样接可以正常通信不?

点评

图片打不开,你下载到本地再上传!  详情 回复 发表于 2012-12-26 17:30
 
 
 

回复

6066

帖子

90

TA的资源

裸片初长成(初级)

4
 

回复 板凳 foreverlove3721 的帖子

图片打不开,你下载到本地再上传!
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

5
 
renton 发表于 2012-12-25 11:21
有没有使用Transceiver啊?如果没有的话,是没法成功的,CAN模块需要通过收发器从总线上把自己发出的bit读 ...

我的开发板上有收发器,还是不行啊!
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

6
 
您好,楼主,您的问题解决了吗,我这也是遇到了同样的问题,求解,非常感谢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表