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

📄 drvfmradioprivate.c

📁 ecos FM radio driver
💻 C
字号:
//===========================================================================//      The information contained herein is the exclusive property of//      Sunplus Technology Co。 And shall not be distributed, reproduced,//      or disclosed in whole in part without prior written permission//       (C) COPYRIGHT 2001   SUNPLUS TECHNOLOGY CO//       ALL RIGHTS RESERVED//       The entire notice above must be reproduced on all authorized copies//===========================================================================//  Filename   : DrvFMRadioPrivate.c//  Author     : guoquan//  Tel        : //  Date       : 2005/11/21//  Description: DrvFMRadio模块私有函数。//  Reference  :////  Version history:				   //---------------------------------------------------------------------------//  Version   YYYY-MM-DD-INDEX   Modified By         Description//---------------------------------------------------------------------------//  1.0.0	    2005-11-21		  guoquan	           初始版本//===========================================================================//===========================================================================//include file list//===========================================================================#include ".\system\TypeDefine.h"#include ".\system\SysAssert.h"#include ".\Driver\FMRadio\DrvFMRadioPrivate.h"#include ".\Driver\FMRadio\DrvFMRadio.h"#include "REG320.h"#ifdef __FMRadio_5767__UCHAR g_ucFMRadioWriteData[5];			//发送FM数据缓冲区                  UCHAR g_ucFMRadioReadData[5];			//接收数据缓冲区                    #endifUCHAR g_ucTestFlag=0;#ifndef _LV2400_//===========================================================================//Function   :	FMRadioI2CDelay//Description: 	用于I2C通讯时的延时//Syntax     :	void FMRadioI2CDelay(UCHAR ucCount)//Parameters :	UCHAR ucCount	延时次数//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CDelay(UCHAR ucCount){        while(ucCount--)    {    	;    }	     }  //===========================================================================//Function   :	FMRadioI2CSendStart//Description: 	发送起始位//Syntax     :	void FMRadioI2CSendStart(void)//Parameters :	NONE//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CSendStart(void){	//EA = 0;	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);    M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SCL_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);	        }//===========================================================================//Function   :	FMRadioI2CSendStop//Description: 	发送停止位//Syntax     :	void FMRadioI2CSendStop(void)//Parameters	NONE//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CSendStop(void){	M_FMRADIOI2C_SCL_CLR;	        	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	//EA = 1;}//===========================================================================//Function   :	FMRadioI2CWaitAck//Description: 	等待应答位//Syntax     :	UCHAR FMRadioI2CWaitAck(void)//Parameters :	NONE//Return     :	TRUE		应答成功//				FALSE		应答失败//Notes      :	NONE//===========================================================================UCHAR FMRadioI2CWaitAck(void){		UCHAR ucErrTime;		//因故障接收方无ACK,超时值为255。	ucErrTime = 255;		//设置SDA为输入模式	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_IN;	FMRadioI2CDelay(C_FMRadioDelayNum);		M_FMRADIOI2C_SCL_SET;	while((0 != ucErrTime) && (0 != M_FMRADIOI2C_SDA_INPUT_DATA))	{		ucErrTime--;					}		FMRadioI2CDelay(C_FMRadioDelayNum);		M_FMRADIOI2C_SCL_CLR;	        	FMRadioI2CDelay(C_FMRadioDelayNum);		//将SDA设置为输出模式	M_FMRADIOI2C_SDA_OUT;	FMRadioI2CDelay(C_FMRadioDelayNum);			if(ucErrTime)	{		return (TRUE);	}	else	{		SysAssert(0);		return (FALSE);		}		}//===========================================================================//Function   :	FMRadioI2CSendByte//Description: 	发送一字节到I2C//Syntax     :	UCHAR  FMRadioI2CSendByte(UCHAR ucData)//Parameters :	UCHAR ucData		要发送的数据//Return     :	TRUE				发送成功//				FALSE				发送失败//Notes      :	NONE//===========================================================================UCHAR  FMRadioI2CSendByte(UCHAR ucData){    UCHAR ucCount;    //开始发送数    for(ucCount = 0; ucCount < 8; ucCount++)    {		 		if( 0 != (ucData & 0x80))		{			M_FMRADIOI2C_SDA_SET;        }        else        {			M_FMRADIOI2C_SDA_CLR;        }                    ucData = ucData<<1;        		        FMRadioI2CDelay(C_FMRadioDelayNum);                M_FMRADIOI2C_SCL_SET;                FMRadioI2CDelay(C_FMRadioDelayNum);                M_FMRADIOI2C_SCL_CLR;  		        FMRadioI2CDelay(C_FMRadioDelayNum);          }        //发送结束,开始接收应答    return (FMRadioI2CWaitAck());    }//===========================================================================//Function   :	FMRadioI2CReceiveByte//Description: 	从I2C接收一字节//Syntax     :	UCHAR  FMRadioI2CReceiveByte(UCHAR ucData)//Parameters :	UCHAR ucACK 		是否要发送应答位,0表示不需要,1 表示需要//Return     :	接收到的数据//Notes      :	NONE//===========================================================================UCHAR FMRadioI2CReceiveByte(UCHAR ucSendAck){    UCHAR ucCount;    UCHAR ucData;    UCHAR ucMask;        ucData = 0;    ucMask = 0x80;    	//设置SDA为输入模式	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_IN;		//开始接收数据    for(ucCount = 0; ucCount < 8; ucCount++)    {    	FMRadioI2CDelay(C_FMRadioDelayNum);    	M_FMRADIOI2C_SCL_SET;          	FMRadioI2CDelay(C_FMRadioDelayNum);       		if(0 != M_FMRADIOI2C_SDA_INPUT_DATA)		{			ucData |= ucMask;		}	                ucMask = ucMask >> 1;                M_FMRADIOI2C_SCL_CLR;                         }        M_FMRADIOI2C_SDA_OUT;	//判断是否发送应    if(ucSendAck)    {		M_FMRADIOI2C_SDA_SET;		}	else	{		M_FMRADIOI2C_SDA_CLR;			}			FMRadioI2CDelay(C_FMRadioDelayNum); 	M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);     	M_FMRADIOI2C_SCL_CLR;  	FMRadioI2CDelay(C_FMRadioDelayNum);  	    return ucData;}#else//===========================================================================//Function   :	FMRadioI2CDelay//Description: 	用于I2C通讯时的延时//Syntax     :	void FMRadioI2CDelay(UCHAR ucCount)//Parameters :	UCHAR ucCount	延时次数//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CDelay(UCHAR ucCount){        while(ucCount--)    {    	;    }	     }  //===========================================================================//Function   :	FMRadioI2CSendStart//Description: 	发送起始位//Syntax     :	void FMRadioI2CSendStart(void)//Parameters :	NONE//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CSendStart(void){	EA = 0;        	M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);        }//===========================================================================//Function   :	FMRadioI2CSendStart//Description: 	发送起始位//Syntax     :	void FMRadioI2CSendStart(void)//Parameters :	NONE//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CSendRepeatStart(void){	M_FMRADIOI2C_SCL_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum); 	M_FMRADIOI2C_SDA_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);         }//===========================================================================//Function   :	FMRadioI2CSendStop//Description: 	发送停止位//Syntax     :	void FMRadioI2CSendStop(void)//Parameters	NONE//Return     :	NONE//Notes      :	NONE//===========================================================================void FMRadioI2CSendStop(void){		M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	EA = 1;}//===========================================================================//Function   :	FMRadioI2CWaitAck//Description: 	等待应答位//Syntax     :	UCHAR FMRadioI2CWaitAck(void)//Parameters :	NONE//Return     :	TRUE		应答成功//				FALSE		应答失败//Notes      :	NONE//===========================================================================UCHAR FMRadioI2CWaitAck(void){		UCHAR ucErrTime;		//因故障接收方无ACK,超时值为255。	ucErrTime = 255;		//设置SDA为输入模式	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_IN;	FMRadioI2CDelay(C_FMRadioDelayNum);		M_FMRADIOI2C_SCL_SET;	while((0 != ucErrTime) && (0 != M_FMRADIOI2C_SDA_INPUT_DATA))	{		ucErrTime--;					}		FMRadioI2CDelay(C_FMRadioDelayNum);		M_FMRADIOI2C_SCL_CLR;	        	FMRadioI2CDelay(C_FMRadioDelayNum);		//将SDA设置为输出模式	M_FMRADIOI2C_SDA_OUT;	FMRadioI2CDelay(C_FMRadioDelayNum);		M_FMRADIOI2C_SDA_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);    	if(ucErrTime)	{		return (TRUE);	}	else	{		SysAssert(0);		return (FALSE);		}		}//===========================================================================//Function   :	FMRadioI2CSendByte//Description: 	发送一字节到I2C//Syntax     :	UCHAR  FMRadioI2CSendByte(UCHAR ucData)//Parameters :	UCHAR ucData		要发送的数据//Return     :	TRUE				发送成功//				FALSE				发送失败//Notes      :	NONE//===========================================================================UCHAR  FMRadioI2CSendByte(UCHAR ucData){    UCHAR ucCount;		M_FMRADIOI2C_SCL_CLR;		FMRadioI2CDelay(C_FMRadioDelayNum);  	    //开始发送数    for(ucCount = 0; ucCount < 8; ucCount++)    {		 		if( 0 != (ucData & 0x80))		{			M_FMRADIOI2C_SDA_SET;        }        else        {			M_FMRADIOI2C_SDA_CLR;        }                    ucData = ucData<<1;        		        FMRadioI2CDelay(C_FMRadioDelayNum);                M_FMRADIOI2C_SCL_SET;                FMRadioI2CDelay(C_FMRadioDelayNum);                M_FMRADIOI2C_SCL_CLR;  		        FMRadioI2CDelay(C_FMRadioDelayNum);          }        M_FMRADIOI2C_SDA_CLR;    FMRadioI2CDelay(C_FMRadioDelayNum);        //发送结束,开始接收应答    return (FMRadioI2CWaitAck());    }//===========================================================================//Function   :	FMRadioI2CReceiveByte//Description: 	从I2C接收一字节//Syntax     :	UCHAR  FMRadioI2CReceiveByte(UCHAR ucData)//Parameters :	UCHAR ucACK 		是否要发送应答位,0表示不需要,1 表示需要//Return     :	接收到的数据//Notes      :	NONE//===========================================================================UCHAR FMRadioI2CReceiveByte(UCHAR ucSendAck){    UCHAR ucCount;    UCHAR ucData;    UCHAR ucMask;        ucData = 0;    ucMask = 0x80;  	ucSendAck = 0; 	M_FMRADIOI2C_SCL_CLR;	FMRadioI2CDelay(C_FMRadioDelayNum);  		  	//设置SDA为输入模式	M_FMRADIOI2C_SDA_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);	M_FMRADIOI2C_SDA_IN;		//开始接收数据    for(ucCount = 0; ucCount < 8; ucCount++)    {    	FMRadioI2CDelay(C_FMRadioDelayNum);    	M_FMRADIOI2C_SCL_SET;          	FMRadioI2CDelay(C_FMRadioDelayNum);       		if(0 != M_FMRADIOI2C_SDA_INPUT_DATA)		{			ucData |= ucMask;		}	                ucMask = ucMask >> 1;                M_FMRADIOI2C_SCL_CLR;                         }        M_FMRADIOI2C_SDA_OUT;    M_FMRADIOI2C_SDA_CLR;    FMRadioI2CDelay(C_FMRadioDelayNum);			M_FMRADIOI2C_SDA_SET;			FMRadioI2CDelay(C_FMRadioDelayNum); 	M_FMRADIOI2C_SCL_SET;	FMRadioI2CDelay(C_FMRadioDelayNum);     	M_FMRADIOI2C_SCL_CLR;  	FMRadioI2CDelay(C_FMRadioDelayNum);  	M_FMRADIOI2C_SDA_CLR;		FMRadioI2CDelay(C_FMRadioDelayNum);    return ucData;}#endif

⌨️ 快捷键说明

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