📄 drvfmradioprivate.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 + -