打印

LIN通讯问题

[复制链接]
2587|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pidcy|  楼主 | 2012-9-16 07:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有段程序不知道干嘛的,请大家指导下,LIN发送检测是怎么检测的,是把自己发送的数据收回来看看与发送的是否一样?还有LIN发送过程中是怎么把数据收回来的?

/*************************************************************/
/*                       发送检测函数                        */
/*************************************************************/
Bool LINCheckSend(enum lin_state status, unsigned char val)
{
  // 等待串口数据接收到为止  
  while(frame_send.state < status)
     if(frame_send.error)
     return(FALSE);
   
  switch(status)
  {
    case _BREAK:
    case SYNCH:
      break;
      
    case PROTECTED_IDENTIFIER:
      if(frame_send.protected_id != val)
        return(FALSE);
      break;
        
    case DATA0:
    case DATA1:
    case DATA2:
    case DATA3:
    case DATA4:
    case DATA5:
    case DATA6:
    case DATA7:
      if(frame_send.data[status-DATA0] != val)
        return(FALSE);
      break;
        
    case CHECKSUM:
      if(frame_send.check != val)
        return(FALSE);
      break;
  }
  return(TRUE);
}  

下面是发送信息函数
/*************************************************************/
/*                     LIN发送信息函数                       */
/*************************************************************/
Bool LINSendMsg(void)
{
  unsigned char check_sum, parity_id, i;
  
  frame_send.error = 0;
  
    // 发送间隔场
    if(!LINSendbreak())
      return(FALSE);
    // 检查间隔场发送
    if(!LINCheckSend(_BREAK,0x00))
      return(FALSE);      
    // 发送同步场
    if(!LINSendChar(0x55))
      return(FALSE);
    // 检查同步场发送
    if(!LINCheckSend(SYNCH,0x55))
      return(FALSE);
    // 计算奇偶校验
    parity_id=LINCalcParity(msg_send.identifier);
    // 发送标识符场
    if(!LINSendChar(parity_id))
      return(FALSE);
    // 检查标识符场发送
    if(!LINCheckSend(PROTECTED_IDENTIFIER, parity_id))
      return(FALSE);  
   
    for(i=0; i < 8; i++)
    {
      // 发送数据场
      if(!LINSendChar(msg_send.data))
        return(FALSE);
      // 检查数据场发送
      if(!LINCheckSend(DATA0+i, msg_send.data))
        return(FALSE);
    }
    check_sum = LINCalcChecksum(msg_send.data);
    // 发送校验和场
    if(!LINSendChar(check_sum))
      return(FALSE);
    // 检查校验和场发送
    if(!LINCheckSend(CHECKSUM, check_sum))
     return(FALSE);  
    frame_send.state = IDLE;
  return(TRUE);
}

相关帖子

沙发
qianxiaoluo001| | 2012-9-16 09:16 | 只看该作者
顶一下。。。

使用特权

评论回复
板凳
pidcy|  楼主 | 2012-9-21 10:39 | 只看该作者
没人知道啊,看来搞LIN的人很少

使用特权

评论回复
地板
pidcy|  楼主 | 2012-9-25 08:22 | 只看该作者
我问的问题,好像没人会啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

60

帖子

1

粉丝