DSP28335 CAN接收不到数据

[复制链接]
9110|12
 楼主| zyghero 发表于 2014-3-5 17:08 | 显示全部楼层 |阅读模式
DSP28335 CAN接收不到另外一个CAN节点发送的数据,数据帧格式为:01 C0 11 22 33 44 55 66 77 88。01 C0为帧信息,后面的为数据。两个CAN节点的波特率均为500kbs,我配置的CAN接收为中断接收。我用另外一个CAN模块是可以收到发送CAN节点发送的数据的。不知道是不是我配置的CAN节点配置有误,还是数据被我屏蔽了。
  1. #include "DSP2833x_Device.h"     // Headerfile Include File
  2. #include "DSP2833x_GlobalPrototypes.h"
  3. #include "DSP2833x_SWPrioritizedIsrLevels.h"
  4. #include "DSP2833x_Project.h"

  5. /*
  6. *
  7. */
  8. interrupt void canb_receive_isr(void);

  9. Uint16 Send(void);
  10. Uint32 recData_L;
  11. Uint32 recData_H;



  12. void main()
  13. {
  14.         struct ECAN_REGS ECanbShadow;
  15. // 1 初始化系统
  16.         InitSysCtrl();       
  17.        
  18. // 2 初始化引脚
  19.         InitECanGpio();

  20. // 3 清除中断
  21.         DINT;

  22. //  初始化PIE中断控制寄存器
  23.         InitPieCtrl();

  24. //   关闭CPU中断,清除CPU中断标志
  25.         IER = 0x0000;
  26.         IFR = 0x0000;

  27. //  初始化PIE中断向量表
  28.         InitPieVectTable();
  29.         EALLOW;
  30.         PieVectTable.ECAN0INTB = &canb_receive_isr;
  31.         EDIS;

  32. // 4 初始化设备
  33.         InitECanb();

  34. // 5 用户代码
  35. // 写MSGID
  36.         ECanbMboxes.MBOX25.MSGID.all = 0x04000000;
  37.         ECanbMboxes.MBOX5.MSGID.all  = 0x07000000;
  38. // 配置邮箱25为发送邮箱
  39.         ECanbShadow.CANMD.all = ECanbRegs.CANMD.all;
  40.         ECanbShadow.CANMD.bit.MD25 = 0;
  41.         ECanbShadow.CANMD.bit.MD5 = 1;
  42.         ECanbRegs.CANMD.all = ECanbShadow.CANMD.all;
  43. // 使能邮箱25
  44.         ECanbShadow.CANME.all = ECanbRegs.CANME.all;
  45.         ECanbShadow.CANME.bit.ME25 = 1;
  46.     ECanbShadow.CANME.bit.ME5  = 1;
  47.         ECanbRegs.CANME.all = ECanbShadow.CANME.all;
  48. // 在消息控制器中写DLC区:数据长度为8
  49.        
  50.         ECanbMboxes.MBOX25.MSGCTRL.bit.DLC = 2;//数据长度
  51.         ECanbMboxes.MBOX5.MSGCTRL.bit.DLC = 8;
  52.          
  53.         // MBOX25数据为0002
  54.         ECanbMboxes.MBOX25.MDL.byte.BYTE0 = 0x00;
  55.         ECanbMboxes.MBOX25.MDL.byte.BYTE1 = 0x02;


  56.         // 没有远程应答帧请求
  57.         ECanbMboxes.MBOX5.MSGCTRL.bit.RTR = 0;

  58.         // 邮箱中断使能
  59.         EALLOW;
  60.         ECanbRegs.CANMIM.all = 0xFFFFFFFF; // 使能所有的邮箱产生中断,没有用到的邮箱不产生中断
  61.         // 邮箱中断将产生ECAN0INT中断
  62.         ECanbRegs.CANMIL.all = 0; // 在中断线0产生中断
  63.         ECanbRegs.CANGIF0.all = 0xFFFFFFFF; // 全局中断标志寄存器
  64.         // ECAN0INT中断请求线使能
  65.         ECanbRegs.CANGIM.bit.I0EN = 1; // 使能中断线0产生中断
  66.        
  67.         EDIS;

  68.         // 使能中断
  69.         IER |= M_INT9;

  70.         // 使能PIE中断
  71.         PieCtrlRegs.PIEIER9.bit.INTx7 = 1;
  72.         PieCtrlRegs.PIEACK.bit.ACK9   = 1;

  73.         EINT;
  74.         ERTM;

  75.          
  76.     Send();
  77.    
  78.     for(;;);
  79. }

  80. Uint16 Send(void)
  81. {
  82.         struct ECAN_REGS ECanbShadow;

  83.         ECanbShadow.CANTRS.all = 0;
  84.     ECanbShadow.CANTRS.bit.TRS25 = 1;
  85.     ECanbRegs.CANTRS.all = ECanbShadow.CANTRS.all;
  86.     do{
  87.             ECanbShadow.CANTA.all = ECanbRegs.CANTA.all;
  88.     }while((ECanbShadow.CANTA.bit.TA25 == 0));

  89.     ECanbShadow.CANTA.all = 0;
  90.     ECanbShadow.CANTA.bit.TA25 = 1;
  91.     ECanbRegs.CANTA.all = ECanbShadow.CANTA.all;

  92.         return 1;
  93. }

  94. interrupt void canb_receive_isr(void)
  95. {
  96.         struct ECAN_REGS ECanbShadow;
  97.         ECanbShadow.CANRMP.all = ECanbRegs.CANRMP.all;

  98.         while(ECanbShadow.CANRMP.bit.RMP5 != 1);
  99.         ECanbRegs.CANRMP.bit.RMP5 = 1; // 复位RMP,同时复位中断标志
  100.     ECanbRegs.CANRMP.all = ECanbShadow.CANRMP.all;

  101.         recData_L = ECanbMboxes.MBOX5.MDL.all;
  102.         recData_H = ECanbMboxes.MBOX5.MDH.all;
  103.    
  104.         PieCtrlRegs.PIEACK.bit.ACK9 = 1;

  105.         EINT;
  106. }

zhangmangui 发表于 2014-3-5 17:33 | 显示全部楼层
欢迎新朋友  看看这个资料能不能帮到你
https://bbs.21ic.com/icview-685760-1-1.html
 楼主| zyghero 发表于 2014-3-6 13:47 | 显示全部楼层
各位高手求解决啊!!!我用示波器查看了CAN的接收和发送引脚,发现是有数据的,但是程序里没有接收到。
zhangmangui 发表于 2014-3-6 21:39 | 显示全部楼层
28335的CAN使用熟悉的朋友  帮忙解决一下
kxyyaonixingfu 发表于 2014-4-24 16:28 | 显示全部楼层
我也遇到了这个问题~~~请问解决了吗?
zhangqingle 发表于 2014-5-27 11:08 | 显示全部楼层
和屏蔽没有关系,我也遇到过你的这种情况,把发送程序放到接收中断试试.
52kfb 发表于 2014-5-28 14:46 | 显示全部楼层
之前我也是没搞定这个。。

28335 CANB发送CANA接收,没问题。。。   但CANA发送CANB接收就有问题,,,

后来解决了,是配置问题,,,,
caowei0516 发表于 2014-6-4 16:01 | 显示全部楼层
我也遇到类似的问题,现在是只能发,接收进不了中断。请问你的问题解决了吗?@zyghero   
nap_inmortal 发表于 2016-12-14 15:12 | 显示全部楼层
我也是,进不了中断。。。
xxz0501 发表于 2017-4-17 11:03 | 显示全部楼层
楼主,问题解决了吗,我也遇到,求解
blessdxp 发表于 2017-6-5 17:43 | 显示全部楼层
楼主问题解决了没有,怎么解决的?
blessdxp 发表于 2017-6-5 21:53 | 显示全部楼层
52kfb 发表于 2014-5-28 14:46
之前我也是没搞定这个。。

28335 CANB发送CANA接收,没问题。。。   但CANA发送CANB接收就有问题,,,

你好,是那个地方的配置问题,a和b在配置上那个地方不同,希望大侠给予解答,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部