有段程序不知道干嘛的,请大家指导下,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);
} |