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

📄 radiomoduleapi.c

📁 SI47**系列DSP的收音芯片驱动C源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//***************************************************************
//  ARM BOOT ROUTE VER1.0 for NXP_ARM release
//  bjwork2007@gmail.com
//  chenjun @ 2008-7-19
//***************************************************************

#include "..\inc\usart.h"
#include "..\inc\common.h"
#include "..\inc\NXP_ARM.h"
#include "..\inc\RadioModuleTypeDEF.h"
#include "..\inc\RadioModuleHwDrv.h"
#include "..\inc\RadioModuleSwCmd.h"
#include "..\inc\RadioModuleAPI.h"
#include "..\inc\RadioModuleGUI.h"
#include "..\inc\RadioModuleRDSAPI.h"

#ifdef UseSI473X_Radio

	RM_U16 FM_Band_Top;
	RM_U16 FM_Band_Bottom;
	RM_U16 FM_Region_Deemphasis;
	RM_U16 FM_Seek_Space;
	RM_U16 AM_Band_Top;
	RM_U16 AM_Band_Bottom;	
	RM_U16 AM_Region_Deemphasis;
	RM_U16 AM_Seek_Space;
	RM_U8  AM_FM_Receive_SEL;
	RM_U8  AM_FM_Receive_Region;
	RM_U32 FM_RDS_VAL_F;
	
	FMSeekStruct FMChannelArray[MaxStationNum];
	FMGetSetupInfoStruct FMGetSetupInfo;
	AMSeekStruct AMChannelArray[MaxStationNum];
	AMGetSetupInfoStruct AMGetSetupInfo;
	
	void SetReceiveRegion(RM_U8 RegionCode)
	{
		AM_FM_Receive_Region = RegionCode;
		FM_RDS_VAL_F = 0;
		switch(AM_FM_Receive_Region)
		{
			case China:
				FM_Band_Top = 10800;//108.0MHz
				FM_Band_Bottom = 8750;//87.5MHz
				FM_Region_Deemphasis = 0x01;//50us
				FM_Seek_Space = 10;//100KHz
				AM_Band_Top = 1710;//1710KHz
				AM_Band_Bottom = 522;//522KHz
				AM_Region_Deemphasis = 0x01;//50us
				AM_Seek_Space = 9;//9KHz
				break;
			case Europe:
				FM_Band_Top = 10800;//108.0MHz
				FM_Band_Bottom = 8750;//87.5MHz
				FM_Region_Deemphasis = 0x01;//50us
				FM_Seek_Space = 10;//100KHz
				AM_Band_Top = 1710;//1710KHz
				AM_Band_Bottom = 520;//520KHz
				AM_Region_Deemphasis = 0x01;//50us
				AM_Seek_Space = 10;//10KHz
				break;
			case Japan:
				FM_Band_Top = 10800;//108.0MHz
				FM_Band_Bottom = 7600;//76.0MHz
				FM_Region_Deemphasis = 0x01;//50us
				FM_Seek_Space = 10;//100KHz
				AM_Band_Top = 1710;//1710KHz
				AM_Band_Bottom = 522;//522KHz
				AM_Region_Deemphasis = 0x01;//50us
				AM_Seek_Space = 9;//9KHz
				break;
			case USA:
				FM_Band_Top = 10800;//108.0MHz
				FM_Band_Bottom = 8750;//87.5MHz
				FM_Region_Deemphasis = 0x02;//75us
				FM_Seek_Space = 10;//100KHz
				AM_Band_Top = 1710;//1710KHz
				AM_Band_Bottom = 520;//520KHz
				AM_Region_Deemphasis = 0x00;//50us
				AM_Seek_Space = 10;//10KHz
				break;
			default:break;
		}
	}
	
	RM_U8 Set_OSC_Frequence(RM_U16 OSC_Frequence)
	{
		return RadioModule_Set_Prop(Prop_REFCLK_FREQ,OSC_Frequence);
	}
	
	RM_U8 Set_FM_Seek_Band(RM_U16 Band_Top,RM_U16 Band_Bottom)
	{
		RM_U8 Status;
		
		Status = RadioModule_Set_Prop(Prop_FM_SEEK_BAND_TOP,Band_Top);
		if(Status != OK)
			return Status;
		Status = RadioModule_Set_Prop(Prop_FM_SEEK_BAND_B0T,Band_Bottom);
		
		return Status;
	}
	
	RM_U8 Set_FM_Seek_Space(RM_U16 FM_Seek_Freq_Space)
	{
		return RadioModule_Set_Prop(Prop_FM_SEEK_FREQ_SPA,FM_Seek_Freq_Space);
	}
	
	RM_U8 Set_FM_Seek_RSSI_TD(RM_U16 FM_Seek_Rssi_TD)
	{
		return RadioModule_Set_Prop(Prop_FM_SEEK_TUNE_RSSI_TD,FM_Seek_Rssi_TD);
	}
		
	RM_U8 Set_FM_Seek_SNR_TD(RM_U16 FM_Seek_Snr_TD)
	{
		return RadioModule_Set_Prop(Prop_FM_SEEK_TUNE_SNR_TD,FM_Seek_Snr_TD);
	}
	
	RM_U8 Set_FM_Deemphasis(RM_U16 FM_Deemphasis)
	{
		return RadioModule_Set_Prop(Prop_FM_DEEMPHASIS,FM_Deemphasis);
	}
	
	RM_U8 Set_FM_RSSI_TD(RM_U16 RSSIHT,RM_U16 RSSILT)
	{
		RM_U8 Status;
		
		Status = RadioModule_Set_Prop(Prop_FM_RSQ_RSSI_HI_TD,(RSSIHT & 0x7f));
		if(Status!=OK)
			return Status;
		return RadioModule_Set_Prop(Prop_FM_RSQ_RSSI_LO_TD,(RSSILT & 0x7f));
	}
	
	RM_U8 Set_FM_SNR_TD(RM_U16 SNRHT,RM_U16 SNRLT)
	{
		RM_U8 Status;
		
		Status = RadioModule_Set_Prop(Prop_FM_RSQ_SNR_HI_TD,(SNRHT & 0x7f));
		if(Status!=OK)
			return Status;
		return RadioModule_Set_Prop(Prop_FM_RSQ_SNR_LO_TD,(SNRLT & 0x7f));
	}
	
	RM_U8 Set_FM_Steror_Mono_TD(RM_U16 ST_RSSI_TD,RM_U16 MO_RSSI_TD)
	{
		RM_U8 Status;
		
		Status = RadioModule_Set_Prop(Prop_FM_BLEND_STEREO_TD,(ST_RSSI_TD & 0x7f));
		if(Status!=OK)
			return Status;
		return RadioModule_Set_Prop(Prop_FM_BLEND_MONO_TD,(MO_RSSI_TD & 0x7f));
	}
	
	RM_U8 Get_FM_Setup_TD_Info(void)
	{
		RM_U8 Status;
		RM_U16	Temp;
		
		Status = RadioModule_Get_Prop(Prop_FM_SEEK_TUNE_SNR_TD,(RM_U16 *)(&Temp));
		if(Status!=OK)
			return Status;
		FMGetSetupInfo.FM_SEEK_SNR_TD = Temp;
		
		Status = RadioModule_Get_Prop(Prop_FM_SEEK_TUNE_RSSI_TD,(RM_U16 *)(&Temp));
		if(Status!=OK)
			return Status;
		FMGetSetupInfo.FM_SEEK_RSSI_TD = Temp;
		
		Status = RadioModule_Get_Prop(Prop_FM_SEEK_FREQ_SPA,(RM_U16 *)(&Temp));
		if(Status!=OK)
			return Status;
		FMGetSetupInfo.FM_SEEK_SPACE = Temp;
		
		Status = RadioModule_Get_Prop(Prop_FM_DEEMPHASIS,(RM_U16 *)(&Temp));
		if(Status!=OK)
			return Status;
		FMGetSetupInfo.FM_DEEMPHASIS = Temp;
		
		Status = RadioModule_Get_Prop(Prop_FM_BLEND_STEREO_TD,(RM_U16 *)(&Temp));
		if(Status!=OK)
			return Status;
		FMGetSetupInfo.FM_ST_RSSI_TD = Temp;
		
		Status = RadioModule_Get_Prop(Prop_FM_BLEND_MONO_TD,(RM_U16 *)(&Temp));
		if(Status!=OK)
			return Status;
		FMGetSetupInfo.FM_MO_RSSI_TD = Temp;
		
		return OK;
	}
		
	RM_U8 Set_FM_RSQ_BLEND_TD(RM_U8 EnPilotInd, RM_U8 BLEND_TD)
	{
		RM_U16 CmdPara_U16;
		
		CmdPara_U16 = (RM_U16)(BLEND_TD & 0x7f);
		if(EnPilotInd!=0)
			CmdPara_U16 |= 0x0080;
		return RadioModule_Set_Prop(Prop_FM_RSQ_BLEND_TD,CmdPara_U16);
	}
	
	
	
	RM_U8 Rds_Enable(void)
	{
		RM_U8 Status;
		
		Status = RadioModule_Set_Prop(Prop_RDS_INT_SOURCE,0x0007);//select RDS interrupt source
		if(Status != OK)
			return Status;
			
		Status = RadioModule_Set_Prop(Prop_RDS_INT_FIFO_COUNT,0x000a);//enable RDS fifo count
		if(Status != OK)
			return Status;
			
		Status = RadioModule_Set_Prop(Prop_GPO_IEN,0x0004);//enable RDS interrupt
		if(Status != OK)
			return Status;
		
		Status = RadioModule_FM_RDS_Status(FM_Empty_RDS_FIFO|FM_Clr_RDS_Int);//clear rds fifo
		if(Status != OK)
			return Status;
		
		Status = RadioModule_Set_Prop(Prop_RDS_CONFIG,0x0001);//enable RDS 
		if(Status != OK)
			return Status;
			
		return OK;
	}
	
	RM_U8 Rds_Disable(void)
	{
		return RadioModule_Set_Prop(Prop_RDS_CONFIG,0x0000);//enable RDS 
	}
	
	RM_U8 Get_Rds_Status(void)
	{
		RM_U8 Status;
		
		Status = RadioModule_FM_RDS_Status(FM_Clr_RDS_Int);
		if(Status != OK)
			return Status;
		return Status;
	}
	
	RM_U8 RDS_ISR(void)
	{
		RM_U8 IntStatus;
		RM_U8 Status;
		RM_U8 Group_Count;
		RM_U8 RDSDataAddr;
		FmRDSDataStruct RDSDataArray[12];
		#ifdef RDS_Data_Console_Debug
			RM_U8 i;
		#endif
		
		Status = RadioModule_Get_Int_Status((RM_U8 *)(&IntStatus));
		if(Status != OK)
			return Status;
		
		RDSDataAddr = 0;
		
		if((IntStatus & 0x04)!=0)	
		{
			Status = RadioModule_FM_RDS_Status(FM_RDS_Status_Only);
			if(Status != OK)
				return Status;
			
			FM_RDS_VAL_F = 0;
						
			if((FmRDSStatusInfo.Resp1 & 0x02)==0x02)//RDS_LOST_SYNC
			{
				FmRDSStatusInfo.Resp1 &= 0x01; 
			}
				
			if((FmRDSStatusInfo.Resp1 & 0x04)!=0)	//RDS_SYNC
			{
				FM_RDS_VAL_F |= RDS_SYNC;
			}					
				
			if((FmRDSStatusInfo.Resp1 & 0x01)!=0)	//RDSRECV
			{
				Group_Count = FmRDSStatusInfo.RDS_FIFO_Used;
				
				if(Group_Count != 0)
				{					
					if(Set_RDS_Data((RM_U8 *)(&FmRDSStatusInfo.BlockA_H),(FmRDSDataStruct *)(&RDSDataArray[RDSDataAddr]))==OK)
						RDSDataAddr++;
					Group_Count--;
					
					while(Group_Count != 0)
					{
						Status = RadioModule_FM_RDS_Status(FM_RDS_Status_Only);
						if(Status != OK)
							return Status;
						if(Set_RDS_Data((RM_U8 *)(&FmRDSStatusInfo.BlockA_H),(FmRDSDataStruct *)(&RDSDataArray[RDSDataAddr]))==OK)
							RDSDataAddr++;
						Group_Count--;
					}
				}
			}
			Status = RadioModule_FM_RDS_Status(FM_Clr_RDS_Int);
			if(Status != OK)
				return Status;
		
			#ifdef RDS_Data_Console_Debug
				if(RDSDataAddr!=0) 
					putch('\n');
				for(i=0;i<RDSDataAddr;i++)
				{
					printf("%.4x . %.4x . %.4x . %.4x\n",RDSDataArray[i].BlockA,
														 RDSDataArray[i].BlockB,
														 RDSDataArray[i].BlockC,
														 RDSDataArray[i].BlockD);	
				}
				if(RDSDataAddr!=0) 
					puts("end of RDS_ISR\n\n");
			#else
				RDS_Data_Proc(RDSDataArray,RDSDataAddr);
			#endif
			
		}		
		return Status;
	}
	
	RM_U8 Set_AM_Seek_Band(RM_U16 Band_Top,RM_U16 Band_Bottom)
	{
		RM_U8 Status;
		
		Status = RadioModule_Set_Prop(Prop_AM_SEEK_BAND_TOP,Band_Top);
		if(Status != OK)
			return Status;
		Status = RadioModule_Set_Prop(Prop_AM_SEEK_BAND_B0T,Band_Bottom);
		
		return Status;
	}
	
	RM_U8 Set_AM_Deemphasis(RM_U16 AM_Deemphasis)
	{
		return RadioModule_Set_Prop(Prop_AM_DEEMPHASIS,AM_Deemphasis);
	}
	
	RM_U8 Set_AM_Seek_Space(RM_U16 AM_Seek_Freq_Space)
	{
		return RadioModule_Set_Prop(Prop_AM_SEEK_FREQ_SPA,AM_Seek_Freq_Space);
	}
	

⌨️ 快捷键说明

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