?? zl5011xtif.c
字號(hào):
Outputs:
None
Returns:
zlStatusE
Remarks:
Does not reset the Lock status. To do this call zl5011xTifBerDisableReceiver
followed by zl5011xTifBerConfigureReceiver
*******************************************************************************/
zlStatusE zl5011xTifBerResetReceiver(zl5011xParamsS *zl5011xParams)
{
zlStatusE status = ZL5011X_OK;
ZL5011X_TRACE(ZL5011X_TIF_FN_ID,
"zl5011xTifBerResetReceiver:",
0, 0, 0, 0, 0, 0);
/* toggle the bits 0 to 1 to reset the receiver */
status = zl5011xReadModWrite(zl5011xParams, ZL5011X_TIF_BER_RX_REG,
0,
ZL5011X_1BIT_MASK << ZL5011X_TIF_BER_RESET_BIT);
if (status == ZL5011X_OK)
{
status = zl5011xReadModWrite(zl5011xParams, ZL5011X_TIF_BER_RX_REG,
ZL5011X_1BIT_MASK << ZL5011X_TIF_BER_RESET_BIT,
ZL5011X_1BIT_MASK << ZL5011X_TIF_BER_RESET_BIT);
}
return(status);
}
/*******************************************************************************
Function:
zl5011xTifBerGetStatsReceiver
Description:
Used to get the BER receiver status
Inputs:
zl5011xParams Pointer to the structure for this device instance
Outputs:
lock set to ZL5011X_TRUE when BER is locked, ZL5011X_FALSE otherwise
errorCount returns the current error count
Returns:
zlStatusE
Remarks:
None
*******************************************************************************/
zlStatusE zl5011xTifBerGetStatsReceiver(zl5011xParamsS *zl5011xParams,
zl5011xBooleanE *lock, Uint16T *errorCount)
{
Uint32T readValue;
zlStatusE status = ZL5011X_OK;
ZL5011X_TRACE(ZL5011X_TIF_FN_ID,
"zl5011xTifBerGetStatsReceiver:",
0, 0, 0, 0, 0, 0);
/* set the enable bit to 0 to reset the receiver */
status = zl5011xRead(zl5011xParams, ZL5011X_TIF_BER_STATUS_REG,
&readValue);
if ((readValue & (ZL5011X_1BIT_MASK << ZL5011X_TIF_BER_LOCK_BIT)) != 0)
{
*lock = ZL5011X_TRUE;
}
else
{
*lock = ZL5011X_FALSE;
}
*errorCount = (Uint16T)((readValue >> ZL5011X_TIF_BER_ERROR_COUNT_BITS) & ZL5011X_TIF_BER_ERROR_COUNT_MASK);
return(status);
}
/*******************************************************************************
Function:
zl5011xTifSetInterfaceType
Description:
Sets the TIF options to default settings for the required Wan mode.
The clock polarities etc. may be changed later.
Inputs:
zl5011xParams Pointer to the structure for this device instance
wanMode sets the interface mode for the TDM streams
wanLiuFreq the LIU interface speed
wanLiuFreqHz the LIU speed if OTHER is selected by the enum
Outputs:
None
Returns:
zlStatusE
Remarks:
None
*******************************************************************************/
zlStatusE zl5011xTifSetInterfaceType(zl5011xParamsS *zl5011xParams,
zl5011xWanIfTypeE wanMode, zl5011xWanLiuFreqE wanLiuFreqIn, Uint32T wanLiuFreqHz)
{
zl5011xWanIfSamplePointE sample;
zl5011xWanIfFramePulseTypeE framePulseType;
zl5011xPolarityE framePolarity;
zl5011xWanIfClockRateE clkMultiply;
zl5011xWanIfDataRateE dataRate;
zl5011xWanIfConnectionTypeE connectionMode;
zl5011xBooleanE enableBitStuffing;
Uint32T numChannels, numStreams;
zlStatusE status = ZL5011X_OK;
Uint32T freq;
zl5011xWanLiuFreqE wanLiuFreq;
ZL5011X_TRACE(ZL5011X_TIF_FN_ID,
"zl5011xTifSetInterfaceType: mode %d, liu %d, liu Hz %d",
wanMode, wanLiuFreq, wanLiuFreqHz, 0, 0, 0);
if (wanLiuFreqIn == ZL5011X_WAN_LIU_FREQ_OTHER)
{
/* using a freely set frequency to determine the stream clock rate.
So, choose the nearest standard setting so as to determine the
number of allowed streams etc. */
if (wanLiuFreqHz <= (2048000 + 1000000))
{
wanLiuFreq = ZL5011X_WAN_LIU_FREQ_2_048M;
}
else
{
if (wanLiuFreqHz <= (8192000 + 1000000))
{
wanLiuFreq = ZL5011X_WAN_LIU_FREQ_6_312M;
}
else
{
if (wanLiuFreqHz <= (zl5011xParams->systemClockFreq / 2))
{
wanLiuFreq = ZL5011X_WAN_LIU_FREQ_44_736M;
}
else
{
/* stream frequency is too high */
status = ZL5011X_PARAMETER_INVALID;
}
}
}
}
else
{
wanLiuFreq = wanLiuFreqIn;
}
/* translate the LIU rate enum into a number for the bit rate.
Also, set the number of streams to the values for LIU mode */
if (status == ZL5011X_OK)
{
switch (wanLiuFreq)
{
case ZL5011X_WAN_LIU_FREQ_1_544M :
dataRate = ZL5011X_WAN_DATA_RATE_1_544M;
freq = 1544000;
numStreams = zl5011xParams->devLimits.wanNumStreamsDS1;
break;
case ZL5011X_WAN_LIU_FREQ_2_048M :
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
freq = 2048000;
numStreams = zl5011xParams->devLimits.wanNumStreamsE1;
break;
case ZL5011X_WAN_LIU_FREQ_6_312M :
dataRate = ZL5011X_WAN_DATA_RATE_6_312M;
freq = 6312000;
numStreams = zl5011xParams->devLimits.wanNumStreamsJ2;
break;
case ZL5011X_WAN_LIU_FREQ_34_368M :
dataRate = ZL5011X_WAN_DATA_RATE_34_368M;
freq = 34368000;
numStreams = zl5011xParams->devLimits.wanNumStreamsE3;
break;
case ZL5011X_WAN_LIU_FREQ_44_736M :
dataRate = ZL5011X_WAN_DATA_RATE_44_736M;
freq = 44736000;
numStreams = zl5011xParams->devLimits.wanNumStreamsDS3;
break;
case ZL5011X_WAN_LIU_FREQ_OTHER :
default:
dataRate = 0;
freq = 0;
numStreams = 0;
status = ZL5011X_PARAMETER_INVALID;
}
}
if (status == ZL5011X_OK)
{
if (zl5011xParams->devLimits.cesAvailable == ZL5011X_FALSE)
{
/* non CES part, so the stream number limit is actually the maximum number of streams */
numStreams = zl5011xParams->devLimits.wanNumStreamsE1;
/* also need to set the data rate correspondingly */
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
}
}
if (status == ZL5011X_OK)
{
if (wanLiuFreqIn == ZL5011X_WAN_LIU_FREQ_OTHER)
{
freq = wanLiuFreqHz;
}
connectionMode = ZL5011X_WAN_CONNECTION_FRAMED_CLK_SLAVE;
sample = ZL5011X_WAN_SAMPLE_HALF_BIT;
clkMultiply = ZL5011X_WAN_CLK_DATA_RATE;
framePulseType = ZL5011X_WAN_FRAME_FULL_BIT_ALIGNED;
enableBitStuffing = ZL5011X_FALSE;
framePolarity = ZL5011X_NEGATIVE;
switch (wanMode)
{
case ZL5011X_WAN_UNFRAMED :
numChannels = 1;
connectionMode = ZL5011X_WAN_CONNECTION_UNFRAMED;
/* if in DS1 or J2 mode then use bit stuffing by default */
if ((wanLiuFreq == ZL5011X_WAN_LIU_FREQ_1_544M) ||
(wanLiuFreq == ZL5011X_WAN_LIU_FREQ_6_312M))
{
enableBitStuffing = ZL5011X_TRUE;
}
break;
case ZL5011X_WAN_FRAMED_2M :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed2M;
numChannels = 32;
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
framePolarity = ZL5011X_POSITIVE;
break;
case ZL5011X_WAN_FRAMED_8M :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed8M;
numChannels = 128;
dataRate = ZL5011X_WAN_DATA_RATE_8_192M;
framePolarity = ZL5011X_POSITIVE;
break;
case ZL5011X_WAN_STBUS_2M_X1_CLOCK:
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed2M;
numChannels = 32;
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
framePulseType = ZL5011X_WAN_FRAME_HALF_BIT;
break;
case ZL5011X_WAN_STBUS_2M_X2_CLOCK:
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed2M;
numChannels = 32;
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
framePulseType = ZL5011X_WAN_FRAME_HALF_BIT;
clkMultiply = ZL5011X_WAN_CLK_DATA_RATE_X_2;
break;
case ZL5011X_WAN_STBUS_8M :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed8M;
numChannels = 128;
dataRate = ZL5011X_WAN_DATA_RATE_8_192M;
framePulseType = ZL5011X_WAN_FRAME_HALF_BIT;
clkMultiply = ZL5011X_WAN_CLK_DATA_RATE_X_2;
break;
case ZL5011X_WAN_MVIP_2M_X1_CLOCK :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed2M;
numChannels = 32;
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
framePulseType = ZL5011X_WAN_FRAME_FULL_BIT_CENTRED;
break;
case ZL5011X_WAN_MVIP_2M_X2_CLOCK :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed2M;
numChannels = 32;
dataRate = ZL5011X_WAN_DATA_RATE_2_048M;
framePulseType = ZL5011X_WAN_FRAME_FULL_BIT_CENTRED;
clkMultiply = ZL5011X_WAN_CLK_DATA_RATE_X_2;
break;
case ZL5011X_WAN_HMVIP_8M :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed8M;
numChannels = 128;
dataRate = ZL5011X_WAN_DATA_RATE_8_192M;
framePulseType = ZL5011X_WAN_FRAME_2_BITS_CENTRED;
clkMultiply = ZL5011X_WAN_CLK_DATA_RATE_X_2;
break;
case ZL5011X_WAN_H1X0_8M_X1_CLOCK :
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed8M;
numChannels = 128;
dataRate = ZL5011X_WAN_DATA_RATE_8_192M;
framePulseType = ZL5011X_WAN_FRAME_FULL_BIT_CENTRED;
break;
case ZL5011X_WAN_H1X0_8M_X2_CLOCK:
numStreams = zl5011xParams->devLimits.wanNumStreamsFramed8M;
numChannels = 128;
dataRate = ZL5011X_WAN_DATA_RATE_8_192M;
framePulseType = ZL5011X_WAN_FRAME_FULL_BIT_CENTRED;
clkMultiply = ZL5011X_WAN_CLK_DATA_RATE_X_2;
break;
default:
numChannels = 0;
status = ZL5011X_PARAMETER_INVALID;
break;
}
}
if (status == ZL5011X_OK)
{
if (numStreams == 0)
{
status = ZL5011X_INVALID_MODE;
}
else
{
/* update the structure, entries may be needed by following functions */
zl5011xParams->wanIf.wanNumStreams = (Uint8T)numStreams;
zl5011xParams->wanIf.wanNumChannels = (Uint8T)numChannels;
zl5011xParams->wanIf.wanMode = wanMode;
zl5011xParams->wanIf.wanLiuFreq = wanLiuFreq;
zl5011xParams->wanIf.maxWanFrequency = freq;
}
}
if (status == ZL5011X_OK)
{
/* if the interface type is framed, then default the connection mode to
backplane, since in this mode the clock is generated externally.
The correct mode will be setup later when the clocks are configured. */
status = zl5011xTifSetConnectionMode(zl5011xParams, connectionMode);
}
if (status == ZL5011X_OK)
{
status = zl5011xTifSetClockRate(zl5011xParams, clkMultiply);
}
if (status == ZL5011X_OK)
{
status = zl5011xTifSetDataRate(zl5011xParams, dataRate);
}
if (status == ZL5011X_OK)
{
status = zl5011xTifSetDataSampleMode(zl5011xParams, sample);
}
if (status == ZL5011X_OK)
{
status = zl5011xTifSetFramePulseType(zl5011xParams, framePulseType);
}
if (status == ZL5011X_OK)
{
status = zl5011xTifSetFramePolarity(zl5011xParams, framePolarity);
}
if (status == ZL5011X_OK)
{
status = zl5011xTifEnableBitStuffing(zl5011xParams, enableBitStuffing);
}
/* if in framed or backplane mode, then set all of the channel enables to
hi-z */
if (status == ZL5011X_OK)
{
status = zl5011xTifDisableAllChannels(zl5011xParams);
}
/* everything has been setup, so enable the outputs */
if (status == ZL5011X_OK)
{
status = zl5011xTifControlOutputs(zl5011xParams, ZL5011X_WAN_OUTPUT_ENABLE);
}
/* if any of the functions have failed, then reset the structure to safe values */
if (status != ZL5011X_OK)
{
zl5011xParams->wanIf.wanNumStreams = 0;
zl5011xParams->wanIf.wanNumChannels = 0;
zl5011xParams->wanIf.wanMode = ZL5011X_WAN_INVALID_IF;
}
if ((status == ZL5011X_INVALID_MODE) && (zl5011xParams->deviceType == ZL_DEVICE_ZL50130))
{
/* special case - there is no TDM in this device, but the mode will have
been detected as invalid above, so just return OK for this device type */
status = ZL5011X_OK;
}
return(status);
}
/***************** END ****************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -