📄 qmc__err.c
字号:
/************************************************************************/
/* */
/* */
/* (C) Copyright Bangyan Information Technology Ltd, 2000/9. */
/* All right reserved */
/* */
/* Author: Zhuguosheng */
/* */
/* Description: */
/* Driver Set - QMC hdlc specific routines. */
/* */
/* Routines */
/* hdlc_qmc_tx */
/* hdlc_rx_internal */
/* hdlc_tx_internal */
/* qmc_hdlc_interrupt */
/* */
/************************************************************************/
#include "PUB\PUB_INCL.H"
#include "DRVS\DRV860\PUB\NETCOMM.H"
#include "DRVS\DRV860\PUB\D860_PUB.H"
#include "DRVS\DRV860\PUB\MPC860.H"
#include "DRVS\DRV860\PUB\MASKS860.h"
#include "DRVS\DRV860\QMC\QMC.H"
extern QMC_TABLE qmc_table;
extern EPPC *quicc;
extern VOID ReInitQmcScc(VOID);
VOID qmc_glob_underrun(SI scc_num);
VOID qmc_glob_overrun(SI scc_num);
VOID qmc_chan_underrun(SI chan_num);
VOID qmc_chan_overrun(SI chan_num);
VOID qmc_intr_q_overflow(SI scc_number);
VOID RestartQmcChannelRecv(UC channel_num );
VOID RestartQmcChannelRecv(UC channel_num )
{
struct qmc_hdlc_pram *pram;
register QUICC_BD *rbd;
UI i;
pram = CHANNEL_PRAM_BASE(quicc,channel_num);
pram->zdstate = HDLC_ZD_STATE;
pram->rstate = 0x31000000;
}
VOID RestartQmcChannelSend(UC channel_num )
{
struct qmc_hdlc_pram *pram;
register QUICC_BD *tbd;
UI i;
tbd = qmc_table[channel_num].FirstTxBd;
for( i=0; i<qmc_table[channel_num].no_of_trn_bd; i++)
{
tbd->status |= T_R;
tbd->length = 0;
tbd++;
}
pram = CHANNEL_PRAM_BASE(quicc,channel_num);
pram->chamr |= HDLC_CHAMR_POL; /* Enable polling*/
}
VOID qmc_glob_underrun(SI scc_num)
{
UI i;
BYPrintf("@@@@@@@@@@@@@@@@@@@@@@SCC %d UNDERRUN@@@@@@@@@@@@@@@@@@@@@@", scc_num);
LedSwitchOnOrOff( 1, 0 );
LedSwitchOnOrOff( 1, 1 );
LedSwitchOnOrOff( 1, 2 );
LedSwitchOnOrOff( 1, 3 );
for( i=0; i< NUM_OF_CHANNELS ; i++ )
{
RestartQmcChannelSend(i);
}
}
VOID qmc_glob_overrun(SI scc_num)
{
UI i;
BYPrintf("@@@@@@@@@@@@@@@@@@@@@@HDLC %d OVERRUN@@@@@@@@@@@@@@@@@@@@@@", scc_num);
LedSwitchOnOrOff( 1, 0 );
LedSwitchOnOrOff( 1, 1 );
LedSwitchOnOrOff( 1, 2 );
LedSwitchOnOrOff( 1, 3 );
for (i = 0; i < NUM_OF_CHANNELS; i++ )
{
RestartQmcChannelRecv(i);
}
}
VOID qmc_intr_q_overflow(SI scc_number)
{
BYPrintf("@@@@@@@@@@@@@@@@@@@@@@SCC %d qmc_intr_q_overflow@@@@@@@@@@@@@@@@@@@@@@", scc_number);
LedSwitchOnOrOff( 1, 0 );
LedSwitchOnOrOff( 1, 1 );
LedSwitchOnOrOff( 1, 2 );
LedSwitchOnOrOff( 1, 3 );
}
VOID qmc_chan_underrun(SI chan_num)
{
BYPrintf("@@@@@@@@@@@@@@@@@@@@@@SCC %d qmc_chan_underrun@@@@@@@@@@@@@@@@@@@@@@", chan_num);
LedSwitchOnOrOff( 1, 0 );
LedSwitchOnOrOff( 1, 1 );
LedSwitchOnOrOff( 1, 2 );
LedSwitchOnOrOff( 1, 3 );
RestartQmcChannelSend(chan_num);
}
VOID qmc_chan_overrun(SI chan_num)
{
BYPrintf("@@@@@@@@@@@@@@@@@@@@@@HDLC %d OVERRUN II@@@@@@@@@@@@@@@@@@@@", chan_num);
LedSwitchOnOrOff( 1, 0 );
LedSwitchOnOrOff( 1, 1 );
LedSwitchOnOrOff( 1, 2 );
LedSwitchOnOrOff( 1, 3 );
RestartQmcChannelRecv(chan_num);
}
VOID qmc_chan_CRC_error(SI chan_num)
{
STATIC UL ErrNum[NUM_OF_CHANNELS];
LedSwitchOnOrOff( 1, 3 );
ErrNum[chan_num]++;
if (ErrNum[chan_num] > 10000)
{
ErrNum[chan_num] = 0;
#ifdef MINI_TAIZHAN
if (0 != chan_num)
#endif
BYPrintf("CRC-E CHAN %d", chan_num);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -