?? radiomoduleapi.c
字號:
//***************************************************************
// 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 + -