Interrupt programming example for the 8253 – National Instruments PC-DIO-96 User Manual

Page 60

Advertising
background image

Register-Level Programming

Chapter 4

PC-DIO-96 User Manual

4-22

© National Instruments Corporation

Interrupt Programming Example for the 8253

An in-depth example of handling interrupts generated by the 8253 is presented as follows. The
main program is presented in C, while sample interrupt routines are presented in assembly
language.

Main() {

#define BASE_ADDRESS

0x180

/* Board located at address 180 */

#define CTR0offset

0x10

/* Offset for counter 0 */

#define CTR1offset

0x11

/* Offset for counter 1 */

#define CTRCNFGoffset

0x13

/* Offset for 8253 CNFG */

#define IREG1offset

0x14

/* Offset for Interrupt Reg. 1 */

#define IREG2offset

0x15

/* Offset for Interrupt Reg. 2 */

#define channel

5

/* Interrupt channel on W1 */

#define use_ctr1

0

/* 0 for ctr0, 1 for ctr1 */

#define ctr0_data

10000

/* Pulse every 5 msec */

#define ctr1_data

1000

/* Pulse every 5 sec */

unsigned int ctr0, ctr1, cnfg, ireg1, ireg2;

/* Calculate register addresses */

ctr0 = BASE_ADDRESS + CTR0offset;
ctr1 = BASE_ADDRESS + CTR1offset;
cnfg = BASE_ADDRESS + CTRCNFGoffset;
ireg1 = BASE_ADDRESS + IREG1offset;
ireg2 = BASE_ADDRESS + IREG2offset;

/*

Disable interrupts */

outp(ireg1,0x00);

/* Disable all 82C55A interrupts */

outp(ireg2,0x00);

/* Disable counter interrupts */

/*

Set up the counter modes--do not write out the counter load values at

this time, as this starts the counter. */

outp(cnfg,0x34);

/* Set counter 0 to mode 2 */

if (use_ctr1) {
outp(cnfg,0x74);

/* Set counter 1 to mode 2 */

outp(ireg2,0x07);

/* Enable interrupts, enable counter

interrupts, and select counter 1's
output */

}
else outp(ireg2, 0x06);

/* Enable interrupts, enable counter

interrupts, and select counter 0's
output */

/* At this point, you should install your interrupt service routine using the
interrupt channel selected by W1. */

/*

install_isr(channel,...);

*/

/* Now write out the counter load values for the selected counters. */

Advertising