Interrupt programming examples – National Instruments PC-DIO-24 User Manual

Page 44

Advertising
background image

Register-Level Programming

Chapter 4

PC-DIO-24 User Manual

4-14

© National Instruments Corporation

/* EXAMPLE 1*/

outp(cnfg,0xC0);

/* Port A is in mode 2. */

while (!(inp(portc) & 0x80));

/* Wait until OBFA* is set,

indicating that the data last
written to port A has been
read.*/

outp(porta,0x67);

/* Write the data to port A. */

while (!(inp(portc) & 0x20));

/* Wait until IBFA is set, indicating

that data is available in port A to
be read. */

valread = inp(porta);

/* Read data from port A. */

}

Interrupt Programming Examples

The following examples show the process required to enable interrupts for several different
operating modes. The interrupt handling routines and interrupt installation routines are not
included. See the IBM Personal Computer AT Technical Reference manual for additional
information.

Main() {

#define BASE_ADDRESS

0x210

/* Board located at address 210. */

#define PORTAoffset

0x00

/* Offset for port A */

#define PORTBoffset

0x01

/* Offset for port B */

#define PORTCoffset

0x02

/* Offset for port C */

#define CNFGoffset

0x03

/* Offset for CNFG */

register unsigned int porta, portb, portc, cnfg;
char valread;

/* Variable to store data read from a

port */

/* Calculate register addresses. */
porta = BASE_ADDRESS + PORTAoffset;
portb = BASE_ADDRESS + PORTBoffset;
portc = BASE_ADDRESS + PORTCoffset;
cnfg = BASE_ADDRESS + CNFGoffset;

/* EXAMPLE 1–Set up interrupts for mode 1 input for port A. Select PC6 as the
interrupt enable bit. */

outp(cnfg,0xB0);

/* Port A is an input in mode 1. */

outp(cnfg,0x09);

/* Set PC4 to enable interrupts from

82C55A. */

outp(cnfg,0x0C);

/* Clear PC6 to enable interrupts. */

/* EXAMPLE 2–Set up interrupts for mode 1 input for port B. Select PC6 as the
interrupt enable bit. */

outp(cnfg,0x86);

/* Port B is an input in mode 1. */

outp(cnfg,0x05);

/* Set PC2 to enable interrupts from

82C55A. */

outp(cnfg,0x0C);

/* Clear PC6 to enable interrupts. */

Advertising