?? radiomoduleswcmd.c
字號(hào):
//***************************************************************
// ARM BOOT ROUTE VER1.0 for NXP_ARM release
// bjwork2007@gmail.com
// chenjun @ 2008-7-19
//***************************************************************
#include "..\inc\NXP_ARM.h"
#include "..\inc\usart.h"
#include "..\inc\common.h"
#include "..\inc\RadioModuleTypeDEF.h"
#include "..\inc\RadioModuleHwDrv.h"
#include "..\inc\RadioModuleSwCmd.h"
#include "..\inc\RadioModuleGUI.h"
#include "..\inc\RadioModuleAPI.h"
#ifdef UseSI473X_Radio
RevInfoStruct RadioRevInfo;
FmTuneStatusStruct FmTuneStatusInfo;
FmRSQStatusStruct FmRSQStatusInfo;
FmRDSStatusStruct FmRDSStatusInfo;
FMAGCStatusStruct FMAGCStatusInfo;
AmTuneStatusStruct AmTuneStatusInfo;
AmRSQStatusStruct AmRSQStatusInfo;
RM_U8 Wait_CTS_High(RM_U8 CMD);
#ifdef Radio_Module_Console_Debug
void WaitContinue(void);
#endif
//CMD1 0x01
RM_U8 RadioModule_Power_Up(RM_U8 PowerUpMode)
{
RM_U8 Status;
RM_U8 PowerUpArray[3];
AM_FM_Receive_SEL = PowerUpMode;
switch(PowerUpMode)
{
case FM_Receive:
PowerUpArray[0] = 0x01;
#if(Osc_source==UseExtCYC)
PowerUpArray[1] = 0xd0;
#else
PowerUpArray[1] = 0xc0;
#endif
PowerUpArray[2] = 0x05;
#ifndef SI474X_Radio
AMAntATU();
#else
AMPreAmpSwitch(TurnOffAMAmp);
AM_ATTU(AMAttuOn);
#endif
break;
case AM_Receive:
PowerUpArray[0] = 0x01;
#if(Osc_source==UseExtCYC)
PowerUpArray[1] = 0xd1;
#else
PowerUpArray[1] = 0xc1;
#endif
PowerUpArray[2] = 0x05;
#ifndef SI474X_Radio
AMAntNoATU();
#else
AMPreAmpSwitch(TurnOnAMAmp);
AM_ATTU(AMAttuOff);
#endif
break;
default:
#ifdef Radio_Module_Console_Debug
puts("Error:Want to send unknown power up mode!\n");
#endif
#ifndef SI474X_Radio
AMAntATU();
#else
AMPreAmpSwitch(TurnOffAMAmp);
AM_ATTU(AMAttuOn);
#endif
return UnknownPowerUpMode;
break;
}
ResetRadioModule();
Delay(6000);
Status = OpRadioModule(WriteOp,PowerUpArray,3);
if(Status != OK)
return Status;
Status = Wait_CTS_High(Power_Up);
if(Status != OK)
return Status;
Delay(500000);
Status = RadioModule_Set_Prop(Prop_REFCLK_FREQ,CYCFreq);
if(Status != OK)
return Status;
Delay(6000);
switch(PowerUpMode)
{
case FM_Receive:
Status = Rds_Enable();
if(Status != OK)
return Status;
break;
case AM_Receive:
Status = Rds_Disable();
if(Status != OK)
return Status;
break;
default:
Status = Rds_Disable();
if(Status != OK)
return Status;
break;
}
return OK;
}
//CMD2 0x10
RM_U8 RadioModule_Get_Rev(void)
{
RM_U8 Status;
RM_U8 GetRevArray[2];
GetRevArray[0] = 0x10;
GetRevArray[1] = 0x00;
Status = OpRadioModule(WriteOp,GetRevArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(Get_Rev);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,(RM_U8 *)(&RadioRevInfo),9);
if(Status != OK)
return Status;
return OK;
}
//CMD3 0x11
RM_U8 RadioModule_Power_Down(void)
{
RM_U8 Status;
RM_U8 PD_cmd;
PD_cmd = 0x11;
Status = OpRadioModule(WriteOp,(RM_U8 *)(&PD_cmd),1);
if(Status != OK)
return Status;
Status = Wait_CTS_High(Get_Rev);
AMPTurnOff();
return Status;
}
//CMD4 0x12
RM_U8 RadioModule_Set_Prop(RM_U16 PropName,RM_U16 PropVal)
{
RM_U8 Status;
RM_U8 SetPropArray[6];
SetPropArray[0] = 0x12;
SetPropArray[1] = 0x00;
SetPropArray[2] = (RM_U8)((PropName >> 8) & 0xff);
SetPropArray[3] = (RM_U8)(PropName & 0xff);
SetPropArray[4] = (RM_U8)((PropVal >> 8) & 0xff);
SetPropArray[5] = (RM_U8)(PropVal & 0xff);
Status = OpRadioModule(WriteOp,SetPropArray,6);
if(Status != OK)
return Status;
Status = Wait_CTS_High(Set_Prop);
return Status;
}
//CMD5 0x13
RM_U8 RadioModule_Get_Prop(RM_U16 PropName,RM_U16 *PropVal)
{
RM_U8 Status;
RM_U8 GetPropArray[4];
GetPropArray[0] = 0x13;
GetPropArray[1] = 0x00;
GetPropArray[2] = (RM_U8)((PropName >> 8) & 0xff);
GetPropArray[3] = (RM_U8)(PropName & 0xff);
Status = OpRadioModule(WriteOp,GetPropArray,4);
if(Status != OK)
return Status;
Status = Wait_CTS_High(Get_Prop);
if(Status != OK)
return Status;
//WaitContinue();//only for debug
Status = OpRadioModule(ReadOp,GetPropArray,4);
if(Status != OK)
return Status;
*PropVal = (RM_U16)(((GetPropArray[2] << 8) | GetPropArray[3]) & 0xffff);
return OK;
}
//CMD6 0x14
RM_U8 RadioModule_Get_Int_Status(RM_U8 *IntStatus)
{
RM_U8 Status;
RM_U8 GetIntStatus_cmd;
GetIntStatus_cmd = 0x14;
Status = OpRadioModule(WriteOp,(RM_U8 *)(&GetIntStatus_cmd),1);
if(Status != OK)
return Status;
Status = Wait_CTS_High(Get_Int_Status);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,IntStatus,1);
return Status;
}
//CMD7 0x20
RM_U8 RadioModule_FM_Tune_Freq(RM_U16 FMFreqVal,RM_U8 ANTCAP)
{
RM_U8 Status;
RM_U8 FMTuneFreqArray[5];
FMTuneFreqArray[0] = 0x20;
FMTuneFreqArray[1] = 0x00;
FMTuneFreqArray[2] = (RM_U8)((FMFreqVal >> 8) & 0xff);
FMTuneFreqArray[3] = (RM_U8)(FMFreqVal & 0xff);
FMTuneFreqArray[4] = ANTCAP;
Status = OpRadioModule(WriteOp,FMTuneFreqArray,5);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_Tune_Freq);
return Status;
}
//CMD8 0x21
RM_U8 RadioModule_FM_Seek_Start(RM_U8 SeekMode)
{
RM_U8 Status; //SeekUp_Halt
RM_U8 FMSeekStartArray[2]; //SeekUp_Wrap
//SeekDn_Halt
FMSeekStartArray[0] = 0x21; //SeekDn_Wrap
FMSeekStartArray[1] = SeekMode;
Status = OpRadioModule(WriteOp,FMSeekStartArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_Seek_Start);
return Status;
}
//CMD9 0x22
RM_U8 RadioModule_FM_Tune_Status(RM_U8 SetTuneStatus)
{
RM_U8 Status; //Clr_Seek_Tune_Int
RM_U8 FMTuneStatusArray[2]; //Cancel_Seek
FMTuneStatusArray[0] = 0x22;
FMTuneStatusArray[1] = SetTuneStatus;
Status = OpRadioModule(WriteOp,FMTuneStatusArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_Tune_Status);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,(RM_U8 *)(&FmTuneStatusInfo),8);
if(Status != OK)
return Status;
return OK;
}
//CMD10 0x23
RM_U8 RadioModule_FM_RSQ_Status(RM_U8 ClrRSQInt)
{
RM_U8 Status; //Get_RSQ_Status
RM_U8 FMRSQStatusArray[2]; //Clr_RSQ_Int
FMRSQStatusArray[0] = 0x23;
FMRSQStatusArray[1] = ClrRSQInt;
Status = OpRadioModule(WriteOp,FMRSQStatusArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_RSQ_Status);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,(RM_U8 *)(&FmRSQStatusInfo),8);
if(Status != OK)
return Status;
return OK;
}
//CMD11 0x24
RM_U8 RadioModule_FM_RDS_Status(RM_U8 GetRDSStatus)
{
RM_U8 Status; //FM_RDS_Status_Only
RM_U8 FMRDSStatusArray[2]; //FM_Empty_RDS_FIFO
//FM_Clr_RDS_Int
FMRDSStatusArray[0] = 0x24;
FMRDSStatusArray[1] = GetRDSStatus;
Status = OpRadioModule(WriteOp,FMRDSStatusArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_RSQ_Status);
if(Status != OK)
return Status;
if(GetRDSStatus == FM_RDS_Status_Only)
{
Status = OpRadioModule(ReadOp,(RM_U8 *)(&FmRDSStatusInfo),13);
if(Status != OK)
return Status;
}
return OK;
}
//CMD12 0x27
RM_U8 RadioModule_FM_AGC_Status(void)
{
RM_U8 Status;
RM_U8 FMAGCStatusCMD;
FMAGCStatusCMD = 0x27;
Status = OpRadioModule(WriteOp,(RM_U8 *)(&FMAGCStatusCMD),1);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_AGC_Status);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,(RM_U8 *)(&FMAGCStatusInfo),3);
if(Status != OK)
return Status;
return OK;
}
//CMD13 0x28
RM_U8 RadioModule_FM_AGC_Override(RM_U8 AGC_Dis,RM_U8 LNA_Gain_Index)
{
RM_U8 Status;
RM_U8 FMAGCOverrideArray[3];
FMAGCOverrideArray[0] = 0x28;
FMAGCOverrideArray[1] = (AGC_Dis & 0x01);
if(LNA_Gain_Index > 0x1a)
FMAGCOverrideArray[2] = 0x1a;
else
FMAGCOverrideArray[2] = LNA_Gain_Index;
Status = OpRadioModule(WriteOp,(RM_U8 *)(&FMAGCOverrideArray),1);
if(Status != OK)
return Status;
Status = Wait_CTS_High(FM_AGC_Override);
return Status;
}
//CMD14 0x40
RM_U8 RadioModule_AM_Tune_Freq(RM_U16 AMFreqVal,RM_U16 ANTCAP)
{
RM_U8 Status;
RM_U8 AMTuneFreqArray[6];
AMTuneFreqArray[0] = 0x40;
AMTuneFreqArray[1] = 0x00;
AMTuneFreqArray[2] = (RM_U8)((AMFreqVal >> 8) & 0xff);
AMTuneFreqArray[3] = (RM_U8)(AMFreqVal & 0xff);
AMTuneFreqArray[4] = (RM_U8)((ANTCAP >> 8) & 0xff);
AMTuneFreqArray[5] = (RM_U8)(ANTCAP & 0xff);
Status = OpRadioModule(WriteOp,AMTuneFreqArray,6);
if(Status != OK)
return Status;
Status = Wait_CTS_High(AM_Ture_Freq);
return Status;
}
//CMD15 0x41
RM_U8 RadioModule_AM_Seek_Start(RM_U8 SeekMode)
{
RM_U8 Status; //SeekUp_Wrap
RM_U8 AMSeekStartArray[2]; //SeekUp_Halt
//SeekDn_Wrap
AMSeekStartArray[0] = 0x41; //SeekDn_Halt
AMSeekStartArray[1] = SeekMode;
Status = OpRadioModule(WriteOp,AMSeekStartArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(AM_Seek_Start);
return Status;
}
//CMD16 0x42
RM_U8 RadioModule_AM_Tune_Status(RM_U8 SetTuneStatus)
{
RM_U8 Status; //Cancel_Seek
RM_U8 AMTuneStatusArray[2]; //Clr_Seek_Tune_Int
AMTuneStatusArray[0] = 0x42;
AMTuneStatusArray[1] = SetTuneStatus;
Status = OpRadioModule(WriteOp,AMTuneStatusArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(AM_Tune_Status);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,(RM_U8 *)(&AmTuneStatusInfo),8);
if(Status != OK)
return Status;
return OK;
}
//CMD17 0x43
RM_U8 RadioModule_AM_RSQ_Status(RM_U8 ClrRSQInt)
{
RM_U8 Status;
RM_U8 AMRDSStatusArray[2];
AMRDSStatusArray[0] = 0x43;
AMRDSStatusArray[1] = ClrRSQInt & 0x01;
Status = OpRadioModule(WriteOp,AMRDSStatusArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(AM_RSQ_Status);
if(Status != OK)
return Status;
Status = OpRadioModule(ReadOp,(RM_U8 *)(&AmRSQStatusInfo),6);
if(Status != OK)
return Status;
return OK;
}
//CMD18 0x80
RM_U8 RadioModule_GPO_CTL(RM_U8 Mode)
{
RM_U8 Status;
RM_U8 GPOCTLArray[2];
GPOCTLArray[0] = 0x80;
GPOCTLArray[1] = Mode & 0x0e;
Status = OpRadioModule(WriteOp,GPOCTLArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(AM_Seek_Start);
return Status;
}
//CMD19 0x81
RM_U8 RadioModule_GPO_SET(RM_U8 Level)
{
RM_U8 Status;
RM_U8 GPOLevelArray[2];
GPOLevelArray[0] = 0x81;
GPOLevelArray[1] = Level & 0x0e;
Status = OpRadioModule(WriteOp,GPOLevelArray,2);
if(Status != OK)
return Status;
Status = Wait_CTS_High(AM_Seek_Start);
return Status;
}
RM_U8 Wait_CTS_High(RM_U8 CMD)
{
RM_U16 Loop;
RM_U8 Status;
RM_U8 CTS_Status;
Loop = 0;
do
{
Status = OpRadioModule(ReadOp,(RM_U8 *)(&CTS_Status),1);
if(Status != OK)
return Status;
Loop++;
}
while(((CTS_Status & 0x80) != 0x80) && (Loop<0xfff));
//printf("Status = 0x%.2x , CTS_Status = 0x%.2x\n",Status,CTS_Status);
if(Loop>=0xfff)
{
#ifdef Radio_Module_Console_Debug
switch(CMD)
{
case Power_Up: puts("CMD Power_Up wait CTS to high EXP loop times limit!\n");break;
case Get_Rev: puts("CMD Get_Rev wait CTS to high EXP loop times limit!\n");break;
case Power_Down: puts("CMD Power_Down wait CTS to high EXP loop times limit!\n");break;
case Set_Prop: puts("CMD Set_Prop wait CTS to high EXP loop times limit!\n");break;
case Get_Prop: puts("CMD Get_Prop wait CTS to high EXP loop times limit!\n");break;
case Get_Int_Status: puts("CMD Get_Int_Status wait CTS to high EXP loop times limit!\n");break;
case FM_Tune_Freq: puts("CMD FM_Tune_Freq wait CTS to high EXP loop times limit!\n");break;
case FM_Seek_Start: puts("CMD FM_Seek_Start wait CTS to high EXP loop times limit!\n");break;
case FM_Tune_Status: puts("CMD FM_Tune_Status wait CTS to high EXP loop times limit!\n");break;
case FM_RSQ_Status: puts("CMD FM_RSQ_Status wait CTS to high EXP loop times limit!\n");break;
case FM_RDS_Status: puts("CMD FM_RDS_Status wait CTS to high EXP loop times limit!\n");break;
case FM_AGC_Status: puts("CMD FM_AGC_Status wait CTS to high EXP loop times limit!\n");break;
case FM_AGC_Override: puts("CMD FM_AGC_Override wait CTS to high EXP loop times limit!\n");break;
case AM_Ture_Freq: puts("CMD AM_Ture_Freq wait CTS to high EXP loop times limit!\n");break;
case AM_Seek_Start: puts("CMD AM_Seek_Start wait CTS to high EXP loop times limit!\n");break;
case AM_Tune_Status: puts("CMD AM_Tune_Status wait CTS to high EXP loop times limit!\n");break;
case AM_RSQ_Status: puts("CMD AM_RSQ_Status wait CTS to high EXP loop times limit!\n");break;
case GPO_CTL: puts("CMD GPO_CTL wait CTS to high EXP loop times limit!\n");break;
case GPO_SET: puts("CMD GPO_SET wait CTS to high EXP loop times limit!\n");break;
default:break;
}
#endif
return LoopEXPLimit;
}
return OK;
}
//only for debug
#ifdef Radio_Module_Console_Debug
void WaitContinue(void)
{
RM_S8 key;
puts("press c to continue!\n");
for(;;)
{
if(kbhit())
{
key = getkey();
if(key=='c'||key=='C')
return;
}
}
}
#endif
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -