Information Technology Reference
In-Depth Information
#define EOI 0x20 /* End of Interrupt */
#define ICR 0x20 /* Interrupt Control Register */
#define IMR 0x21 /* Interrupt Mask Register */
void interrupt far pl_interrupt(void);
void setup_parallel (void);
void set_vectors(void);
void enable_interrupts(void);
void disable_interrupts(void);
void reset_vectors(void);
void interrupt far (*oldvect)();
int int_flag = TRUE;
int outval=0;
int main(void)
{
set_vectors();
setup_parallel();
do
{
if (int_flag)
{
printf("New value sent\n");
int_flag=FALSE;
}
} while (!kbhit());
reset_vectors();
return(0);
}
void setup_parallel(void)
{
outportb(CONTROL, inportb(CONTROL) | 0x10);
/* Set Bit 4 on control port to a 1 */
}
void interrupt far pl_interrupt(void)
{
disable();
outportb(DATA,outval);
if (outval!=255) outval++; else outval=0;
int_flag=TRUE;
outportb(ICR,EOI);
enable();
}
void set_vectors(void)
{
int int_mask;
disable(); /* disable all ints */
oldvect=getvect(0x0f); /* save any old vector */
setvect (0x0f,pl_interrupt); /* set up for new int serv
*/
}
void enable_interrupts(void)
{
int ch;
disable();
ch=inportb(IMR);
outportb(IMR, ch & IRQ7);
enable();
Search WWH ::




Custom Search