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

📄 ns_main.c

📁 NS954X tuner solution source code with RDS function
💻 C
字号:
#include "ns954lib.h"
#include "ns_main.h"
#include "host.h"


//-----------------------------------------------------------------------------
// Band Frequency table
//-----------------------------------------------------------------------------
XDATA StFreqTable g_FreqTbl[] = {
	{ 8750, 8750,10800, 5, BAND_FM,    "FM-EU" }, 
	{ 8750, 8750,10810,20, BAND_FM,    "FM-US" }, 
	{ 8700, 8700,10800,10, BAND_FM,    "FM-AS" }, 
	{ 7600, 7600,10800,10, BAND_FM,    "FM-JP" }, 
	{ 8750, 8750,10800, 5, BAND_FM,    "FM-EE" }, 

	{  522,  522, 1620, 9, BAND_AM9k,  "AM-EU" }, 
	{  520,  520, 1720,10, BAND_AM10k, "AM-US" }, 
	{  522,  522, 1611, 9, BAND_AM9k,  "AM-AS" }, 
	{  522,  522, 1629, 9, BAND_AM9k,  "AM-JP" }, 
	{  522,  522, 1620, 9, BAND_AM9k,  "AM-EE" }, 
};

XDATA StFreqTable* g_pFreqTbl = g_FreqTbl;

//=============================================================================
// Compare String
//-----------------------------------------------------------------------------
// Parameter(s)
//  pStr0 : String 0
//  pStr1 : String 1
//-----------------------------------------------------------------------------
// Return Value
//  0 : no match
//  1 : match
//=============================================================================
u8 StrComp(const char* pStr0,const char* pStr1)
{
	u8 i;
	for(i=0;i<16;i++){
		if(pStr0[i]==0 && pStr0[i]==0) {
			return 1;
		}
		if(pStr0[i]==0 || pStr1[i]==0 || pStr0[i]!=pStr1[i]){
			return 0;
		}
    }
	return 0;
}

//=============================================================================
// Find Frequency Table
//-----------------------------------------------------------------------------
// Parameter(s)
//  pBandName  : Name Of Band
//-----------------------------------------------------------------------------
// Return Value
//  0     : can't find Table
//  non 0 : find Table !
//=============================================================================
StFreqTable* FindFreqTable(const char* pBandName)
{
	u8 i;
	for(i=0;i<numof(g_FreqTbl);i++){
		if(StrComp(g_FreqTbl[i].pName,pBandName)){
			return &g_FreqTbl[i];
		}
	}
	return 0;
}


//=============================================================================
// Frequency calculate sample
//-----------------------------------------------------------------------------
// Parameter(s)
//  pTbl  : Frequency Table Pointer
//  stp   : step count
//-----------------------------------------------------------------------------
// Return Value
//  1 : band changed !
//  0 : not band changed
//=============================================================================
u8 freq_calc(StFreqTable* pTbl,s8 stp)
{
	if(stp==0){
		return 0;
	}

	pTbl->frq += ((s16)stp)*pTbl->stp;


	if(pTbl->frq > pTbl->max){ pTbl->frq = pTbl->min; }
	if(pTbl->frq < pTbl->min){ pTbl->frq = pTbl->max; }

	return 0;
}

//=============================================================================
// Seek end check
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  0 : seek continue
//  1 : seek timeout
//=============================================================================
u8 ns_seek_endcheck(void)
{
	return 0;
}

//=============================================================================
// Seek Sample
//-----------------------------------------------------------------------------
// Parameter(s)
//  nStep : -1 (1 step seek down),
//          -2 (2 step seek down), 
//          +1 (1 step seek up)
//          +2 (2 step seek up)
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void ns_seek_work(s8 nStep)
{
	u8  band = host_Read(0x00)>>4;

	ns_reg_mute(1);

		if(ns_seek_check(band,g_pFreqTbl->frq)){
			break;
		}
	}

	ns_reg_mute(0);
}


//-----------------------------------------------------------------------------
// how to use sample source code
//-----------------------------------------------------------------------------
#if 0
//=============================================================================
// PowerON and set FM 108.00(MHz) and checking Some state
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void sample_power_on_fm(void)
{
	u16 st;
	u8  rssi;

	ns_power_on();
	ns_dsp_alignment();
	ns_band(BAND_FM);
	ns_freq(10800);
	ns_reg_mute(0);

	ns_rds_work(RDS_START);  // RDS Receive Start 

	while(1){
		st = ns_get_state();

		if(st & NS_STATE_STEREO) {
			// now Receiving STEREO!!
		}

		// Get RSSI level
		rssi = ns_get_rssi();

		// Check RDS data
		if(host_get_rdsint()){
			ns_rds_work(RDS_WORK);
		}
	}
}

//=============================================================================
// PowerON and set AM 999(KHz) and checking Some state
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void sample_power_on_am(void)
{
	u16 st;
	u8  rssi;

	ns_power_on();
	ns_dsp_alignment();
	ns_band(BAND_AM);
	ns_freq(999);
	ns_reg_mute(0);

	ns_rds_work(RDS_START);

	while(1){
		st = ns_get_state();
		// Get RSSI level
		rssi = ns_get_rssi();
	}
}

//=============================================================================
// change band and freq (AM)
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void change_am_and_freq(void)
{
	ns_reg_mute(1);
	ns_band(BAND_AM); // Set to AM BAND
	ns_freq(999);     // 999(KHz)
	ns_reg_mute(0);
}

//=============================================================================
// change band and freq (FM)
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void change_fm_and_freq(void)
{
	ns_reg_mute(1);
	ns_band(BAND_FM); // Set to FM Band
	ns_freq(8750);    // 87.5(MHz
	ns_reg_mute(0);
}

//=============================================================================
// FM Seek
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void sample_fm_seek_count_up(void)
{
	g_pFreqTbl = FindFreqTable("FM-EU");
	g_pFreqTbl->frq = 7600;

	ns_power_on();
	ns_dsp_alignment();
	ns_band(g_pFreqTbl->band);
	ns_freq(g_pFreqTbl->frq);
	if(1) ns_seek_work(+1); // if you want to up seek
	else  ns_seek_work(-1); // if you want to down seek
}

//=============================================================================
// AM Seek
//-----------------------------------------------------------------------------
// Parameter(s)
//  none
//-----------------------------------------------------------------------------
// Return Value
//  none
//=============================================================================
void sample_am_seek_count_down(void)
{
	g_pFreqTbl = FindFreqTable("AM-EU");
	g_pFreqTbl->frq = 999;

	ns_power_on();
	ns_dsp_alignment();
	ns_band(g_pFreqTbl->band);
	ns_freq(g_pFreqTbl->frq);
	if(1) ns_seek_work(+1); // if you want to up seek
	else  ns_seek_work(-1); // if you want to down seek
}

#endif

⌨️ 快捷键说明

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