#include "config.h"
#include "QN8035_DRV\QN8035_DRV.h"
u8 QN8035_ReadReg(u8 adr);
u8 QN8035_WriteReg(u8 adr, u8 value);
#define R_TXRX_MASK 0x30
u8 QN8035_RSSIns = 255;
u8 QN8035_Crystal = QN8035_CRYSTAL_DEFAULT;
u8 QN8035_RSSIn[QN8035_BAND_NUM];
u8 QN8035_PrevMode;
u8 QN8035_Country = COUNTRY_CHINA ;
u16 QN8035_CH_START = 7600;
u16 QN8035_CH_STOP = 10800;
u8 QN8035_CH_STEP = 1;
u8 QN8035_ClearScanFlag = 0;
u16 QN8035_ClearChannel = 0;
u8 QN8035_FirstScan = 1;
u8 QN8035_AutoScanAll;
u8 QN8035_IsStereo;
u8 QN8035_ChCount;
u16 QN8035_RSSInBB[QN8035_BAND_NUM+1];
u16 QN8035_ChList[QN_CCA_MAX_CH];
u8 QN8035_StepTbl[3]={5,10,20};
QN8035_SeekCallBack QN8035_CallBackFunc = 0;
/**********************************************************************
void QNF_RXInit()
**********************************************************************
Description: set to SNR based MPX control. Call this function before
tune to one specific channel
Parameters:
None
Return Value:
None
**********************************************************************/
void QNF_RXInit()
{
QNF_SetRegBit(0x1B,0x08,0x00); //Let NFILT adjust freely
QNF_SetRegBit(0x2C,0x3F,0x09); //When SNR<ccth31, ccfilt3 will work
QNF_SetRegBit(0x1D,0x40,0x00); //Let ccfilter3 adjust freely
QNF_SetRegBit(0x41,0x0F,0x0A); //Set a hcc index to trig ccfilter3's adjust
QN8035_WriteReg(0x45,0x20); //Set aud_thrd will affect ccfilter3's tap number
QNF_SetRegBit(0x40,0x70,0x70); //snc/hcc/sm snr_rssi_sel; snc_start=40; hcc_start=22; sm_start=20
QNF_SetRegBit(0x19,0x80,0x80); //Use SNR for ccfilter selection criterion
QNF_SetRegBit(0x3E,0x80,0x80); //it is decided by programming this register
QNF_SetRegBit(0x41,0xE0,0xA0); //DC notching High pass filter bandwidth; remove low freqency dc signals
QNF_SetRegBit(0x42,0x10,0x10); //disable the vtune monitor
QNF_SetRegBit(0x34, 0x7F,SMSTART_VAL); //set SNCSTART
// QNF_SetRegBit(0x35,0x7F,SNCSTART_VAL); //set SNCSTART
// QNF_SetRegBit(0x36,0x7F,HCCSTART_VAL); //set HCCSTART
QNF_SetRegBit(0x35,0x7F,60); //Change SNCSTART=60,the past SNCSTART=40
QNF_SetRegBit(0x36,0x7F,36); //Change HCCSTART=36,the past HCCSTART=22
}
/**********************************************************************
void QNF_SetMute(u8 On)
**********************************************************************
Description: set register specified bit
Parameters:
On: 1: mute, 0: unmute
Return Value:
None
**********************************************************************/
void QNF_SetMute(u8 On)
{
if(On)
{
QNF_SetRegBit(0x4C, 0x0B, 0x0B);
}
else
{
QN8035_Delay(QN8035_DELAY_BEFORE_UNMUTE);
QNF_SetRegBit(0x4C, 0x0B, 0x00);
}
}
/**********************************************************************
void QNF_SetRegBit(u8 reg, u8 bitMask, u8 data_val)
**********************************************************************
Description: set register specified bit
Parameters:
reg: register that will be set
bitMask: mask specified bit of register
data_val: data will be set for specified bit
Return Value:
None
**********************************************************************/
void QNF_SetRegBit(u8 reg, u8 bitMask, u8 data_val)
{
u8 temp;
temp = QN8035_ReadReg(reg);
temp &= (u8)(~bitMask);
temp |= data_val & bitMask;
// temp |= data_val;
QN8035_WriteReg(reg, temp);
}
/**********************************************************************
void QNF_InitRSSInBB()
**********************************************************************
Description: init RSSI noise floor band
Parameters:
None
Return Value:
None
**********************************************************************/
void QNF_InitRSSInBB()
{
u8 i,d2,d,step;
u16 d1;
// get frequency leap step
step = QN8035_StepTbl[QN8035_CH_STEP];
// total frequency span
d1 = QN8035_CH_STOP - QN8035_CH_START;
// make sure d2 value <= 255, normally QN8035_BAND_NUM should < 10
d2 = step * QN8035_BAND_NUM;
d = d1/d2;
// first one should be CH_START
QN8035_RSSInBB[0] = QN8035_CH_START;
for(i=1; i<QN8035_BAND_NUM; i++) {
QN8035_RSSInBB[i] = QN8035_RSSInBB[i-1] + d * step;
}
// last one set one more step higher for convenience
QN8035_RSSInBB[i] = QN8035_CH_STOP+step;
}
/**********************************************************************
u8 QNF_GetRSSInBandIndex(u16 chfreq)
**********************************************************************
Description: get band index
Parameters:
chfreq: channel frequency (10Khz unit, eg: for 101.10Mhz, input 10110)
Return Value: band index for input CH frequency
**********************************************************************/
u8 QNF_GetRSSInBandIndex(u16 chfreq)
{
u8 i;
for(i=0; i<QN8035_BAND_NUM; i++)
{
if(chfreq < QN8035_RSSInBB[i+1])
{
return i;
}
}
}
/**********************************************************************
u8 QNF_GetRSSIn(u16 chFreq)
**********************************************************************
Description: get RSSI noise floor
Parameters:
chfreq: channel frequency (10Khz unit, eg: for 101.10Mhz, input 10110)
Return Value:
the RSSI noise floor
**********************************************************************/
u8 QNF_GetRSSIn(u16 chFreq)
{
u8 idx;
idx = QNF_GetRSSInBandIndex(chFreq);
return QN8035_RSSIn[idx];
}
/**********************************************************************
u16 QNF_GetCh()
**********************************************************************
Description: get current channel frequency
Parameters:
None
Return Value:
channel frequency
**********************************************************************/
u16 QNF_GetCh()
{
u8 tCh;
u8 tStep;
u16 ch = 0;
// set to reg: CH_STEP
tStep = QN8035_ReadReg(CH_STEP);
tStep &= CH_CH;
ch = tStep ;
tCh= QN8035_ReadReg(CH);
ch = (ch<<8)+tCh;
return CHREG2FREQ(ch);
}
/**********************************************************************
u8 QNF_SetCh(u16 freq)
**********************************************************************
Description: set channel frequency
Parameters:
freq: channel frequency to be set
Return Value:
1: success
**********************************************************************/
u8 QNF_SetCh(u16 freq)
{
// calculate ch parameter used for register setting
u8 tStep;
u8 tCh;
u16 f;
f = FREQ2CHREG(freq);
// set to reg: CH
tCh = (u8) f;
QN8035_WriteReg(CH, tCh);
// set to reg: CH_STEP
tStep = QN8035_ReadReg(CH_STEP);
tStep &= ~CH_CH;
tStep |= ((u8) (f >> 8) & CH_CH);
QN8035_WriteReg(CH_STEP, tStep);
return 1;
}
/**********************************************************************
void QNF_ConfigScan(u16 start,u16 stop, u8 step)
**********************************************************************
Description: config start, stop, step register for FM/AM CCA or CCS
Parameters:
start
Set the frequency (10kHz) where scan to be started,
eg: 7600 for 76.00MHz.
stop
Set the frequency (10kHz) where scan to be stopped,
eg: 10800 for 108.00MHz
step
1: set leap step to (FM)100kHz / 10kHz(AM)
2: set leap step to (FM)200kHz / 1kHz(AM)
0: set leap step to (FM)50kHz / 9kHz(AM)
Return Value:
None
**********************************************************************/
void QNF_ConfigScan(u16 start,u16 stop, u8 step)
{
// calculate ch para
u8 tStep = 0;
u8 tS;
u16

五星资源
- 粉丝: 7302
最新资源
- 科技管理系统如何借助AI+数智应用突破“仅管理、无服务”的局限?.docx
- 科技管理系统如何借助AI+数智应用突破传统,实现高效管理与创新服务?.docx
- 企业科技创新服务平台如何通过AI+数智应用保障服务质量与专业性?.docx
- 全流程创新服务如何通过AI+数智应用为科技管理工作创造深层次价值?.docx
- 如何借助AI+数智应用应对技术转移机构面临的市场竞争加剧和营收困难?.docx
- 怎样的AI+数智应用创新管理系统能真正提升科技管理效率与价值创造?.docx
- 斩波稳定型全差分可编程增益放大电路的设计.caj
- 智能电网下双馈风机并网的LADRC电流环控制技术解析
- springboot-付费问答系统的设计与实现(源码+sql脚本).zip
- 对应插件v1.1.zip
- 成果转化智能体:重塑技术价值实现的生态协同机制.docx
- 高校成果转化生态赋能新范式.docx
- 高校科技成果转化数智服务平台:生态赋能型创新报告.docx
- 高校院所科技成果转化数智服务平台:构建生态价值网络的新范式.docx
- 高校院所科技成果转化数智服务平台:构建产学研协同新生态.docx
- 高校院所科技成果转化数智服务平台:构建生态协同新范式.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


