Example #1
0
// =========================================================
//        I2C Master Tx Wake Up Callback Function
// =========================================================
void I2C_MasterTxWakeup(uint32_t u32Status)
{
	if(u32Status == 0x08)                       /* START has been transmitted */
	{
		I2C_SetData(I2C_MS_PORT, (I2CMstAddr << 1));    /* Write SLA+W to Register I2CDAT */
		I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_SI);
	}
	else if(u32Status == 0x18)                  /* SLA+W has been transmitted and ACK has been received */
	{
		I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_STO_SI);
		I2CMstWakeupEndFlag = 1;
		//I2C_DisableTimeout(I2C_MS_PORT);
	}
	else if(u32Status == 0x20)                  /* SLA+W has been transmitted and NOT ACK has been received */
	{
		//------TimeOut Recover Master state-----------
		if(I2CMstEndFlag==0 && (getTickCount() - I2CMstTimeOutCounter) > 1)		//3ms
		{
			I2CMstWakeupEnStartFlag=1;
			I2CMstTRxEnStartFlag=1;
			I2CMstSleepEnStartFlag=1;
			I2CMstEndFlag=1;
			I2CMstTimeOutFlag=1;
		}
		I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_STA_STO_SI);
	}
	else
	{
		/* TO DO */
		printf("Status 0x%x is NOT processed\n", u32Status);
	}
}
Example #2
0
/*---------------------------------------------------------------------------------------------------------*/
void I2C_MasterTx(uint32_t u32Status)
{
	if(u32Status == 0x08)                       /* START has been transmitted */
	{
		I2CMstState=0;
		I2C_SetData(I2C_MS_PORT, I2CMstAddr << 1);    /* Write SLA+W to Register I2CDAT */
		I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_SI);
	}
	else if(u32Status == 0x18)                  /* SLA+W has been transmitted and ACK has been received */
	{
		I2C_SetData(I2C_MS_PORT, I2CMstCmd);
		I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_SI);
		I2CMstStage=0;
	}
	else if(u32Status == 0x20)                  /* SLA+W has been transmitted and NACK has been received */
	{
		//------TimeOut Recover Master state-----------
		if(I2CMstEndFlag==0 && (getTickCount() - I2CMstTimeOutCounter) > 1)
		{
			I2CMstWakeupEnStartFlag=1;
			I2CMstTRxEnStartFlag=1;
			I2CMstSleepEnStartFlag=1;
			I2CMstEndFlag=1;
			I2CMstTimeOutFlag=1;
		}
		I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_STA_STO_SI);
	}
	else if(u32Status == 0x28)                  /* DATA has been transmitted and ACK has been received */
	{
		if(I2CMstStage==0)
		{
			I2C_SetData(I2C_MS_PORT, I2CMstCmd>>8);
			I2CMstStage=1;
			I2C_SET_CONTROL_REG(I2C_MS_PORT, I2C_CTL_SI);
		}
		else if(I2CCurrentLen < I2CDataEndBit)
Example #3
0
	//*********************************************************
	void I2C_Main()
	{
		char i;
		#if Slave_Mode == 1
			if(I2C->SlaveGO)
			{		
				I2C->SlaveGO=0;
				I2C_Slave_Mode();
				SSPIE=1;
	
				if(I2C->SlaveTxGO)
				{
					I2C->SlaveTxGO=0;
					SS1=0;
					I2C->SS=0;
				}
				if(I2C->SlaveRxGO)
				{
					I2C->SlaveRxGO=0;
					I2C_SetData(0);
				}
				LED2=~LED2;
			}
		#endif

		#if Master_Mode == 1

			if(I2C->MasterRxGO)
			{
				I2C->MasterRxGO=0;
				I2C_Master_Reception();
				TMain->Test=1;
				LED2=~LED2;
				#if UART_use == 1
					for(i=0;i<32;i++)
					{
						UART->TxData[i]=I2C->BufferReader[i];		
					}
					UART->TxGO=1;	
				#endif
			}
			else
			{
				if(SS1)
				{
					if(!I2C->SS)
					{
						I2C->SS=1;
						I2C->MasterRxGO=1;
					}
				}
				else
				{
					if(I2C->SS)
					{
						I2C->SS=0;
					}
					if(I2C->MasterTxGO)
					{
						I2C->MasterTxGO=0;
						I2C_Master_Transmission();
					}	
				}
			}

		#endif
	}