beautypg.com

Intel 386 User Manual

Page 234

background image

9-35

INTERRUPT CONTROL UNIT

/*****************************************************************************

InitICUSlave

Description:

Initialization only the internal slave Interrupt Control Units (ICU).

This routine only initializes the internal interrupt controller,

external ICUs must be initialized separately.

Parameters:

SlaveMode

Mode of operation for Slave ICU

SlaveBase

Specifies the base interrupt vector number for the

Slave interrupts.

For example, if IR1 of the slave goes active and the

SlaveBase = 0x40 the processor uses interrupt

vector table entry 0x41.

SlavePins

Defines what EX pins are available externally to the

chip for the Slave.

Returns:Error Code

E_OK

-- Initialized OK, No error.

Assumptions:

REMAPCFG register has Expanded I/O space access enabled (ESE bit set).

Syntax:

/* ICU Modes */

#define ICU_SFNM

0x10

#define ICU_AUTOEOI

0x2

#define ICU_TRIGGER_LEVEL

0x8

#define ICU_TRIGGER_EDGE

0x0

/* ICU Slave Pins */

#define SPIN_INT4

0x1

#define SPIN_INT5

0x2

#define SPIN_INT6

0x4

#define SPIN_INT7

0x8

int error_code;

error_code = InitICUSlave(ICU_TRIGGER_EDGE, 0x30, SPIN_INT4);

Real/Protected Mode

No changes required.

*****************************************************************************/

int InitICUSlave(BYTE SlaveMode, BYTE SlaveBase, BYTE SlavePins)

{

BYTE

cfg_pins;

/* Program Slave ICU */