Example #1
0
// Obtain interface specific PLL settings and rate mode estimate
void dalAESPllSettings (uint32 aesID, DAL_RX_PLL_DATA * pPllData)
{
	uint32 refHz = pPllData->ref8Hz;
	RATE_DESC * pRate;
	
	
	if (pPllData->rateMode == eDAL_RATE_MODE_HIGH)
	{
	  if (dualWire)
		refHz <<= 1; //in high mode system runs half speed
	}
	// convert to Hz
	refHz >>= 3; // divide by 8
	//now find the nearest ID in the table
	pRate = dalRateFindNearest (&pPllData->rateID, refHz);
	
	pPllData->rateHZ = refHz;
	//if we didn't find any match, return (rateID is set to none)
	if (!pRate) return;
	
	//calculate the predivider to make the reference base rate
	if (pRate->rateMode == eDAL_RATE_MODE_LOW)
		pPllData->preDiv = 1;
	else if (pRate->rateMode == eDAL_RATE_MODE_MID)
		pPllData->preDiv = 2;
	else if (dualWire)
		pPllData->preDiv = 2;
	else
	    pPllData->preDiv = 4;
	
	//no additional feedback divider needed
	pPllData->addDiv = 1;	
}
Example #2
0
// Obtain interface specific PLL settings and rate mode estimate
// The WC carrier can either be base rate or actual rate
static void dalPllSettings (DAL_RX_PLL_DATA * pPllData, DAL_WCIN_ENUM mode)
{
	uint32 refHz = pPllData->ref8Hz;
	RATE_DESC * pRate;
	uint8	shift=0;
	
	if (mode == eDAL_WCIN_BASE_RATE)
	{
		if (pPllData->rateMode == eDAL_RATE_MODE_MID)
			shift = 1;
		else if (pPllData->rateMode == eDAL_RATE_MODE_HIGH)
			shift = 2;
	} 
	else if (mode == eDAL_WCIN_2XBASE_RATE)
	{
		if (pPllData->rateMode == eDAL_RATE_MODE_HIGH)
			shift = 1; //so a 96kHz would be seen as 192k
	}
	
	refHz <<= shift;
	// convert to Hz
	refHz >>= 3; // divide by 8
	//now find the nearest ID in the table
	pRate = dalRateFindNearest (&pPllData->rateID, refHz);
	
	pPllData->rateHZ = refHz;
	//if we didn't find any match, return (rateID is set to none)
	if (!pRate) return;
	
	if (mode == eDAL_WCIN_ACTUAL_RATE)
	{
		if (pRate->rateMode == eDAL_RATE_MODE_LOW)
			pPllData->preDiv = 1;
		else if (pRate->rateMode == eDAL_RATE_MODE_MID)
			pPllData->preDiv = 2;
		else
			pPllData->preDiv = 4;
	} 
	else if (mode == eDAL_WCIN_2XBASE_RATE)
	{
		if (pPllData->rateMode == eDAL_RATE_MODE_HIGH)
			pPllData->preDiv = 2;
		else
		  pPllData->preDiv = 1;
	}	
	else
	{
		pPllData->preDiv = 1;
	}
	//no additional feedback divider needed
	pPllData->addDiv = 1;	
}
Example #3
0
// Obtain interface specific PLL settings and rate mode estimate
// The ADAT carrier will always run at base rate.
void dalADATPllSettings (uint32 data, DAL_RX_PLL_DATA * pPllData)
{
	uint32 refHz = pPllData->ref8Hz;
	RATE_DESC * pRate;
	uint8	userBits, shift=0;
	
	if (adatMode == eDAL_ADAT_SMUX_FORCE)
	{
		if (adatUserSel) shift = 1; //SMUX enabled by application
	}
	else
	{
		if (pPllData->rateMode == eDAL_RATE_MODE_MID)
			shift = 1; //assume SMUX
		else if (pPllData->rateMode == eDAL_RATE_MODE_HIGH)
			shift = 2; //assume SMUX 192
		else if (pPllData->rateMode == eDAL_RATE_MODE_LOW_MID)
		{
			if (adatUserSel) 
				shift = 1; //SMUX enabled by application
			else if (adatMode == eDAL_ADAT_SMUX_NORMAL)
			{
				adatRxGetUserData(0,&userBits);
				if (userBits & ADAT_SMUX_USER_MASK) shift = 1; //SMUX enabled by user bit
			}				
		}
	}
	refHz <<= shift;
	// convert to Hz
	refHz >>= 3; // divide by 8
	//now find the nearest ID in the table
	pRate = dalRateFindNearest (&pPllData->rateID, refHz);
	
	pPllData->rateHZ = refHz;
	//if we didn't find any match, return (rateID is set to none)
	if (!pRate) return;
	
	//ADAT reference is always base rate
	pPllData->preDiv = 1;
	//no additional feedback divider needed
	pPllData->addDiv = 1;	
}
Example #4
0
// Obtain interface specific PLL settings and rate mode estimate
// The AVS carrier will always run at base rate / 8.
void dalAVSPllSettings (uint32 plugID, DAL_RX_PLL_DATA * pPllData)
{
#ifdef _AVS
	uint32 refHz = pPllData->ref8Hz;
	RATE_DESC * pRate;
	uint8	shift=0;
	
	
	if (pPllData->rateMode == eDAL_RATE_MODE_MID)
		shift = 1;
	else if (pPllData->rateMode == eDAL_RATE_MODE_HIGH)
		shift = 2;
	else if (pPllData->rateMode == eDAL_RATE_MODE_LOW_MID)
	{
		uint32 sfc;
		
		sfc = avsAudioRxGetReceivedSFC (plugID);
		if (sfc > AVS_SFC_96_KHZ)
			shift = 2;
		else if (sfc > AVS_SFC_48_KHZ)
			shift = 1;
	}
	refHz <<= shift;
	
	// convert to Hz
	// no need to do anything, should divide by 8 to get Hz	and
	// multiply by 8 to get base rate.

	//now find the nearest ID in the table
	pRate = dalRateFindNearest (&pPllData->rateID, refHz);
	
	pPllData->rateHZ = refHz;
	//if we didn't find any match, return (rateID is set to none)
	if (!pRate) return;
	
	//AVS reference is always base rate / 8
	pPllData->preDiv = 1;
	pPllData->addDiv = 8;
#endif
}