微机原理及接口技术实验指导书(8)

2020-02-20 17:51

bl=regs.h.bl; //返回的设备号高5位,低3位为功能号 bh=regs.h.bh; //返回的总线号 return(regs.h.ah); //返回状态 }

int getPCIbase0() //获得PCI卡的IO0的地址 {

union REGS regs; //定义用C语言调用BIOS中断所用的寄存器组合

regs.h.ah=0xb1; // regs.h.al=0x09; // regs.x.di=0x14; //PCI regs.h.bl=bl; // regs.h.bh=bh; // int86(0x1a,®s,®s); // iobase0=regs.x.cx; //CX return(regs.h.ah); //}

int getPCIbase1() {

union REGS regs; // regs.h.ah=0xb1; regs.h.al=0x09;

regs.x.di=0x1c; //PCI regs.h.bl=bl; regs.h.bh=bh;

int86(0x1a,®s,®s); iobase1=regs.x.cx; return(regs.h.ah); }

int getPCImembase0() {

调用PCI BIOS中断 配置空间用字的方式读入 配置空间中基地址0的地址

要读入配置空间的PCI卡的设备号和功能号 要读入配置空间的PCI卡的总线号 调用指定的X86中断 为返回的IO0的基地址 返回状态 同上 配置空间基地址1的地址 36

union REGS regs; //同上 regs.h.ah=0xb1; regs.h.al=0x09;

regs.x.di=0x18; //PCI配置空间存储器基地址0的低位地址 regs.h.bl=bl; regs.h.bh=bh;

int86(0x1a,®s,®s); membase0=regs.x.cx; return(regs.h.ah); }

int getPCImembase1() {

union REGS regs; // regs.h.ah=0xb1; regs.h.al=0x09;

regs.x.di=0x1a; //PCI regs.h.bl=bl; regs.h.bh=bh;

int86(0x1a,®s,®s); membase1=regs.x.cx; return(regs.h.ah); }

int getPCIIRQ() {

union REGS regs; // regs.h.ah=0xb1; regs.h.al=0x09;

regs.x.di=0x3c; //PCI regs.h.bl=bl; regs.h.bh=bh;

int86(0x1a,®s,®s);

同上 配置空间存储器基地址0的高位地址 同上 配置空间中断线的地址 37

return(regs.h.cl); } main() {

int err,rt1=0,count1=0,flagm=1,flag1=0; void plus1(); void mydisp1(); int mypckey();

err=findPCIcard(); if (err!=0) {

printf(\ flagm=0; }

err=getPCIbase0();

iobase0=iobase0&0xfffc;

//从PCI配置空间读入的与地址空间有关的数据其bit 0位为1, printf(\//表明此空间为IO空间参与PCI总线地址译码 err=getPCIbase1(); iobase1=iobase1&0xfffc;

printf(\ err=getPCImembase1(); err=getPCImembase0();

membase0=membase0+membase1<<16; //左移16位,将高位地址变换成双字中的高位字 printf(\ err=getPCIIRQ();

printf(\

38

ic82530=ic82530+iobase1; //获取8253 T0 T1 控制寄存器的地址 ic82531=ic82531+iobase1; ic8253type=ic8253type+iobase1;

ic8255a=ic8255a+iobase1; //获取8255 A、B口和控制寄存器的地址

ic8255b=ic8255b+iobase1; ic8255type=ic8255type+iobase1;

printf(\

outportb(ic8255type,0x80); //

outportb(ic8255a,0x0ff); outportb(ic8255b,0x0ff);

outportb(ic8253type,0x3e); // outportb(ic82530,0x0ff); outportb(ic82530,0x0f);

outportb(ic8253type,0x5e); outportb(ic82531,0x8);

do // {

rt1=inportb(ic82531); // if (rt1==2) // { if (flag1==0) // {

flag1=1; //

显示提示字符初始化8255 初始化8253 主循环 读8253 T1 判断是否计数到2 判断是否计过2 若是则置标志位

39

count1=count1+1; //count1加1 if (count1==2) //判断是否计过两次2 {

count1=0; //若是则清count1 plus1(); //调加1子程序

} }

} else

flag1=0; //若rt1不为2,则清flag1 mydisp1(); //调显示子程序 flagm=mypckey(); //调扫描键盘子程序 }while (flagm==1);

//////////////////////////////////////////////////////////////////////////// return; }

int mypckey() //扫描键盘子程序 {

int pckey1();

int flagk,judge; judge=pckey1(); if (judge=='e') flagk=0; else flagk=1; return (flagk); }

40


微机原理及接口技术实验指导书(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:管理制度0饮片626-zhuihou

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: