TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280039C: CAN(非MCAN)接收数据区分邮箱问题

Part Number:TMS320F280039C

使用两个CAN邮箱做接收,采用20ms轮询的方式做接收解析,遇到CAN_NDAT_21寄存器问题

下面是我的CAN邮箱配置:

CAN_setupMessageObject(CANA_BASE, 1, 0x15555555, CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_TX, 0, CAN_MSG_OBJ_NO_FLAGS, 8);

//accept if ((incomeID & IdMsk) == (objID & IdMsk)) : 0x045XF1XX
CAN_setupMessageObject(CANA_BASE, 2, 0x0450F100,
CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_RX, 0x11101100,
CAN_MSG_OBJ_USE_ID_FILTER, 8);

//accept 0x049XF1XX
CAN_setupMessageObject(CANA_BASE, 3, 0x0490F100,
CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_RX, 0x11101100,
CAN_MSG_OBJ_USE_ID_FILTER, 8);

这里是我的轮询的接收函数:

void t20ms_Task(void)

{

  if((CanaRegs.CAN_NDAT_21 == 2)&&(((CanaRegs.CAN_IF2CMD.all) & CAN_IF2CMD_BUSY) != CAN_IF2CMD_BUSY))
  {
      CAN_readMessageWithID(CANA_BASE, 2, &CanRxData.FrameType, &CanRxData.DCCanId, CanRxData.CanData.data);

      //Parse CAN data

  }

第一个问题:请问CAN_NDAT_21的作用是什么?

第二个问题:只配置邮箱2时,20ms的任务是可以进行CAN数据接收解析的,但是如果配置了邮箱2、3,就无法正常工作

期待社区大佬解惑!

klare G:

根据实验修改了邮箱配置:

CAN_setupMessageObject(CANA_BASE, 2, 0x0450F100,                                             CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_RX, 0xFFF0FF00,                                             CAN_MSG_OBJ_USE_ID_FILTER | CAN_MSG_OBJ_USE_EXT_FILTER | CAN_MSG_OBJ_USE_DIR_FILTER, 8);

测试总结出CAN_NDAT_21寄存器里边每一位代表一个邮箱数据更新,使用CAN_readMessageWithID函数读取对应邮箱后寄存器内相应的位会被清零

第二个问题会出现是因为我的MASK设置错误导致

综上,所有问题已解决,如果我的上诉理解有问题,请更正我

,

klare G:

有其他的轮询方式接收的指导,也请告知我

,

Yale Li:

你的理解是正确的

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280039C: CAN(非MCAN)接收数据区分邮箱问题
分享到: 更多 (0)