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

📄 lib.c

📁 ST72321 control tuner(FST) and CD servo (STA1052).
💻 C
📖 第 1 页 / 共 2 页
字号:
					if(RDS.F_REGEnable)
						DebugBuff[55]=1;
					else
						DebugBuff[55]=0;
					if(RDS.F_EONEnable)
						DebugBuff[56]=1;
					else
						DebugBuff[56]=0;
					DebugNum=57;
					break;
				case 2:
					DebugLoop=3;

					DebugSubMode=3;
					DebugBuff[0]=(unsigned char)(Radio.Band[0].PI[5]&0x00FF);
					DebugBuff[1]=(unsigned char)(Radio.Band[0].PI[5]>>8);
					DebugBuff[2]=Radio.Band[0].MemAFNum[5];
					for(j=0;j<8;j++)
						DebugBuff[j+3]=Radio.Band[0].MemAFList[5][j];

					DebugBuff[11]=(unsigned char)(RDS.PI&0x00FF);
					DebugBuff[12]=(unsigned char)(RDS.PI>>8);
					DebugBuff[13]=(unsigned char)(RDS.PIBackup&0x00FF);
					DebugBuff[14]=(unsigned char)(RDS.PIBackup>>8);
					DebugBuff[15]=(unsigned char)(RDS.PISeekTimer&0x00FF);
					DebugBuff[16]=(unsigned char)(RDS.PISeekTimer>>8);
					DebugBuff[17]=RDS.MaxLevel;
					DebugBuff[18]=RDS.PTY;
					for(i=0;i<25;i++)
						DebugBuff[i+19]=RDS.AF[i];
					if(RDS.TP)
						DebugBuff[44]=1;
					else
						DebugBuff[44]=0;
					if(RDS.TA)
						DebugBuff[45]=1;
					else
						DebugBuff[45]=0;
					for(i=0;i<8;i++)
						DebugBuff[i+46]=RDS.PS[i];
					DebugBuff[54]=RDS.TimeHour;
					DebugBuff[55]=RDS.TimeMin;
					DebugBuff[56]=RDS.AFNum;
					if(RDS.F_AFEnable)
						DebugBuff[57]=1;
					else
						DebugBuff[57]=0;
					if(RDS.F_TAEnable)
						DebugBuff[58]=1;
					else
						DebugBuff[58]=0;
					if(RDS.F_PTYEnable)
						DebugBuff[59]=1;
					else
						DebugBuff[59]=0;
					DebugNum=60;
					break;
				case 3:
					DebugLoop=4;

					DebugSubMode=4;
					for(i=0;i<25;i++)
					{
						DebugBuff[i]=RDS.AFSmeter[i];
						DebugBuff[i+25]=RDS.AFDisable[i];
					}
					DebugNum=50;
					break;
				case 4:
					DebugLoop=0;

					DebugSubMode=5;
					for(i=0;i<18;i++)
					{
						DebugBuff[i]=AudioI2CBuf[i];
					}
					DebugNum=18;
					break;

				case 255:
					DebugLoop=0;

					break;
			}
			
			DebugSend();

			//DebugShow("Test bebug ",DebugLoop," OK?");
		}
	#endif
}

#if 0
/*********************************************
	Function:		I2C_Int
	Description:	I2C bus interrupt handler.
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_Int (void)
{
  asm TNZ   I2CSR1;
  asm TNZ   I2CSR2;
  HW_I2C_MasterProcess();
}

/*********************************************
	Function:		HW_I2C_Reset
	Description:	I2C bus reset.
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_Reset (void)
{ 
  I2CCCR = I2C_SPEED_100K;	/*slow mode for main loop*/
  I2COAR2 = 0;				/* No 10 bit addressing (reset status).*/
  asm TNZ   I2CDR;			/* Touch to clear any interrupt.*/
  asm TNZ   I2CSR1;
  asm TNZ   I2CSR2;
  I2CCR =I2CCR = 0x25;         	/* I2C turn on w/ IT enable and Ack enable.*/
  HW_I2C_FlagAllClear();
}


/*********************************************
	Function:		HW_I2C_MasterProcess
	Description:	I2C bus main process.
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_MasterProcess(void)
{
  	if ((I2C_AF==1)||(I2C_ARLO==1)||(I2C_BERR==1))/*error handle*/
  	{
		if(mt_send_state!=MT_SEND_SUCCESS)
		{
			mt_send_state = MT_SEND_ERROR;
		}
		if(mr_rece_state!=MR_RECE_SUCCESS)
		{
			mr_rece_state = MR_RECE_ERROR;
		}
		HW_I2C_StopCom();
		return;
	}	
	
	switch(mt_send_state)
	{
		case MT_SEND_START:
			if (I2C_SB==1)		/*Ev5 evf=1,sb=1: start condition generated*/
			{
				I2CDR = i2c_dest;
				mt_send_state = MT_SEND_DEST_ADDRESS;				
			}
			break;
			
		case MT_SEND_DEST_ADDRESS:
			I2C_PE=1;			/*EV6 write CR*/
			if (I2C_BTF==0)		/*EV8 check the trans success or not */
			{
				break;
			}
			else
			{
				mt_send_state = MT_SEND_DEST_DATA;
			}
			break;
			
		case MT_SEND_DEST_DATA:
			if (I2C_BTF==1)		/*EV8 check the trans success or not */
			{
				if(i2c_nbyte_index <=Tx_length)
				{
					I2CDR =ACCORDO_Buffer_Tx[i2c_nbyte_index];
					i2c_nbyte_index++;
				}
				else
				{
					mt_send_state = MT_SEND_STOP;
				}
			}
			break;

		case MT_SEND_STOP:
			I2C_STOP=1;
			mt_send_state = MT_SEND_SUCCESS;
			
		case MT_SEND_SUCCESS:
			break;
			
			
	}
	
	switch(mr_rece_state)
	{
		case MR_RECE_IDLE:
			break;
		case MR_RECE_START:
			if (I2C_SB==1)		
			{
				I2CDR = i2c_dest | 0x1;      
				mr_rece_state = MR_RECE_LEN;
			}
			break;
			
#if STCIS002

		case MR_RECE_LEN:
			I2C_PE=1;			
			if (I2C_BTF==1)		
			{
				if(i2c_nbyte_index<3)
				{
					ACCORDO_Buffer_Rx[i2c_nbyte_index]= I2CDR;
					i2c_nbyte_index++;
				}
				else
				{

					Rx_length=ACCORDO_Buffer_Rx[i2c_nbyte_index-1];
					/*if((Rx_length>=RX_BUFFER_SIZE)||(Rx_length == 0))
					{
						mr_rece_state = MR_RECE_ERROR;
						HW_I2C_StopCom();
					}
					
					else	*/				
					{	
						mr_rece_state = MR_RECE_DATA;
					}
				}

			}
			break;
			
		case MR_RECE_DATA:
			I2C_PE=1;		
			if (I2C_BTF==1)		
			{
				if(Rx_length>0)
				{
					ACCORDO_Buffer_Rx[i2c_nbyte_index]= I2CDR;
					Rx_crc += ACCORDO_Buffer_Rx[i2c_nbyte_index];
					Rx_cxc ^= ACCORDO_Buffer_Rx[i2c_nbyte_index];
					i2c_nbyte_index++;
					Rx_length--;
				}
				else
				{
					ACCORDO_Buffer_Rx[i2c_nbyte_index]= I2CDR;
					i2c_nbyte_index++;
					I2C_ACK=0;	/*not ack req*/
					mr_rece_state = MR_RECE_LAST_DATA;
				}
			}

			break;
			
		case MR_RECE_LAST_DATA:
			I2C_PE=1;
			if (I2C_BTF==1)
			{	
				I2C_STOP=1;		/*Attention: Must first Set STOP Bit then read data!!!*/
				ACCORDO_Buffer_Rx[i2c_nbyte_index] = I2CDR;
				if ((ACCORDO_Buffer_Rx[i2c_nbyte_index-1] != Rx_crc)||(ACCORDO_Buffer_Rx[i2c_nbyte_index]!= Rx_cxc))
				{
					mr_rece_state = MR_RECE_ERROR;
					//HW_I2C_StopCom();
				}
				else
				{
					mr_rece_state = MR_RECE_SUCCESS;
				}
				//HW_I2C_StopCom();
			}

			break;

#else			
		case MR_RECE_LEN:
			I2C_PE=1;			
			if (I2C_BTF==1)		
			{
				Rx_length= I2CDR;
				if((Rx_length>RX_BUFFER_SIZE)||(Rx_length == 0))
				//if(Rx_length>RX_BUFFER_SIZE)

				{
					mr_rece_state = MR_RECE_ERROR;
					//HW_I2C_StopCom();
				}
				else
				{	ACCORDO_Buffer_Rx[i2c_nbyte_index]= Rx_length;
					i2c_nbyte_index++;
					mr_rece_state = MR_RECE_DATA;
				}
			}
			break;
		case MR_RECE_DATA:
			I2C_PE=1;		
			if (I2C_BTF==1)		
			{
				ACCORDO_Buffer_Rx[i2c_nbyte_index]= I2CDR;
				Rx_crc += ACCORDO_Buffer_Rx[i2c_nbyte_index];
				i2c_nbyte_index++;
				if (i2c_nbyte_index >= Rx_length)
				{
					I2C_ACK=0;	/*not ack req*/
					mr_rece_state = MR_RECE_LAST_DATA;
				}
			}
			break;
			
		case MR_RECE_LAST_DATA:
			I2C_PE=1;
			if (I2C_BTF==1)
			{	
				I2C_STOP=1;		/*Attention: Must first Set STOP Bit then read data!!!*/
				ACCORDO_Buffer_Rx[i2c_nbyte_index] = I2CDR;
				//if(Rx_crc==ACCORDO_Buffer_Rx[i2c_nbyte_index]+0x5a)
				if(Rx_crc+0x5a==ACCORDO_Buffer_Rx[i2c_nbyte_index])
					
				{
					mr_rece_state = MR_RECE_SUCCESS;
				}
				else
				{
					mr_rece_state = MR_RECE_ERROR;
				}
				//HW_I2C_StopCom();
			}
			break;

#endif
			
		case MR_RECE_SUCCESS:
			break;
			
		case MR_RECE_ERROR:
			break;
			
	}
}




unsigned char Rece_CheckSum(void)
{	
	unsigned char j;
	unsigned char Sum;
	Sum = 0;
	Sum = Sum + 0x5a;
	for(j=1;j<=Rx_length-1;j++) 
		Sum = Sum + ACCORDO_Buffer_Rx[j];
	if(Sum!=ACCORDO_Buffer_Rx[Rx_length])   
       	return 0;
	else
		return 1;
}

/*********************************************
	Function:		HW_I2C_StopCom
	Description:	I2C bus stop command.
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_StopCom(void)
{
	I2C_STOP=1;
	I2C_PE=0;
	NOP;
	HW_I2C_Reset();		/*restart I2C function*/
	//I2CCCR = I2C_SPEED_100K;	/*slow mode for main loop*/
  //I2COAR2 = 0;				/* No 10 bit addressing (reset status).*/
  //asm TNZ   I2CDR;			/* Touch to clear any interrupt.*/
  //asm TNZ   I2CSR1;
  //asm TNZ   I2CSR2;
  //I2CCR =I2CCR = 0x25;         	/* I2C turn on w/ IT enable and Ack enable.*/
  //HW_I2C_FlagAllClear();
	
}

/*********************************************
	Function:		HW_I2C_StartCom
	Description:	I2C bus start command.
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_StartCom(void)
{
	I2C_STOP=0;
	I2C_START=1;
	I2C_ACK=1;           
	I2C_ITE=1;
}

#if 0
/*/*********************************************
	Function:		HW_I2C_Send
	Description:	I2C bus send data
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_Send (unsigned char PeriphIdtemp)
{
	i2c_dest = PeriphIdtemp;
	i2c_nbyte_index = 0;
	mt_send_state = MT_SEND_START;
	HW_I2C_StartCom();
  	SendDelay= 3;				/*Max delay is 20ms*/
  	while (SendDelay)
  	{
  		if (!mt_send_state)break;
  	}
  	if (mt_send_state)
  	{
  		HW_I2C_StopCom();
  	}
}


/*********************************************
	Function:		HW_I2C_Receive
	Description:	I2C bus receive data
	Write/Modify:
	Time:		2006-06
*********************************************/
void HW_I2C_Receive (unsigned char periphidtemp)
{
	i2c_dest = periphidtemp;
	i2c_nbyte_index = 0;
	mr_rece_state = MR_RECE_START;
	HW_I2C_StartCom();
  	ReceDelay= 2;				/*Max delay is 20ms*/
  	while (ReceDelay)
  	{
  		if (!mr_rece_state)break;
  	}
  	if (mr_rece_state)
  	{
  		HW_I2C_StopCom();
  	}
}
#endif


void HW_I2C_FlagAllClear()
{
	accordo_send_flag.flag.request = 0;
	accordo_send_flag.flag.busy = 0;
	//accordo_receive_flag.flag.request = 0;
	accordo_receive_flag.flag.busy = 0;
}
#endif



void HWI2CSendData(unsigned char addr, unsigned char *sendbuff)
{
	HWI2CAddress=addr;
	HWI2CDataSend=sendbuff;
	HWI2CMode=1;
	I2C_PE=1;
	I2C_ACK=1;
	I2C_START=1;
}

void HWI2CReadData(unsigned char addr, unsigned char *readbuff)
{
	HWI2CAddress=addr;
	HWI2CDataRead=readbuff;
	HWI2CMode=5;
	I2C_PE=1;
	I2C_ACK=1;
	I2C_START=1;
}

void HWI2CInt(void)
{
	asm TNZ   I2CSR1;
  	asm TNZ   I2CSR2;
	if(I2C_BERR||I2C_AF||I2C_ARLO) return;
	switch(HWI2CMode)
	{
		case 0:

			break;
		case 1:
			if(I2C_SB)
			{
				I2CDR=HWI2CAddress;
				HWI2CMode=2;
			}
			break;
		case 2:
			I2C_PE=1;
			if(I2C_BTF)
			{
				I2CDR=*HWI2CDataSend;
				HWI2CSendLen=*HWI2CDataSend;
				HWI2CDataSend++;
				HWI2CMode=3;
			}
			break;
		case 3:
			if(I2C_BTF)
			{
				if(HWI2CSendLen>0)
				{
					I2CDR=*HWI2CDataSend;
					HWI2CDataSend++;
					HWI2CSendLen--;
				}
				else
				{
					HWI2CMode=4;
				}
			}
			break;
		case 4:
			//if(I2C_AF)
			{
				I2C_STOP=1;
				HWI2CMode=0;
			}
			break;
			
		case 5:
			if(I2C_SB)
			{
				I2CDR=HWI2CAddress;
				HWI2CMode=6;
			}
			break;
		case 6:
			I2C_PE=1;

			if(I2C_BTF)
			{
				*HWI2CDataRead=I2CDR;
				HWI2CReadLen=*HWI2CDataRead;
				HWI2CDataRead++;
				HWI2CMode=7;
			}
			break;
		case 7:
			I2C_PE=1;
			if(I2C_BTF)
			{
				if(HWI2CReadLen>0)
				{
					if(HWI2CReadLen==1)
					{
						I2C_STOP=1;
						HWI2CMode=0;
					}
					*HWI2CDataRead=I2CDR;
					HWI2CDataRead++;
					HWI2CReadLen--;
					if(HWI2CReadLen==1)
						I2C_ACK=0;
				}
			}
			break;
		
	}
}
/*********************************************************
				File End
*********************************************************/

#ifdef	DEBUG_MODE
void DebugSend(void)
{
	unsigned char i;
  	I2CStart ();
  	I2COut8Bit(0xFF);
  	I2COut8Bit(DebugSubMode);
	for (i=0;i<DebugNum; i++)
		I2COut8Bit(DebugBuff[i]);
	I2CStop();
}

void DebugShow(unsigned char *pStart,unsigned int inputdata,unsigned char *pStop)
{
	unsigned char i;
	for(i=0;*pStart>0&&i<60;i++,pStart++)
		DebugBuff[i]=*pStart;
	if(inputdata!=0xFFFF&&i<58)
	{
		DebugBuff[i]=0xFF;
		i++;
		DebugBuff[i]=(unsigned char)(inputdata&0x00FF);
		i++;
		DebugBuff[i]=(unsigned char)(inputdata>>8);
		i++;
	}
	for(;*pStop>0&&i<60;i++,pStop++)
		DebugBuff[i]=*pStop;
		
	DebugNum=i;
	DebugSubMode=255;

	DebugSend();
	
	//Wait1ms(10);
}

#endif

⌨️ 快捷键说明

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