DSP28035 can 通信不能成功发送数据
最近在调试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;
}
问题解决 我也遇到同样的问题,发不出数据,但是总线一直有数据,快满载了,你是怎么解决的?{:sad:} xujie841128 发表于 2013-5-18 14:38 static/image/common/back.gif
我也遇到同样的问题,发不出数据,但是总线一直有数据,快满载了,你是怎么解决的? ...
CAN通信需要两个节点才能一起调试的,一个做为接收一个发送,如果只有一个发送的节点,并且设置的重发模式,会因为对方没有应答,发送方会一直重新发送数据的。如果有一个接收节点成功接收数据就OK了
学习了! huhang 发表于 2013-5-21 20:46 static/image/common/back.gif
CAN通信需要两个节点才能一起调试的,一个做为接收一个发送,如果只有一个发送的节点,并且设置的重发模 ...
+1. 我最近也在调试F28035 can,总线上一直没有数据,楼主可以留个邮箱,让我咨询下吗? breakhell 发表于 2013-11-19 16:49 static/image/common/back.gif
我最近也在调试F28035 can,总线上一直没有数据,楼主可以留个邮箱,让我咨询下吗? ...
284602883@qq.com 我用的ti的例程,2802,while(ECanaRegs.CANTA.all != 0x00000001 ) {}//程序会一直卡在这里
而且怎么canTX引脚没有波形呢,,再自测试的时候是正常的
请楼主指导一下 51EDA技术 发表于 2013-6-14 07:50
+1.
如果不是两个节点的话,dspTX引脚应该有波形吧,,收发器的canH和canL直接也应该有波形吧,,我现在将ABO置位,dsp按理会一直发数据,,但是我用示波器在dsp的canTX引脚测不到波形,在收发器的canH和canL直接也测不到波形,反而在dsp的canRX引脚有波形,好奇怪啊,,麻烦大神指点一下{:3_47:} xiaowenshao 发表于 2013-11-25 15:57
如果不是两个节点的话,dspTX引脚应该有波形吧,,收发器的canH和canL直接也应该有波形吧,,我现在将ABO ...
如果只有一个节点,可以先用自收自发模式,首先确定软件没有问题。如果自收自发可以的话,再切换到正常模式。一般来说自收自发模式可以了,正常模式就没多大问题了。正常模式下调试,就必须至少要2个节点了。 51EDA技术 发表于 2013-11-25 20:18
如果只有一个节点,可以先用自收自发模式,首先确定软件没有问题。如果自收自发可以的话,再切换到正常模 ...
我现在一个节点,程序一直在发送数据,但是用示波器测量dsp的canTX引脚无波形,测量dsp的canRX引脚却有波形(还比较规律的波形),vp230的canH和canL无波形,,这是什么情况呢; xiaowenshao 发表于 2013-11-25 22:19
我现在一个节点,程序一直在发送数据,但是用示波器测量dsp的canTX引脚无波形,测量dsp的canRX引脚却有波 ...
一个节点测试TX管脚上的波形,在你设置了重发模式后,示波器是能捕捉到波形,但波形是不对的,测试没有意义,所以想看到正确的发送数据,必须有一个接收节点。至于你说的RX脚上有波形,就不应该了,检查下你的电路吧 huhang 发表于 2013-11-25 22:31
一个节点测试TX管脚上的波形,在你设置了重发模式后,示波器是能捕捉到波形,但波形是不对的,测试没有意 ...
确实是电路问题,当时查电路只看了原理图,后来发现pcb不一致,坑爹啊 楼主,我最近也在搞28069的can通信收发,可以发你的程序给我参考? 邮箱:592876981@qq.com 30zero 发表于 2014-1-17 12:24
楼主,我最近也在搞28069的can通信收发,可以发你的程序给我参考? 邮箱:
官方的例程就好用的。 huhang 发表于 2014-1-18 10:49
官方的例程就好用的。
不明白接收邮箱,和仲裁域的位置。能发一下你做好的通信程序给我参考吗 楼主,我现在像你描叙的一样,同样的卡在哪里,我也是2个CAN的模块在调。接收的也是没有接收到消息,总线上也是没有波形输出。硬件是iso1050隔离式CAN芯片,电路图是ISO1050的典型接法,这没有错的!2边的自测程序也没有问题的~ xiaowenshao 发表于 2013-11-25 22:19
我现在一个节点,程序一直在发送数据,但是用示波器测量dsp的canTX引脚无波形,测量dsp的canRX引脚却有波 ...
你好!请问你以下你最后CAN输不出波形是怎么解决的。我现在也在苦恼中。。 xxp123 发表于 2014-10-12 09:19
你好!请问你以下你最后CAN输不出波形是怎么解决的。我现在也在苦恼中。。 ...
我当时是硬件上的问题 最近也碰到同样问题,TX无波形,不知什么原因,自测好着 本帖最后由 xxp123 于 2015-6-28 19:56 编辑
xiaowenshao 发表于 2013-11-25 15:57
如果不是两个节点的话,dspTX引脚应该有波形吧,,收发器的canH和canL直接也应该有波形吧,,我现在将ABO ...
因为我使用的是TI DSPF28035官方例程,例程里面是自循环,当程序改为正常模式时,需要在初始化时加上CANGPIO的初始化,程序才能正常工作。。(官方例程缺少这句,然而后面我使用F28335,官方自循环例程是有CANGPIO初始化的,只能说28035的官方例程不完善) 51EDA技术 发表于 2013-6-14 07:50
+1.
你好。您会CLA么。交流下。835016072 +1
页:
[1]