📄 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;
DEBUGPrintf("QMC Global Underrun\n");
LedSwitchOnOrOff( 1, 1 );
for( i=0; i<48; i++ )
{
RestartQmcChannelSend(i);
}
}
VOID qmc_glob_overrun(SI scc_num)
{
UI i;
DEBUGPrintf("QMC Global Overrun\n");
LedSwitchOnOrOff( 1, 1 );
for( i=0; i<48; i++ )
{
RestartQmcChannelRecv(i);
}
}
VOID qmc_intr_q_overflow(SI scc_number)
{
LedSwitchOnOrOff( 1, 1 );
}
VOID qmc_chan_underrun(SI chan_num)
{
LedSwitchOnOrOff( 1, 1 );
DEBUGPrintf("QMC Channel %d underrun\n",chan_num);
RestartQmcChannelSend(chan_num);
}
VOID qmc_chan_overrun(SI chan_num)
{
LedSwitchOnOrOff( 1, 1 );
DEBUGPrintf("QMC Channel %d overflow\n",chan_num);
RestartQmcChannelRecv(chan_num);
}
VOID qmc_chan_CRC_error(SI chan_num)
{
/* DEBUGPrintf("QMC CRC Error in Channel %d\n",chan_num); */
LedSwitchOnOrOff( 1, 1 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -