11496|13

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DSP28335 eCAN跟usbcan通讯问题 [复制链接]

硬件:DSP28335的eCAN-B与vp230连接,USBcan采用的是周立功的usbcan-i与上位机连接。

出现的问题是上位机上的监控软件没法接受到DSP的eCAN模块发过来的数据。


下面是代码:
void main(void)
{


   struct ECAN_REGS ECanbShadow;

   InitSysCtrl();//开启系统时钟和外设时钟

   InitECanGpio();//这里用到的是ecan-b的GPIO12和GPIO13
   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;



   InitPieVectTable();



    MessageReceivedCount = 0;

    EALLOW;
    ECanbShadow.CANTIOC.all = ECanbRegs.CANTIOC.all;
    ECanbShadow.CANTIOC.bit.TXFUNC = 1;
    ECanbRegs.CANTIOC.all = ECanbShadow.CANTIOC.all;

    ECanbShadow.CANRIOC.all = ECanbRegs.CANRIOC.all;
    ECanbShadow.CANRIOC.bit.RXFUNC = 1;
    ECanbRegs.CANRIOC.all = ECanbShadow.CANRIOC.all;
    EDIS;


    ECanbRegs.CANME.all = 0;



    ECanbMboxes.MBOX0.MSGID.all = 0x01C40000;//发送 标准帧
    ECanbMboxes.MBOX1.MSGID.all = 0x18040000;//接受


    ECanbRegs.CANMD.all=0x00000002;//1->RX 0->tx



    ECanbRegs.CANME.all = 0x00000003;



    ECanbMboxes.MBOX0.MSGCTRL.bit.DLC = 8;
    ECanbMboxes.MBOX1.MSGCTRL.bit.DLC = 8;


    ECanbMboxes.MBOX0.MSGCTRL.bit.RTR = 0;
    ECanbMboxes.MBOX1.MSGCTRL.bit.RTR = 0;



    ECanbMboxes.MBOX0.MDL.all = 0x9555AAA0;
    ECanbMboxes.MBOX0.MDH.all = 0x89ABCDEF;



    EALLOW;
    ECanbRegs.CANMIM.all = 0xFFFFFFFF;
    ECanbRegs.CANMIL.all = 0;


    ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;
    ECanbShadow.CANMC.bit.CCR = 1;
    ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;
    EDIS;



    // Wait for CCE bit to be set..
    do
    {
      ECanbShadow.CANES.all = ECanbRegs.CANES.all;
    } while(ECanbShadow.CANES.bit.CCE != 1 );

    // Configure the eCAN timing
    EALLOW;
    ECanbShadow.CANBTC.all = ECanbRegs.CANBTC.all;


    ECanbShadow.CANBTC.bit.BRPREG = 9;    // (BRPREG + 1) = 1
    ECanbShadow.CANBTC.bit.TSEG2REG = 1 ; // to the CAN module
    ECanbShadow.CANBTC.bit.TSEG1REG = 6;  // Bit time = 2us,则为500kbps
    ECanbShadow.CANBTC.bit.SAM = 1;
    ECanbRegs.CANBTC.all = ECanbShadow.CANBTC.all;

    ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;
    ECanbShadow.CANMC.bit.CCR = 0;
    ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;
    EDIS;



    do
    {
      ECanbShadow.CANES.all = ECanbRegs.CANES.all;
    } while(ECanbShadow.CANES.bit.CCE != 0 );

    // Configure the eCAN for self test mode
    // Enable the enhanced features of the eCAN.
    EALLOW;
    ECanbShadow.CANMC.all = ECanbRegs.CANMC.all;
    ECanbShadow.CANMC.bit.ABO = 1;
    ECanbShadow.CANMC.bit.STM = 0;    // Configure CAN for self-test mode
    ECanbShadow.CANMC.bit.SCB = 1;    // eCAN mode (reqd to access 32 mailboxes)
    ECanbRegs.CANMC.all = ECanbShadow.CANMC.all;
    EDIS;


    // Begin transmitting
    for(;;)                                
    {

       ECanbRegs.CANTRS.all = 0x00000001;  // Set TRS for all transmit mailboxes,MX0开始发送
       while(ECanbRegs.CANTA.all != 0x00000001 ) {}  // Wait for all TAn bits to be set..发送完成后对应的位被置1
       ECanbRegs.CANTA.all = 0x0000FFFF;   // Clear all TAn
       MessageReceivedCount++;

       //Read from Receive mailboxes and begin checking for data */

    }
}


我的想法是邮箱0设为发送邮箱,邮箱1设为接受。系统频率为100Mhz,can波特率为500k.程序运行后一直等待在while(ECanbRegs.CANTA.all != 0x00000001 ) {}这一步,也就是说没有发送完成等待置位

最新回复

关于您在“DSP28335 eCAN跟usbcan通讯问题”的帖子 楼主,您好,我也遇到了同样的问题,您能否分享给我解决办法?拜托了。       详情 回复 发表于 2019-7-15 15:41
点赞 关注
 

回复
举报

6

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没人吗
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
本帖最后由 play_uyy 于 2014-5-29 10:42 编辑

怎么没人看啊
 
 
 

回复

450

帖子

43

TA的资源

一粒金砂(高级)

4
 
正常发送时,程序死在这个while循环,很可能是硬件造成的,如果程序曾正常工作过,当没有节点响应接收时,就会死在这个while里。这可能是CAN高低接反,收发器使用错误,CAN线上无终端电阻导致CAN电平错误等。一般程序要避免死在这个while里,一定要能退出这个while。
你这自发自收,还是参考下TI的例子吧,百度里也有

点评

我用的是DSP开发板,我检查了下厂商提供的电路,应该是没问题。我测试了自发自收,是可行的。 但是向外发送和接受就不行了  详情 回复 发表于 2014-5-28 15:27
个人签名一心一意,精益求精
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

5
 
Laspide 发表于 2014-5-28 09:14
正常发送时,程序死在这个while循环,很可能是硬件造成的,如果程序曾正常工作过,当没有节点响应接收时, ...

我用的是DSP开发板,我检查了下厂商提供的电路,应该是没问题。我测试了自发自收,是可行的。
但是向外发送和接受就不行了
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

6
 
STM=0 是正常模式,不是在自发自收,注释没改过来
 
 
 

回复

450

帖子

43

TA的资源

一粒金砂(高级)

7
 
ECanbShadow.CANBTC.bit.BRPREG = 9;    // (BRPREG + 1) = 1
    ECanbShadow.CANBTC.bit.TSEG2REG = 1 ; // to the CAN module
    ECanbShadow.CANBTC.bit.TSEG1REG = 6;  // Bit time = 2us,则为500kbps

500k波特率的话,150M频率,我用的的值是9,2,10;100M的话,这几个值好像不对,
TSEG2REG最小也是2,

这种配置最好还是用官方的好,毕竟人家做的芯片,最熟不过了

其他的对照例程检查下

点评

The following bit timing rules must be fulfilled when determining the bit segment values: · TSEG1(min)>=TSEG2 · IPT  详情 回复 发表于 2014-5-29 10:41
个人签名一心一意,精益求精
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

8
 
Laspide 发表于 2014-5-29 08:49
ECanbShadow.CANBTC.bit.BRPREG = 9;    // (BRPREG + 1) = 1
    ECanbShadow.CANBTC.bit.TSEG2REG = 1 ; ...

The following bit timing rules must be fulfilled when determining the bit segment values:
· TSEG1(min)>=TSEG2
· IPT <= TSEG1 <=16 TQ
· IPT <= TSEG2 <=8 TQ
· IPT = 3/BRP (the resulting IPT has to be rounded up to the next integer value)
· 1 TQ <= SJW min[4 TQ, TSEG2] (SJW = Synchronization jump width)
· To utilize three-time sampling mode, BRP >= 5 has to be selected
TSEG2 是可以选1的,100M对应的就是500Kbps.这个我用示波器测过的

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
你好,你的问题解决了吗?还有个问题请教你,你是怎么用示波器测的波特率,不是发送不成功,怎么还能测试到信号?

点评

你好,我也碰到了这个问题,能交流一下吗?在线等  详情 回复 发表于 2015-1-29 11:07
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

10
 
hushande2014 发表于 2015-1-28 22:35
你好,你的问题解决了吗?还有个问题请教你,你是怎么用示波器测的波特率,不是发送不成功,怎么还能测试到信号?



你好,我也碰到了这个问题,能交流一下吗?在线等
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
楼主你好,我也碰到了这个问题,能指导一下吗?在线等你
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

12
 
您好楼主,我也一直遇到这个问题,能否分享一下解决方法,非常感谢
 
 
 

回复

1950

帖子

4

TA的资源

版主

13
 
波特率可以看示波器的时间,HS-CAN,500kbps, 1bit 2 us.
有些示波器还支持简单消息分析。

个人签名MicroPython中文社区https://micropython.org.cn/forum/  
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 

关于您在“DSP28335 eCAN跟usbcan通讯问题”的帖子 楼主,您好,我也遇到了同样的问题,您能否分享给我解决办法?拜托了。

 

 

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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