PIC8259 Code
Posted: Tue Oct 10, 2006 4:18 am
This is the code for my pic 8259 handler. I readed this from an OpenSource OS, but I don't remember its name.
In your opinion, is it good?
In your opinion, is it good?
Code: Select all
static unsigned short int irq_mask;
#define SLAVE_IRQ 8
#define MASTER_SLAVE 2
#define ICU0 0x20
#define ICU1 0xA0
#define ICU_RESET 0x11
//Initialization PIC 8259
void Init8259(void)
{
outportb( ICU0, ICU_RESET );
outportb( ICU1, ICU_RESET );
outportb( ICU0 + 1, 0x20 );
outportb( ICU1 + 1, 0x28 );
outportb( ICU0 + 1, 0x04 );
outportb( ICU1 + 1, 0x02 );
outportb( ICU0 + 1, 0x01 );
outportb( ICU1 + 1, 0x01 );
outportb( ICU0 + 1, 0xFF );
outportb( ICU1 + 1, 0xFF );
irq_mask = 0xFFFF;
}
void able_irq(unsigned char irq_no)
{
irq_mask &= ~ ( 1 << irq_no );
if ( irq_no >= 8 )
{
irq_mask &= ~ ( 1 << 2 );
}
outportb( ICU0 + 1 , irq_mask & 0xFF );
outportb( ICU1 + 1 , ( irq_mask >> 8 ) & 0xFF );
}
void disable_irq(unsigned char irq_no)
{
irq_mask |= ( 1 << irq_no );
if ( ( irq_mask & 0xFF00 ) == 0xFF00 )
{
irq_mask |= ( 1 << 2 );
}
outportb( ICU0 + 1, irq_mask & 0xFF );
outportb( ICU1 + 1, ( irq_mask >> 8 ) & 0xFF );
}