测试LIN通讯,偶发出现报文发送中断的情况,代码是Demo例程集成的
-
static void Lin_CallbackHandler(uint32_t instance, lin_state_t *lin_State)
{
(void)instance;switch (lin_State->currentEventId) { case LIN_PID_OK: /* Set frame header timeout */ LIN_DRV_SetTimeoutCounter(INST_LIN, TIMEOUT); /* If PID is FRAME_MASTER_RECEIVE_DATA, master node will receive data */ if (FRAME_MASTER_RECEIVE_DATA == lin_State->currentId) { LIN_DRV_SendFrameData(INST_LIN, txBuff, sizeof(txBuff)); /* Call to Send Frame DATA Function */ } /* If PID is FRAME_SLAVE_RECEIVE_DATA, salve node will receive data from master node */ else if (FRAME_SLAVE_RECEIVE_DATA == lin_State->currentId) { LIN_DRV_ReceiveFrameData(INST_LIN, rxBuff, sizeof(rxBuff)); } else if (FRAME_Dcm_Response_DATA == lin_State->currentId) { if(txDcmFlag == Dcm_Req||txDcmFlag == Dcm_Busy) { LIN_DRV_SendFrameData(INST_LIN, txDcmBuff, sizeof(txBuff)); txDcmFlag = Dcm_Busy; } else { /* Go to idle mode */ LIN_DRV_GotoIdleState(INST_LIN); } /* Call to Send Frame DATA Function */ } /* If PID is FRAME_SLAVE_RECEIVE_DATA, salve node will receive data from master node */ else if (FRAME_Dcm_Request_DATA == lin_State->currentId) { LIN_DRV_ReceiveFrameData(INST_LIN, rxDcmBuff, sizeof(rxBuff)); rxDcmFlag = Dcm_Req; } /* If PID is FRAME_GO_TO_SLEEP, salve node will go to sleep mode */ else if (FRAME_GO_TO_SLEEP == lin_State->currentId) { sleepSignalFlag = true; LIN_DRV_ReceiveFrameData(INST_LIN, rxBuff, sizeof(rxBuff)); } else { /* Go to idle mode */ LIN_DRV_GotoIdleState(INST_LIN); } break; case LIN_PID_ERROR: /* Go to idle mode */ LIN_DRV_GotoIdleState(INST_LIN); break; case LIN_TX_COMPLETED: if (FRAME_Dcm_Response_DATA == lin_State->currentId) { if( Dcm_Busy == txDcmFlag) { txDcmFlag = Dcm_Finished; ISO15765_TransmitConfirm(); } } else { txCompFlag = true; } /* Go to idle mode */ LIN_DRV_GotoIdleState(INST_LIN); break; case LIN_RX_COMPLETED: if (FRAME_Dcm_Request_DATA == lin_State->currentId) { rxDcmFlag = Dcm_Busy; } else { rxCompFlag = true; } /* Go to idle mode */ LIN_DRV_GotoIdleState(INST_LIN); break; case LIN_CHECKSUM_ERROR: case LIN_READBACK_ERROR: case LIN_FRAME_ERROR: case LIN_RECV_BREAK_FIELD_OK: /* Set response timeout */ LIN_DRV_SetTimeoutCounter(INST_LIN, TIMEOUT); break; case LIN_WAKEUP_SIGNAL: /* Set wakeup signal flag */ wakeupSignalFlag = true; break; case LIN_SYNC_ERROR: case LIN_BAUDRATE_ADJUSTED: case LIN_NO_EVENT: case LIN_SYNC_OK: default: /* do nothing */ break; }
}
跑了16个小时左右,出现了7次响应服务错误。
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...