📄 spi.c
字号:
#define SPI_GLOBALS
#include "LIN_Header.h"
/************************************
*Function Name: SPI_SetMode
*Parameter: nMode, 0 - Slave Mode; 1 - Master Mode
*Orignator: Wang junpeng
*Date: 1st, June, 2005
*Discription: Config SPI Mode as nMode
*
**************************************/
/*
SPI has 2 work modes, Master Mode and Slave Mode
Before set SPI Mode we should check the SPI Enable bit
*/
void SPI_SetMode(unsigned char nMode)
{
if(SPCR_SPE == 1) return;
if(nMode == SPI_MODE_SLAVE)
{
SPCR_SPMSTR = 0;
}
else if(nMode == SPI_MODE_MASTER)
{
SPCR_SPMSTR = 1;
}
}
/************************************
*Function Name: SPI_Init
*Parameter: None
*Orignator: Wang junpeng
*Date: 2nd, June, 2005
*Discription: Initialize SPI
*
**************************************/
void SPI_Init(void)
{
#if SPI_DEBUG_MODE == 1
TEST_PIN_MASK_G1 |= MASK_VAL_G1;
TEST_PIN_MASK_G2 |= MASK_VAL_G2;
TEST_PIN_SG0 = 0;
TEST_PIN_SG1 = 0;
TEST_PIN_SG2 = 0;
TEST_PIN_SG3 = 0;
TEST_PIN_SG4 = 0;
TEST_PIN_SG5 = 0;
TEST_PIN_SG6 = 0;
TEST_PIN_SG7 = 0;
TEST_PIN_SG8 = 0;
TEST_PIN_SG9 = 0;
TEST_PIN_SG10 = 0;
#endif
MC33993_CS_MASK = 1;
MC33993_CS = MC33993_DESEL;
// SPIBuf.mTXData = &SPI_Tx_Buf[0];
// SPIBuf.mRXData = &SPI_Rx_Buf[0];
SPIBuf.mDataLength = 0;
SPIBuf.mState = SPI_XMT_IDLE;
SPIBuf.mRxCounter = 0;
SPIBuf.mTxCounter = 0;
SPIBuf.mTimer = SPI_TIMER_UNUSED;
SPCR_SPE = 0;
SPSCR_SPR = SPI_CLK_DIVIDOR;
// SPSCR_MODFEN = 1;
SPI_SetMode(SPI_MODE_MASTER);
SPCR_SPRIE = 0;
SPCR_SPTIE = 0;
SPSCR_ERRIE = 0;
}
/************************************
*Function Name: SPI_Enable
*Parameter: En, 0 - Disable; 1 - Enable
*Orignator: Wang junpeng
*Date: 2nd, June, 2005
*Discription: Enable SPI Function
*
**************************************/
L_BOOL SPI_Enable(L_U8 En, L_U8 bInt)
{
L_BOOL bRet = 0;
if(En < 2)
{
Select_MC33993(MC33993_DESEL);
SPCR_SPE = En;
bRet = 1;
SPI_State = SPSCR;
SPI_State = SPDR;
if(bInt < 2)
{
SPCR_SPRIE = bInt;
SPSCR_ERRIE = bInt;
}
//if(En == 0)
//we ready for work, but have not start to communicate
//select mc33993 when start to communicate
//deselect mc33993 when communication completed.
// else MC33993_CS = 0;
}
return bRet;
}
/************************************
*Function Name: SPI_Start
*Parameter: nDataLength
*Orignator: Wang junpeng
*Date: 2nd, June, 2005
*Discription: Start SPI Transmission
*
**************************************/
void SPI_Start(unsigned char nDataLength)
{
if(nDataLength <= SPI_MAX_DATA_LEN)
{
//MC33993_CS = MC33993_SEL;
SPIBuf.mDataLength = nDataLength;
SPIBuf.mState = (SPI_TX_REQ | SPI_RX_REQ);
SPIBuf.mRxCounter = 0;
SPIBuf.mTxCounter = 1;
SPIBuf.mTimer = LIN_GetCurrentTime();
Select_MC33993(MC33993_SEL);
SPDR = SPI_Tx_Buf[0];
SPCR_SPTIE = 1;
}
}
/************************************
*Function Name: SPI_RxIndicator
*Parameter: None
*Orignator: Wang junpeng
*Date: 2nd, June, 2005
*Discription: All SPI Data received Indication
*
**************************************/
void SPI_RxIndicator(void)
{
//Add user code bellow
//GetSwitch Status
//Start Status Changed Switch Delay Timer
//Enable New Switch Status changed interrupts
//MC33993_CS = ;
Select_MC33993(MC33993_DESEL);
// if(MC33993_stInitialized < MC33993_INIT_OK)
// {
// MC33993_stInitialized++;
// return;
// }
// if(SPI_Tx_Buf[MC33993_CMD_INDEX] == MC33993_CMD_TEST)
// {
SPIBuf.mTimer = SPI_TIMER_UNUSED;
MC33993_Data_Received();
MC33993_Debounce();
Convert2Signals();
// }
SPIBuf.mTimer = SPI_TIMER_UNUSED;
SPIBuf.mState = SPI_XMT_IDLE;
TEST_PIN_SG1 = 0;
// KeyBoard_INT_Enable();
}
#if SPI_DEBUG_MODE == 1
void SPI_Debug(void)
{
#if MC33993_SG0_EN == 1
if(MC33993_stSG0_mp0 < 2) TEST_PIN_SG0 = MC33993_stSG0_mp0;
#endif
#if MC33993_SG1_EN == 1
if(MC33993_stSG1_mp0 < 2) TEST_PIN_SG1 = MC33993_stSG1_mp0;
#endif
#if MC33993_SG2_EN == 1
if(MC33993_stSG2_mp0 < 2) TEST_PIN_SG2 = MC33993_stSG2_mp0;
#endif
#if MC33993_SG3_EN == 1
if(MC33993_stSG3_mp0 < 2) TEST_PIN_SG3 = MC33993_stSG3_mp0;
#endif
#if MC33993_SG4_EN == 1
if(MC33993_stSG4_mp0 < 2) TEST_PIN_SG4 = MC33993_stSG4_mp0;
#endif
#if MC33993_SG5_EN == 1
if(MC33993_stSG5_mp0 < 2) TEST_PIN_SG5 = MC33993_stSG5_mp0;
#endif
#if MC33993_SG6_EN == 1
if(MC33993_stSG6_mp0 < 2) TEST_PIN_SG6 = MC33993_stSG6_mp0;
#endif
#if MC33993_SG7_EN == 1
if(MC33993_stSG7_mp0 < 2) TEST_PIN_SG7 = MC33993_stSG7_mp0;
#endif
#if MC33993_SG8_EN == 1
if(MC33993_stSG8_mp0 < 2) TEST_PIN_SG8 = MC33993_stSG8_mp0;
#endif
#if MC33993_SG9_EN == 1
if(MC33993_stSG9_mp0 < 2) TEST_PIN_SG9 = MC33993_stSG9_mp0;
#endif
#if MC33993_SG10_EN == 1
if(MC33993_stSG10_mp0 < 2) TEST_PIN_SG10 = MC33993_stSG10_mp0;
#endif
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -