📄 commswitch.c
字号:
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 + -