搜索
bottom↓
回复: 23

DSP28035 can 通信不能成功发送数据

[复制链接]

出0入0汤圆

发表于 2013-5-13 09:54:49 | 显示全部楼层 |阅读模式
最近在调试DSP28035can通信,采用查询方式发送,发送标志始终显示未发送成功,但TX管脚示波器上又有发送数据波形,但显示的波形可以看出发送的数据又是不正确的,有没有遇到过同样问题的朋友?

下面为初始化代码
void InitCan(void)
{

        struct ECAN_REGS ECanaShadow;
            EALLOW;
            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;

            ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
            ECanaShadow.CANMC.bit.SCB = 1;// User has selected eCAN mode
            ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;

            ECanaMboxes.MBOX0.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX1.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX2.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX3.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX4.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX5.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX6.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX7.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX8.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX9.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX10.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX11.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX12.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX13.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX14.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX15.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX16.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX17.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX18.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX19.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX20.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX21.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX22.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX23.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX24.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX25.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX26.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX27.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX28.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX29.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX30.MSGCTRL.all = 0x00000000;
            ECanaMboxes.MBOX31.MSGCTRL.all = 0x00000000;

            ECanaRegs.CANTA.all = 0xFFFFFFFF;   // Clear all TAn bits
            ECanaRegs.CANRMP.all = 0xFFFFFFFF;  // Clear all RMPn bits
            ECanaRegs.CANGIF0.all = 0xFFFFFFFF; // Clear all interrupt flag bits
            ECanaRegs.CANGIF1.all = 0xFFFFFFFF;

            // Configure bit timing parameters for eCANA
            ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
            ECanaShadow.CANMC.bit.CCR = 1 ;            // Set CCR = 1
            ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
            // Wait until the CPU has been granted permission to change the configuration registers
            do
            {
              ECanaShadow.CANES.all = ECanaRegs.CANES.all;
            } while(ECanaShadow.CANES.bit.CCE != 1 );

            ECanaShadow.CANBTC.all = 0;



            ECanaShadow.CANBTC.bit.BRPREG = 1;    //2     1
            ECanaShadow.CANBTC.bit.TSEG2REG = 9;  //1     9
            ECanaShadow.CANBTC.bit.TSEG1REG = 6;  //6     6

            ECanaShadow.CANBTC.bit.SAM = 1;

            ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all;

            ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
            ECanaShadow.CANMC.bit.CCR = 0 ;
            /////////////////////////////////////////////////////
           /* ECanaShadow.CANMC.bit.PDR = 0;
            ECanaShadow.CANMC.bit.DBO = 0;
            ECanaShadow.CANMC.bit.WUBA = 0;
            ECanaShadow.CANMC.bit.CDR = 0;
            ECanaShadow.CANMC.bit.ABO = 0;
            ECanaShadow.CANMC.bit.STM = 0;
            ECanaShadow.CANMC.bit.SRES = 0;
            ECanaShadow.CANMC.bit.MBNR = 0;
            ECanaShadow.CANMC.bit.SUSP = 1;*/
            /////////////////////////////////////////////////////
            ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
            do
            {
              ECanaShadow.CANES.all = ECanaRegs.CANES.all;
            } while(ECanaShadow.CANES.bit.CCE != 0 );
            //Disable all Mailboxes
            ECanaRegs.CANME.all = 0;        // disable
            EDIS;

            EALLOW;
            ECanaMboxes.MBOX0.MSGID.all = 0x00040000;//0x9555AAA0     0x00040000
            ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;  //Send MailBox
            ECanaMboxes.MBOX1.MSGCTRL.bit.DLC = 8;  //Receive MailBox
            ECanaRegs.CANMD.all =0x00000002;//0:send   1:receive
            ECanaRegs.CANME.all = 0x00000003;
                EDIS;

            ECanaMboxes.MBOX0.MDL.all = 0x12345678;//0x9555AAA0;
            ECanaMboxes.MBOX0.MDH.all = 0x89ABCDEF;
            EALLOW;
                ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
                ECanaShadow.CANMC.bit.STM = 0;    // Configure CAN for self-test mode 1
                ECanaShadow.CANMC.bit.DBO = 1;
                ECanaShadow.CANMC.bit.ABO = 1;    //CAN BUS ON
                ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;
            EDIS;


                EALLOW;
                ECanaRegs.CANMIM.all=0x00000002;//使能邮箱1接收中断

                ECanaRegs.CANMIL.all=0;//所有邮箱在中断0(ECANOINT)产生邮箱中断

                ECanaRegs.CANGIF0.all=0xFFFFFFFF;//全局中断标志寄存器CANGIF0所有标志位清零
                ECanaRegs.CANGIF1.all=0xFFFFFFFF;//全局中断标志寄存器CANGIF1所有标志位清零

                ECanaRegs.CANGIM.bit.I0EN=1;//eCAN模块中中断0使能

                EDIS;
}      

发送函数:
void sCanSend(void)
{
         ECanaRegs.CANTRS.all = 0;
         ECanaMboxes.MBOX0.MDL.all = 0x12345678;//0x9555AAA0;
         ECanaMboxes.MBOX0.MDH.all = 0x89ABCDEF;

         ECanaRegs.CANTRS.all = 0x00000001;

        while(ECanaRegs.CANTA.all != 0x00000001 ) {}//程序会一直卡在这里
         ECanaRegs.CANTA.all = 0x00000001;

   }     

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

 楼主| 发表于 2013-5-15 23:11:29 来自手机 | 显示全部楼层
问题解决

出0入0汤圆

发表于 2013-5-18 14:38:30 | 显示全部楼层
我也遇到同样的问题,发不出数据,但是总线一直有数据,快满载了,你是怎么解决的?

出0入0汤圆

 楼主| 发表于 2013-5-21 20:46:18 | 显示全部楼层
xujie841128 发表于 2013-5-18 14:38
我也遇到同样的问题,发不出数据,但是总线一直有数据,快满载了,你是怎么解决的? ...

CAN通信需要两个节点才能一起调试的,一个做为接收一个发送,如果只有一个发送的节点,并且设置的重发模式,会因为对方没有应答,发送方会一直重新发送数据的。如果有一个接收节点成功接收数据就OK了

出0入0汤圆

发表于 2013-6-14 02:39:49 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2013-6-14 07:50:52 | 显示全部楼层
huhang 发表于 2013-5-21 20:46
CAN通信需要两个节点才能一起调试的,一个做为接收一个发送,如果只有一个发送的节点,并且设置的重发模 ...

+1.                                                   

出0入0汤圆

发表于 2013-11-19 16:49:02 | 显示全部楼层
我最近也在调试F28035 can,总线上一直没有数据,楼主可以留个邮箱,让我咨询下吗?

出0入0汤圆

 楼主| 发表于 2013-11-19 20:30:17 | 显示全部楼层
breakhell 发表于 2013-11-19 16:49
我最近也在调试F28035 can,总线上一直没有数据,楼主可以留个邮箱,让我咨询下吗? ...

284602883@qq.com

出0入0汤圆

发表于 2013-11-25 13:17:48 | 显示全部楼层
我用的ti的例程,2802,while(ECanaRegs.CANTA.all != 0x00000001 ) {}//程序会一直卡在这里
而且怎么canTX引脚没有波形呢,,再自测试的时候是正常的
请楼主指导一下

出0入0汤圆

发表于 2013-11-25 15:57:46 | 显示全部楼层

如果不是两个节点的话,dspTX引脚应该有波形吧,,收发器的canH和canL直接也应该有波形吧,,我现在将ABO置位,dsp按理会一直发数据,,但是我用示波器在dsp的canTX引脚测不到波形,在收发器的canH和canL直接也测不到波形,反而在dsp的canRX引脚有波形,好奇怪啊,,麻烦大神指点一下

出0入0汤圆

发表于 2013-11-25 20:18:07 | 显示全部楼层
xiaowenshao 发表于 2013-11-25 15:57
如果不是两个节点的话,dspTX引脚应该有波形吧,,收发器的canH和canL直接也应该有波形吧,,我现在将ABO ...

如果只有一个节点,可以先用自收自发模式,首先确定软件没有问题。如果自收自发可以的话,再切换到正常模式。一般来说自收自发模式可以了,正常模式就没多大问题了。正常模式下调试,就必须至少要2个节点了。

出0入0汤圆

发表于 2013-11-25 22:19:17 | 显示全部楼层
51EDA技术 发表于 2013-11-25 20:18
如果只有一个节点,可以先用自收自发模式,首先确定软件没有问题。如果自收自发可以的话,再切换到正常模 ...

我现在一个节点,程序一直在发送数据,但是用示波器测量dsp的canTX引脚无波形,测量dsp的canRX引脚却有波形(还比较规律的波形),vp230的canH和canL无波形,,这是什么情况呢;

出0入0汤圆

 楼主| 发表于 2013-11-25 22:31:00 | 显示全部楼层
xiaowenshao 发表于 2013-11-25 22:19
我现在一个节点,程序一直在发送数据,但是用示波器测量dsp的canTX引脚无波形,测量dsp的canRX引脚却有波 ...

一个节点测试TX管脚上的波形,在你设置了重发模式后,示波器是能捕捉到波形,但波形是不对的,测试没有意义,所以想看到正确的发送数据,必须有一个接收节点。至于你说的RX脚上有波形,就不应该了,检查下你的电路吧

出0入0汤圆

发表于 2013-11-26 09:26:25 | 显示全部楼层
huhang 发表于 2013-11-25 22:31
一个节点测试TX管脚上的波形,在你设置了重发模式后,示波器是能捕捉到波形,但波形是不对的,测试没有意 ...

确实是电路问题,当时查电路只看了原理图,后来发现pcb不一致,坑爹啊

出0入0汤圆

发表于 2014-1-17 12:24:59 | 显示全部楼层
楼主,我最近也在搞28069的can通信收发,可以发你的程序给我参考? 邮箱:592876981@qq.com

出0入0汤圆

 楼主| 发表于 2014-1-18 10:49:27 | 显示全部楼层
30zero 发表于 2014-1-17 12:24
楼主,我最近也在搞28069的can通信收发,可以发你的程序给我参考? 邮箱:

官方的例程就好用的。

出0入0汤圆

发表于 2014-1-20 13:36:27 | 显示全部楼层
huhang 发表于 2014-1-18 10:49
官方的例程就好用的。

不明白接收邮箱,和仲裁域的位置。能发一下你做好的通信程序给我参考吗

出0入0汤圆

发表于 2014-1-26 10:28:33 | 显示全部楼层
楼主,我现在像你描叙的一样,同样的卡在哪里,我也是2个CAN的模块在调。接收的也是没有接收到消息,总线上也是没有波形输出。硬件是iso1050隔离式CAN芯片,电路图是ISO1050的典型接法,这没有错的!2边的自测程序也没有问题的~

出0入0汤圆

发表于 2014-10-12 09:19:12 | 显示全部楼层
xiaowenshao 发表于 2013-11-25 22:19
我现在一个节点,程序一直在发送数据,但是用示波器测量dsp的canTX引脚无波形,测量dsp的canRX引脚却有波 ...

你好!请问你以下你最后CAN输不出波形是怎么解决的。我现在也在苦恼中。。

出0入0汤圆

发表于 2014-10-12 21:39:42 | 显示全部楼层
xxp123 发表于 2014-10-12 09:19
你好!请问你以下你最后CAN输不出波形是怎么解决的。我现在也在苦恼中。。 ...

我当时是硬件上的问题

出0入0汤圆

发表于 2014-10-29 00:17:16 | 显示全部楼层
最近也碰到同样问题,TX无波形,不知什么原因,自测好着

出0入0汤圆

发表于 2015-6-28 19:51:53 | 显示全部楼层
本帖最后由 xxp123 于 2015-6-28 19:56 编辑
xiaowenshao 发表于 2013-11-25 15:57
如果不是两个节点的话,dspTX引脚应该有波形吧,,收发器的canH和canL直接也应该有波形吧,,我现在将ABO ...


因为我使用的是TI DSPF28035官方例程,例程里面是自循环,当程序改为正常模式时,需要在初始化时加上CANGPIO的初始化,程序才能正常工作。。(官方例程缺少这句,然而后面我使用F28335,官方自循环例程是有CANGPIO初始化的,只能说28035的官方例程不完善)

出0入0汤圆

发表于 2016-4-30 19:50:55 | 显示全部楼层

你好。您会CLA么。交流下。835016072

出0入0汤圆

发表于 2016-9-20 13:37:54 | 显示全部楼层
+1                                   
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-16 17:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表