⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lin_driver08.c

📁 此程序为DP256的SPI实验程序,已经通过实验证明
💻 C
📖 第 1 页 / 共 4 页
字号:
#if LIN_NODE_SEL	== LIN_NODE_ML
					ML_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
					R_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
					Head_C_Response_Error	= 1;
#endif						
				}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)			
				Msg_18_Encode();
				//response error: send & clear
				LIN_Error_Status	&= ~LIN_ERR_IN_RESPONSE;
				
#if LIN_NODE_SEL	== LIN_NODE_SW_C
				SW_C_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
				SM_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
				FR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
				FL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
				DR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
				DL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
				MR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
				ML_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
				R_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
				Head_C_Response_Error	= 0;
#endif						
			}
			else 
#endif			
#if	LIN_MSG_19	== 	LIN_MSG_SEND				
#ifndef	CON_IF_EXIT
	#define CON_IF_EXIT		1
#else
			else 
#endif
			if(uMsgID == 0x19)
			{
				if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
				{
#if LIN_NODE_SEL	== LIN_NODE_SW_C
					SW_C_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
					SM_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
					FR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
					FL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
					DR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
					DL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
					MR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
					ML_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
					R_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
					Head_C_Response_Error	= 1;
#endif						
				}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)			
				Msg_19_Encode();
				//response error: send & clear
				LIN_Error_Status	&= ~LIN_ERR_IN_RESPONSE;
				
#if LIN_NODE_SEL	== LIN_NODE_SW_C
				SW_C_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
				SM_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
				FR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
				FL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
				DR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
				DL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
				MR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
				ML_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
				R_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
				Head_C_Response_Error	= 0;
#endif						
			}
#endif			
#if	LIN_MSG_1A	== 	LIN_MSG_SEND				
#ifndef	CON_IF_EXIT
	#define CON_IF_EXIT		1
#else
			else 
#endif
			if(uMsgID == 0x1a)
			{
				if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
				{
#if LIN_NODE_SEL	== LIN_NODE_SW_C
					SW_C_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
					SM_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
					FR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
					FL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
					DR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
					DL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
					MR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
					ML_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
					R_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
					Head_C_Response_Error	= 1;
#endif						
				}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)			
				Msg_1A_Encode();
				//response error: send & clear
				LIN_Error_Status	&= ~LIN_ERR_IN_RESPONSE;
				
#if LIN_NODE_SEL	== LIN_NODE_SW_C
				SW_C_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
				SM_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
				FR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
				FL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
				DR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
				DL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
				MR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
				ML_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
				R_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
				Head_C_Response_Error	= 0;
#endif						
			}
#endif			
#if	LIN_MSG_1B	== 	LIN_MSG_SEND				
#ifndef	CON_IF_EXIT
	#define CON_IF_EXIT		1
#else
			else 
#endif
			if(uMsgID == 0x1b)
			{
				if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
				{
#if LIN_NODE_SEL	== LIN_NODE_SW_C
					SW_C_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
					SM_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
					FR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
					FL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
					DR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
					DL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
					MR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
					ML_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
					R_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
					Head_C_Response_Error	= 1;
#endif						
				}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)			
				Msg_1B_Encode();
				//response error: send & clear
				LIN_Error_Status	&= ~LIN_ERR_IN_RESPONSE;
				
#if LIN_NODE_SEL	== LIN_NODE_SW_C
				SW_C_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
				SM_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
				FR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
				FL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
				DR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
				DL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
				MR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
				ML_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
				R_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
				Head_C_Response_Error	= 0;
#endif						
				
			}
#endif			
#if	LIN_MSG_1C	== 	LIN_MSG_SEND				
#ifndef	CON_IF_EXIT
	#define CON_IF_EXIT		1
#else
			else 
#endif
			if(uMsgID == 0x1c)
			{
				if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)
				{
#if LIN_NODE_SEL	== LIN_NODE_SW_C
					SW_C_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
					SM_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
					FR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
					FL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
					DR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
					DL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
					MR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
					ML_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
					R_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
					Head_C_Response_Error	= 1;
#endif						
				}//if((LIN_Error_Status & LIN_ERR_IN_RESPONSE) == LIN_ERR_IN_RESPONSE)			
				Msg_1C_Encode();
				//response error: send & clear
				LIN_Error_Status	&= ~LIN_ERR_IN_RESPONSE;
				
#if LIN_NODE_SEL	== LIN_NODE_SW_C
				SW_C_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
				SM_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
				FR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
				FL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
				DR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
				DL_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
				MR_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
				ML_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
				R_Response_Error	= 0;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
				Head_C_Response_Error	= 0;
#endif						
			}
#endif			

			LIN_TX_Buf[LIN_INDEX_ID]	= LIN_TmpByte;
			LIN_TX_Buf[LIN_INDEX_CHECKSUM]	= LIN_Calc_Tx_Checksum_EN(uMsgLen);
			
			LIN_SendData(LIN_TX_Buf[0]);
		}
		else if((uIndex & LIN_MSG_RECEIVE) == LIN_MSG_RECEIVE)
		{
			//We are this message's subscriber
			LIN_Transceiver_Status	= LIN_FLAG_REC_DATA;
			LIN_Rx_Counter			= 0;
		}
		else if(LIN_RX_Buf[LIN_INDEX_ID] == LIN_ID_GOTO_SLEEP)
		{
			// We always receive LIN_Goto_Sleep Command
			LIN_Transceiver_Status	= LIN_FLAG_REC_DATA;
			LIN_Rx_Counter			= 0;
		}
		else
		{
			//We don't know this ID, Ignore it
			LIN_Transceiver_Status	= LIN_FLAG_IGNORE;
		}		
	}//else if((LIN_Transceiver_Status	& LIN_FLAG_REC_HEADER) == LIN_FLAG_REC_HEADER)
	else if((LIN_Transceiver_Status & LIN_FLAG_SEND_DATA) == LIN_FLAG_SEND_DATA)
	{
	
		//uIndex	= LIN_TX_Buf[LIN_INDEX_ID];
		//Bug fixed: the index value should be lookuped from LIN_Msg_Index table;
		//Modified by wangjunpeng, on 26th, may, 2005
		//uIndex	= LIN_Msg_Index[LIN_TX_Buf[LIN_INDEX_ID] & 0x3f];
		//Modified by wangjunpeng, on 28th, may, 2005
		//bug fixed, LIN_rX_Buf[LIN_INDEX_ID] is not accessible, I don't know the reason!!!
		uIndex	= LIN_Msg_Index[LIN_RX_Buf[LIN_INDEX_ID] & 0x3f];

		uMsgLen	= LIN_MsgLen[uIndex & 0x3f];
#if LIN_DEBUG_MODE == 1	
	LIN_Debug_PIN_DATA		= ~LIN_Debug_PIN_DATA;
#endif

		if(LIN_TmpByte == LIN_TX_Buf[LIN_Tx_Counter])
		{//we successed transmit a byte, so se send another one data byte
			++LIN_Tx_Counter;

			if(LIN_Tx_Counter == uMsgLen)
			{//End of data transmit, send checksum byte

				LIN_SendData(LIN_TX_Buf[LIN_INDEX_CHECKSUM]);
#if LIN_DEBUG_MODE == 1	
	LIN_Debug_PIN_ID		= 0;
	LIN_Debug_PIN_DATA		= 0;
	LIN_Debug_PIN_CHECK		= 1;
	LIN_Debug_PIN_BREAK		= 0;
	LIN_Debug_PIN_SYNCH		= 0;
#endif
			}//if(LIN_Tx_Counter == uMsgLen)

			else if(LIN_Tx_Counter == (uMsgLen + 1))
			{			

				LIN_Error_Status	|= LIN_SUCCESS_TRANSFER;

				LIN_Err_TxCounter	<<= 1;			
				LIN_Err_TxCounter	&= 0xfe;
				//we finished transmitting all data byte and checksum, 
				//weill wait untill another break/synch senquence
				LIN_Transceiver_Status	= LIN_FLAG_IGNORE;
				
				//set idletime out here wait for next frame transfer
				//LIN_Set_Idle_Timeout
			}//if(LIN_Tx_Counter == (uMsgLen + 1))
			else//if(LIN_Tx_Counter == (uMsgLen + 1))
			{//transmision unfinihsed, continue sending data
				LIN_SendData(LIN_TX_Buf[LIN_Tx_Counter]);
			}//if(LIN_Tx_Counter == uMsgLen)
		}
		else
		{//transmit error, set flag
			LIN_Error_Status	|= LIN_ERR_IN_RESPONSE;	
					
			LIN_Err_TxCounter	<<= 1;			
			LIN_Err_TxCounter	|= 1;

			LIN_Transceiver_Status	= LIN_FLAG_IGNORE;
/*
#if LIN_NODE_SEL	== LIN_NODE_SW_C
			SW_C_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_SW_D
			SM_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FR
			FR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_FL
			FL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DR
			DR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_DL
			DL_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_MR
			MR_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_ML
			ML_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_RR
			R_Response_Error	= 1;
#endif						
#if LIN_NODE_SEL	== LIN_NODE_CH
			Head_C_Response_Error	= 1;
#endif						
*/		}
				
	}
	else if((LIN_Transceiver_Status & LIN_FLAG_REC_DATA) == LIN_FLAG_REC_DATA)
	{
		//First, save recevied data in the LIN_RX_Buf
		LIN_RX_Buf[LIN_Rx_Counter++]	= LIN_TmpByte;
		
		//Bug fixed: the index value should be lookuped from LIN_Msg_Index table;
		//Modified by wangjunpeng, on 28th, may, 2005
		//uIndex	= LIN_Msg_Index[LIN_TX_Buf[LIN_INDEX_ID] & 0x3f];
		//bug fixed, LIN_rX_Buf[LIN_INDEX_ID] is not accessible, I don't know the reason!!!
		uIndex	= LIN_Msg_Index[LIN_RX_Buf[LIN_INDEX_ID] & 0x3f];
		uMsgLen	= LIN_MsgLen[uIndex & 0x3f];

		//Second, check if we have received all data of this message
		if((LIN_RX_Buf[LIN_INDEX_ID] == LIN_ID_GOTO_SLEEP) && (LIN_TmpByte == 0))
		{
			LIN_Node_Status			= LIN_FLAG_SLEEP;
			LIN_Transceiver_Status	= LIN_FLAG_IGNORE;
			//LIN_SCIRIE			= 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -