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

📄 commswitch.c

📁 此程序为DP256的SPI实验程序,已经通过实验证明
💻 C
📖 第 1 页 / 共 4 页
字号:
		if(LIN_CheckTimeOut(CmbSwt_tiTurnLeft, LIN_GetCurrentTime(), CmbSwt_tiTurnLeftDebounce_C))
		{
			if((CmbSwt_stTurnLeftErr & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)
			{
				CmbSwt_nTurnLeftErrCntr++;
				if(CmbSwt_nTurnLeftErrCntr == CMBSWT_ERR_MAX)
				{
					//Switch status Restored to OK 
					//1. Remember the correct status 
					CmbSwt_stTurnLeft	= CmbSwt_stTurnLeft_mp0;
					
					//2. Clear Error Status
					CmbSwt_stTurnLeftErr &= ~CMBSWT_STATE_ERR;
					
					//3. Reset Err Counter
					CmbSwt_nTurnLeftErrCntr	= 0;
					
					//4. Clear Debounce Flag
					CmbSwt_stTurnLeftErr &= ~CMBSWT_STATE_DEBOUNCE;
				}
				else
				{
					// Start next Debounce process
					//1. Set Debounce Timer
					CmbSwt_tiTurnLeft	= LIN_GetCurrentTime();
					
					//2. Don't change current status
				}//if(CmbSwt_nBrush1ErrCntr == CMBSWT_ERR_MAX)
			}
			else
			{
				//1. Remember the correct status 
				CmbSwt_stTurnLeft	= CmbSwt_stTurnLeft_mp0;
					
				//2. Reset Err Counter
				CmbSwt_nTurnLeftErrCntr	= 0;
					
				//3. Clear Debounce Flag
				CmbSwt_stTurnLeftErr &= ~CMBSWT_STATE_DEBOUNCE;
			}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)				
		}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stTurnRightErr & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	{
		if(LIN_CheckTimeOut(CmbSwt_tiTurnRight, LIN_GetCurrentTime(), CmbSwt_tiTurnRightDebounce_C))
		{
			if((CmbSwt_stTurnRightErr & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)
			{
				CmbSwt_nTurnRightErrCntr++;
				if(CmbSwt_nTurnRightErrCntr == CMBSWT_ERR_MAX)
				{
					//Switch status Restored to OK 
					//1. Remember the correct status 
					CmbSwt_stTurnRight	= CmbSwt_stTurnRight_mp0;
					
					//2. Clear Error Status
					CmbSwt_stTurnRightErr &= ~CMBSWT_STATE_ERR;
					
					//3. Reset Err Counter
					CmbSwt_nTurnRightErrCntr	= 0;
					
					//4. Clear Debounce Flag
					CmbSwt_stTurnRightErr &= ~CMBSWT_STATE_DEBOUNCE;
				}
				else
				{
					// Start next Debounce process
					//1. Set Debounce Timer
					CmbSwt_tiTurnRight	= LIN_GetCurrentTime();
					
					//2. Don't change current status
				}//if(CmbSwt_nBrush1ErrCntr == CMBSWT_ERR_MAX)
			}
			else
			{
				//1. Remember the correct status 
				CmbSwt_stTurnRight	= CmbSwt_stTurnRight_mp0;
					
				//2. Reset Err Counter
				CmbSwt_nTurnRightErrCntr	= 0;
					
				//3. Clear Debounce Flag
				CmbSwt_stTurnRightErr &= ~CMBSWT_STATE_DEBOUNCE;
			}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)				
		}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stLamp1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	{
		if(LIN_CheckTimeOut(CmbSwt_tiLamp1, LIN_GetCurrentTime(), CmbSwt_tiLamp1Debounce_C))
		{
			if((CmbSwt_stLamp1Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)
			{
				CmbSwt_nLamp1ErrCntr++;
				if(CmbSwt_nLamp1ErrCntr == CMBSWT_ERR_MAX)
				{
					//Switch status Restored to OK 
					//1. Remember the correct status 
					CmbSwt_stLamp1	= CmbSwt_stLamp1_mp0;
					
					//2. Clear Error Status
					CmbSwt_stLamp1Err &= ~CMBSWT_STATE_ERR;
					
					//3. Reset Err Counter
					CmbSwt_nLamp1ErrCntr	= 0;
					
					//4. Clear Debounce Flag
					CmbSwt_stLamp1Err &= ~CMBSWT_STATE_DEBOUNCE;
				}
				else
				{
					// Start next Debounce process
					//1. Set Debounce Timer
					CmbSwt_tiLamp1	= LIN_GetCurrentTime();
					
					//2. Don't change current status
				}//if(CmbSwt_nBrush1ErrCntr == CMBSWT_ERR_MAX)
			}
			else
			{
				//1. Remember the correct status 
				CmbSwt_stLamp1	= CmbSwt_stLamp1_mp0;
					
				//2. Reset Err Counter
				CmbSwt_nLamp1ErrCntr	= 0;
					
				//3. Clear Debounce Flag
				CmbSwt_stLamp1Err &= ~CMBSWT_STATE_DEBOUNCE;
			}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)				
		}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stLamp2Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	{
		if(LIN_CheckTimeOut(CmbSwt_tiLamp2, LIN_GetCurrentTime(), CmbSwt_tiLamp2Debounce_C))
		{
			if((CmbSwt_stLamp2Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)
			{
				CmbSwt_nLamp2ErrCntr++;
				if(CmbSwt_nLamp2ErrCntr == CMBSWT_ERR_MAX)
				{
					//Switch status Restored to OK 
					//1. Remember the correct status 
					CmbSwt_stLamp2	= CmbSwt_stLamp2_mp0;
					
					//2. Clear Error Status
					CmbSwt_stLamp2Err &= ~CMBSWT_STATE_ERR;
					
					//3. Reset Err Counter
					CmbSwt_nLamp2ErrCntr	= 0;
					
					//4. Clear Debounce Flag
					CmbSwt_stLamp2Err &= ~CMBSWT_STATE_DEBOUNCE;
				}
				else
				{
					// Start next Debounce process
					//1. Set Debounce Timer
					CmbSwt_tiLamp2	= LIN_GetCurrentTime();
					
					//2. Don't change current status
				}//if(CmbSwt_nBrush1ErrCntr == CMBSWT_ERR_MAX)
			}
			else
			{
				//1. Remember the correct status 
				CmbSwt_stLamp2	= CmbSwt_stLamp2_mp0;
					
				//2. Reset Err Counter
				CmbSwt_nLamp2ErrCntr	= 0;
					
				//3. Clear Debounce Flag
				CmbSwt_stLamp2Err &= ~CMBSWT_STATE_DEBOUNCE;
			}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)				
		}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------
	if((CmbSwt_stLamp3Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	{
		if(LIN_CheckTimeOut(CmbSwt_tiLamp3, LIN_GetCurrentTime(), CmbSwt_tiLamp3Debounce_C))
		{
			if((CmbSwt_stLamp3Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)
			{
				CmbSwt_nLamp3ErrCntr++;
				if(CmbSwt_nLamp3ErrCntr == CMBSWT_ERR_MAX)
				{
					//Switch status Restored to OK 
					//1. Remember the correct status 
					CmbSwt_stLamp3	= CmbSwt_stLamp3_mp0;
					
					//2. Clear Error Status
					CmbSwt_stLamp3Err &= ~CMBSWT_STATE_ERR;
					
					//3. Reset Err Counter
					CmbSwt_nLamp3ErrCntr	= 0;
					
					//4. Clear Debounce Flag
					CmbSwt_stLamp3Err &= ~CMBSWT_STATE_DEBOUNCE;
				}
				else
				{
					// Start next Debounce process
					//1. Set Debounce Timer
					CmbSwt_tiLamp3	= LIN_GetCurrentTime();
					
					//2. Don't change current status
				}//if(CmbSwt_nBrush1ErrCntr == CMBSWT_ERR_MAX)
			}
			else
			{
				//1. Remember the correct status 
				CmbSwt_stLamp3	= CmbSwt_stLamp3_mp0;
					
				//2. Reset Err Counter
				CmbSwt_nLamp3ErrCntr	= 0;
					
				//3. Clear Debounce Flag
				CmbSwt_stLamp3Err &= ~CMBSWT_STATE_DEBOUNCE;
			}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_ERR) == CMBSWT_STATE_ERR)				
		}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

}

void Convert2Signals(void)
{
	
	if((CmbSwt_stBrush1Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		CMD_Wash	= CmbSwt_stBrush1;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stBrush2Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		if(CmbSwt_stBrush2 == 1) CMD_Brush	= BRUSH_CMD_INT;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stBrush3Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		if(CmbSwt_stBrush3 == 1) CMD_Brush	= BRUSH_CMD_LOW;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stBrush4Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		if(CmbSwt_stBrush4 == 1) CMD_Brush	= BRUSH_CMD_HIGH;
		else if((CmbSwt_stBrush1 & CmbSwt_stBrush2 & CmbSwt_stBrush3) == 0) CMD_Brush	= BRUSH_CMD_STOP;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	
	
			
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stTurnLeftErr & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		SW_TurnLeft		= CmbSwt_stTurnLeft;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stTurnRightErr & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		SW_TurnRight	= CmbSwt_stTurnRight;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stLamp1Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		CMD_Headlight		= CmbSwt_stLamp1;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)	
		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stLamp2Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		CMD_DippedHeadlight	= CmbSwt_stLamp2;
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)	
		
//----------------------------------------------------------------------------------------------------
	if((CmbSwt_stLamp3Err & CMBSWT_STATE_OK) == CMBSWT_STATE_OK)
	{
		CMD_LittleLamp		= CmbSwt_stLamp3;
	}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
//----------------------------------------------------------------------------------------------------
	
	if(CMD_LittleLamp == 0)
	{
		if((CMD_Headlight == 1) || (CMD_DippedHeadlight == 1) ||(CMD_FrontLamp == 1) || (CMD_RearLamp == 1))
		{
			CMD_LittleLamp	= 1;
		}
	}
}

void LIN_Signals_Error(void)
{
	CMD_Headlight		= 2;
	CMD_DippedHeadlight	= 2;
	CMD_LittleLamp		= 2;
	
	CMD_Wash			= 2;
	
	CMD_Brush			= BRUSH_CMD_ERROR;
	
	SW_TurnLeft			= 2;
	SW_TurnRight		= 2;
}

L_U8 Select_MC33993(L_U8 uSel)
{
	L_U8 uRet	= 0;
	if(uSel < 2)
	{
		MC33993_CS	= uSel;
		uRet	= 1;
	}

	return uRet;
	
}

/************************************
*Function Name: MC33993_Pool
*Parameter: 	NONE
*Orignator: 	Wang junpeng
*Date:			11th, July, 2005
*Discription:	Get MC33993 input through pool mode
*Return Value: 	MC33993_COMM_ERR, communication didn't finsihed within 100ms
				MC33993_COMM_OK, communication finihsed
**************************************/
L_BOOL	MC33993_Pool(void)
{
	//sequence: cmd -> Data high byte -> Data low byte
	L_U16	wTime;
	L_U8 i;
	
	//1. select mc33993
	//2. set SPI communication data
	//3. set SPI timeout 
	//4. wait untill SPI communication complete or SPI communication timeout 
	//5. deselect mc33993
	//6. return SPI communication result: 1
	Select_MC33993(MC33993_SEL);
//	SPI_Tx_Buf[MC33993_DATA_LOW]	= 0xff;
//	SPI_Tx_Buf[MC33993_DATA_HIGH]	= 0xff;
//	SPI_Tx_Buf[MC33993_CMD_INDEX]	= MC33993_CMD_TEST;
	
	i	= 0;
	SPDR	= 	SPI_Tx_Buf[i];
	wTime	= LIN_GetCurrentTime();
	while(!LIN_CheckTimeOut(wTime, LIN_GetCurrentTime(), 4))
	{
		SPI_State	= SPSCR;
		if((SPI_State & SPI_SPRF) == SPI_SPRF)
		{
			SPI_Rx_Buf[i]	= SPDR;
			if(i == 2) 
			{
				Select_MC33993(MC33993_DESEL);				

				return MC33993_COMM_OK;
			}
			
			i++;
			SPDR	= 	SPI_Tx_Buf[i];
		}		
	}	
	Select_MC33993(MC33993_DESEL);
	
	return MC33993_COMM_ERR;
}

void MC33993_Debounce(void)
{
	if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	{
		if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
		{
			//1. Remember the correct status 
			CmbSwt_stBrush1	= CmbSwt_stBrush1_mp0;
					
			//2. Reset Err Counter
			CmbSwt_nBrush1ErrCntr	= 0;
					
			//3. Clear Debounce Flag
			CmbSwt_stBrush1Err &= ~CMBSWT_STATE_DEBOUNCE;
			
			//4. set switch state ok flag
			CmbSwt_stBrush1Err	|= CMBSWT_STATE_OK;
		}//if(LIN_CheckTimeOut(CmbSwt_tiBrush1, LIN_GetCurrentTime(), CmbSwt_tiBrush1Debounce_C))
	}//if((CmbSwt_stBrush1Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)		
//----------------------------------------------------------------------------------------------------

	if((CmbSwt_stBrush2Err & CMBSWT_STATE_DEBOUNCE) == CMBSWT_STATE_DEBOUNCE)
	{
		if(LIN_CheckTimeOut(CmbSwt_tiBrush2, LIN_GetCurrentTime(), CmbSwt_tiBrush2Debounce_C))
		{
			//1. Remember the correct status 
			CmbSwt_stBrush2	= CmbSwt_stBrush2_mp0;
					
			//2. Reset Err Counter
			CmbSwt_nBrush2ErrCntr	= 0;
					
			//3. Clear Debounce Flag
			CmbSwt_stBrush2Err &= ~CMBSWT_STATE_DEBOUNCE;

⌨️ 快捷键说明

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