Low Level Controller
/* ***
The interrupt service routines
***
*/
/************************************************************************/
/***************************************************************************/
/*
/*
/*
/*
/*
/*
/*
*/
*/
*/
*/
*/
*/
*/
Function: Int_ICC ()
Parms :’pt’ pointer to the corresponding PEITAB-table element
purpose : handle ICC (ISAC-S, ISAC-P) interrupts
Int_ICC is called from IntServ_BASIC in basic_l2.c which
is SIPB system specific.
/***************************************************************************/
EXPORT void
Int_ICC (pt)
register PEITAB
*pt;
{
WORD
BYTE
cnt;
exir, cmd;
register BYTE ista;
if (!(ista = inp (pt->pt_r_ista)))
return;
exir = inp (pt->pt_r_exir);
/* XPR interrupt
/* =============
/* the XPR interrupt indicates
*/
*/
*/
/* that the XFIFO is ready for new */
/* data bytes.
/* Reasons:
/* - HDLC controller reset
/*
*/
*/
*/
*/
*/
(CMDR:XRES)
/* - data transmission finished
if ((ista & ISTA_XPR) && !(ista & ISTA_TIN) && !(exir & EXIR_PCE))
{
/* transmit byte count is 0
/* ------------------------
if ((cnt = pt->pt_tx_cnt) == 0)
{
*/
*/
/* HDLC controller reset command
/* given previously ?
/* -----------------------------
/* do nothing when it was a HDLC
/* controller reset only the
*/
*/
*/
*/
*/
/* indicating flag must be cleared */
if (pt->pt_state & PT_HDLC_RESET)
pt->pt_state &= ~PT_HDLC_RESET;
else
{
/* XPR was generated because the
/* last transmission is finished
/* ------------------------------
/* AUTOMODE operation ?
*/
*/
*/
*/
Semiconductor Group
296