// 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; }
// 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; }
// 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; }
// 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 }