查看: 1910|回复: 0

[其他] MSCAM收发问题

[复制链接]

该用户从未签到

5

主题

12

帖子

0

新手上路

Rank: 1

积分
33
最后登录
1970-1-1
发表于 2013-7-5 10:37:59 | 显示全部楼层 |阅读模式
如题,我用DP256的两个MSCAN做收发,可以实现单条报文的收发。进行多条收发的时候,出现问题。
初始化函数就不写了,收发函数如下:
Bool MSCAN1GetMsg(struct can_msg *msg)
{
 
  unsigned char sp2;
  // 检测接收标志
  if(!(CAN1RFLG_RXF))
    return(FALSE);
 
  // 检测 CAN协议报文模式 (一般/扩展) 标识符
  if(CAN1RXIDR1_IDE)
    // IDE = Recessive (Extended Mode)
    return(FALSE);
  // 读标识符
  msg->id = (unsigned int)(CAN1RXIDR05);
 
  if(CAN1RXIDR1&0x10)
    msg->RTR = TRUE;
  else
    msg->RTR = FALSE;
 
  // 读取数据长度
  msg->len = CAN1RXDLR;
 
  // 读取数据
  for(sp2 = 0; sp2 < msg->len; sp2++)
    msg->data[sp2] = *((&CAN1RXDSR0)+sp2);
  // 清 RXF 标志位 (缓冲器准备接收)
  CAN1RFLG = 0x01;
  return(TRUE);
}
 
 
Bool MSCAN0SendMsg(struct can_msg msg)
{
  unsigned char send_buf, sp;
 
  // 检查数据长度
  if(msg.len > 8)
    return(FALSE);
  // 检查总线时钟
  if(CAN0CTL0_SYNCH==0)
    return(FALSE);

  send_buf = 0;
  do
  {
    // 寻找空闲的缓冲器
    CAN0TBSEL=CAN0TFLG;
    send_buf=CAN0TBSEL;
  }
 
  while(!send_buf);
 
  // 写入标识符
  CAN0TXIDR0 = (unsigned char)(msg.id>>3);
  CAN0TXIDR1 = (unsigned char)(msg.id
我知道答案 目前已有0人回答
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 19:23 , Processed in 0.081515 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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