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

📄 spi.c

📁 此程序为DP256的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 + -