FreeFlyOS【十】:pic部分详解

pic.c

8259A芯片级联控制器PIC的初始化

#include "pic.h"

static unsigned short irq_mask = 0xFFFF & ~(1 << 2);
static char did_init = 0;

static void pic_setmask(unsigned short mask) {
    irq_mask = mask;
    unsigned char mask_low=mask&0xff;
    unsigned char mask_high=(mask>>8)&0xff;
    if (did_init) 
    {
        outb(0x21, mask_low);
        outb(0xA1, mask_high);
    }
}

void pic_enable(unsigned int irq) {
    pic_setmask(irq_mask & ~(1 << irq));
}

void pic_init(){
    did_init = 1;
    //屏蔽所有中断
    outb(0x21,0xFF);
    outb(0xA1,0xFF);

    // 重新映射 IRQ 表
    // 两片级联的 Intel 8259A 芯片
    // 主片端口 0x20 0x21
    // 从片端口 0xA0 0xA1
   
    //设置ICW1命令字,
    // 初始化主片、从片
    // 0001 0001
    outb(0x20, 0x11);
    outb(0xA0, 0x11);
    
    
    // 设置主片 IRQ 从 0x20(32) 号中断开始
    outb(0x21, 0x20);

    // 设置从片 IRQ 从 0x28(40) 号中断开始
    outb(0xA1, 0x28);
    
    // 设置主片 IR2 引脚连接从片
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值