查看: 9572|回复: 12

[其他] XEP100用PE生成的CAN通讯收不到数据

[复制链接]

该用户从未签到

1

主题

27

帖子

0

新手上路

Rank: 1

积分
10
最后登录
1970-1-1
发表于 2012-7-10 20:03:42 | 显示全部楼层 |阅读模式
跟一位与非工程师的问题相同,在实际发送的时候出现发送缓冲器溢出错误ERR_TXFULL,程序跳出
if ((CAN0TFLG & 0x07U) == 0U) { /* Are all transmit buffers full? */
ExitCritical(); /* Enable global interrupts */
return ERR_TXFULL; /* If yes then error */
}
 
发送中断程序位于event.c文件,求大神指导!!谢谢!!
byte SendData[8]={0,1,2,3,4,5,6,7};
 byte Result=0;
 byte St=1;
void TI1_OnInterrupt(void)
{
  /* Write your code here ... */
  Result=CAN1_SendFrameExt(0x18FFDE3D,DATA_FRAME,8,SendData);
  //PTP_PTP0=~PTP_PTP0;
  St=~St;
  if(St==1)
    {
     Bits1_SetBit(0);
    }
  else
    {
       Bits1_ClrBit(0);
    }
}
我知道答案 目前已有12人回答

CAN.rar

675.43 KB, 下载次数: 31, 下载积分: 威望 1

回复

使用道具 举报

该用户从未签到

1

主题

27

帖子

0

新手上路

Rank: 1

积分
10
最后登录
1970-1-1
 楼主| 发表于 2012-7-10 20:08:07 | 显示全部楼层

回复:XEP100用PE生成的CAN通讯收不到数据


通宵等!!
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

27

帖子

0

新手上路

Rank: 1

积分
10
最后登录
1970-1-1
 楼主| 发表于 2012-7-11 15:44:26 | 显示全部楼层

回复:XEP100用PE生成的CAN通讯收不到数据

不知道怎么设置buffer溢出中断,求安版主解答
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-7-11 16:04:53 | 显示全部楼层

    RE:XEP100用PE生成的CAN通讯收不到数据

    你这里用的是CAN0,怎么定义的时候全写的是CAN1啊。
    方正ISR(CAN1_InterruptTx)
    看看这里是不是把数据和ID发送出去了,是不是能够正确进入这个函数。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    27

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2012-7-11 17:50:52 | 显示全部楼层

    回复:XEP100用PE生成的CAN通讯收不到数据

    回复第 4 楼 于2012-07-11 16:04:53发表:
    你这里用的是CAN0,怎么定义的时候全写的是CAN1啊。
    方正ISR(CAN1_InterruptTx)
    看看这里是不是把数据和ID发送出去了,是不是能够正确进入这个函数。 

    安版主,这个CAN0和CAN1其实也是对应的,好吧,我马上改~~这个是处理器专家的发送程序,程序出现发送缓冲器溢出错误ERR_TXFULL错误就跳出了。不知道怎么设置发送缓冲器附件是我的最新程序,发送程序位于event.c文件byte CAN1_SendFrame(byte BufferNum,dword MessageID,byte FrameType,byte Length,byte *Data){  byte i;                              /* Temorary variables */  byte bufmask=((word)1  CAN_STANDARD_FRAME_MAX_ID)) { /* Is the standard ID greater that 2047? */    return ERR_VALUE;                  /* If yes then error */  }  if (((MessageID & CAN_EXTENDED_FRAME_ID) == CAN_EXTENDED_FRAME_ID) && (MessageID & CAN_EXTENDED_FRAME_MASK)) { /* Is the extended ID greater that 536870911? */    return ERR_VALUE;                  /* If yes then error */  }  if ((BufferNum > (CAN_TX_MBUFFERS - 1)) || (Length > CAN_MAX_DATA_LEN)) { /* Is BufferNum greater than CAN_MAXBUFF or Length greater than CAN_MAX_DATA_LEN? */    return ERR_VALUE;                  /* If yes then error */  }  if (FrameType > REMOTE_FRAME) {      /* Is FrameType other than REMOTE_FRAME or DATA_FRAME */    return ERR_VALUE;                  /* If yes then error */  }  if (!(CAN0TFLG & bufmask)) {         /* Is the transmit buffer full? */    return ERR_TXFULL;                 /* If yes then error */  }  CAN0TBSEL = bufmask;                 /* Select requested transmit buffer */  MsgBuff = (TMsgBuff *)&CAN0TXIDR0;  if (MessageID & CAN_EXTENDED_FRAME_ID) {    tmpId = (((MessageID & 0x1FFC0000UL) IDR2 = ((DwordSwap *)&tmpId)->b.b2;  MsgBuff->IDR1 = ((DwordSwap *)&tmpId)->b.b1;  MsgBuff->IDR0 = ((DwordSwap *)&tmpId)->b.b0;  if (FrameType == DATA_FRAME) {       /* Is it a data frame? */    for (i=0; iData = Data;      /* Store data to the transmit register */    }    if (MessageID & CAN_EXTENDED_FRAME_ID) { /* Is it the extended frame? */      MsgBuff->IDR3 &= 254;            /* If no then set message type as "data frame" */    }    else {      MsgBuff->IDR1 &= 239;            /* If yes then set message type as "data frame" */    }  }  else {                               /* Remote frame */    if (MessageID & CAN_EXTENDED_FRAME_ID) { /* Is it the extended frame? */      MsgBuff->IDR3 |= 1;              /* If yes then set message type as "remote frame" */    }    else {      MsgBuff->IDR1 |= 16;             /* If yes then set message type as "remote frame" */    }  }  MsgBuff->DLR = Length;               /* Set the length of the message */  MsgBuff->TBPR = 0;                   /* Set the priority (high) */  CAN0TFLG = bufmask;                  /* Start transmission */  return ERR_OK;                       /* OK */}

    CAN12.rar

    567.83 KB, 下载次数: 42, 下载积分: 威望 1

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-7-12 09:56:38 | 显示全部楼层

    RE:XEP100用PE生成的CAN通讯收不到数据

    if (!(CAN0TFLG & bufmask)) {         /* Is the transmit
    buffer full? */
        return ERR_TXFULL;                 /* If yes then error */
      }
    这里说明当前buffer被占用了,所以没有继续发送,你换个buffer试试。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    27

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2012-7-12 16:21:10 | 显示全部楼层

    回复:XEP100用PE生成的CAN通讯收不到数据

    回复第 6 楼 于2012-07-12 09:56:38发表:
    if (!(CAN0TFLG & bufmask)) { /* Is the transmit
    buffer full? */
    return ERR_TXFULL; /* If yes then error */
    }
    这里说明当前buffer被占用了,所以没有继续发送,你换个buffer试试。
     
    分别测试了三个发送缓冲器,发送一帧数据到发送缓冲器之后就不能再发送了,缓冲器溢出。是不是需要把缓冲器的数据拿出来?这样就等于把它清空了?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-7-13 09:20:36 | 显示全部楼层

    RE:XEP100用PE生成的CAN通讯收不到数据

    你没有连接CAN收发器吗?必须要发出去或者重启模块才能清空缓冲区。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    27

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    1970-1-1
     楼主| 发表于 2012-7-14 03:09:08 | 显示全部楼层

    回复:XEP100用PE生成的CAN通讯收不到数据

    回复第 8 楼 于2012-07-13 09:20:36发表:
    你没有连接CAN收发器吗?必须要发出去或者重启模块才能清空缓冲区。 

    谢谢安版主,找到问题原因了,是CANH CANL两端的120Ω的电阻问题,CAN接收器本身有一个120Ω电阻,而我的开发板也有,这导致最终接收不到数据。已解决
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-7-14 11:13:37 | 显示全部楼层

    RE:XEP100用PE生成的CAN通讯收不到数据

    CAN两端连接120欧姆的电阻是正确的。正常的CAN总线在两端都有120欧姆的电阻,如果是120欧姆电阻引起的,还是要看看你CAN电路那是不是有问题。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 06:43 , Processed in 0.104577 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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