8259芯片的初始化-在重现linux-0.11遇到的问题 (博古以通今)

/*文件名:followking/include/asm/io.h
*本文件改写linux-0.11/inlcude/asm/io.h,目的是为了体验整个系统构建的过程。
*作者:hk0625
*开始时间: 2010年03月28号星期天 15:22
*完成时间: 2010年03月28号星期天 15:42(完成)
*最后修改时间: 2010年03月29号星期一 11:50
*调试完成时间: 2010年04月09日星期五 18:19
*地点:北京化工大学郁夫图书馆文法阅览室小圆桌
*Email: shaohua20051231@163.com
*下面let's try!
*/


//端口字节输出宏函数。
#define outb(value, port) /
 __asm__ volatile ("outb %%al, %%dx"::"a"(value), "d"(port))

//端口字节输入宏函数。
//这里有一些疑问,最后_v作用是什么?
//返回值,2010年04月09日星期五 18:00
#define inb(port) ({ /
 unsigned char _v; /
 __asm__ volatile ("inb %%dx, %%al":"=a" (_v):"d" (port)); /
 _v; /
})

//带延迟的端口字节输出宏函数。
#define outb_p(value, port) /
 __asm__ volatile ("outb %%al, %%dx/n" /
   "/tjmp 1f/n" /
   "1:/tjmp 1f/n" /
   "1:"::"a"(value), "d" (port))

//带延迟的端口字节输入宏函数。
#define inb_p(port) ({ /
 unsigned char _v; /
 __asm__ volatile ("inb %%dx, %%al/n" /
  "/tjmp 1f/n" /
  "1:/tjmp 1f/n" /
  "1:":"=a" (_v):"d" (port)); /
 _v; /
})

 


void init_8259(void)
{
 outb_p(0x11, 0x20);
 outb_p(0x11, 0xA0);
 outb_p(0x20, 0x21);
 outb_p(0x28, 0xA1);
 outb_p(0x04, 0x21);
 outb_p(0x02, 0xA1);
 outb_p(0x01, 0x21);
 outb_p(0x01, 0xA1);
 outb_p(0xff, 0x21);
 outb_p(0xff, 0xA1);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值