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

2020-02-20 17:51

regs.x.cx=0x8376;

regs.x.dx=0x10eb; //输入要寻找的厂商号和设备号 regs.x.si=0x00; //输入要寻找的PCI卡索引号 int86(0x1a,®s,®s); //调用指定的X86中断

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

int getPCIbase0() //{

union REGS regs; //合

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;

获得PCI卡的IO0的地址 定义用C语言调用BIOS中断所用的寄存器组调用PCI BIOS中断 配置空间用字的方式读入 配置空间中基地址0的地址

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

return(regs.h.ah); }

int getPCImembase0() {

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

regs.x.di=0x18; //PCI 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;

配置空间存储器基地址0的低位地址 同上 配置空间存储器基地址0的高位地址 同上 47

regs.x.di=0x3c; //PCI配置空间中断线的地址 regs.h.bl=bl; regs.h.bh=bh;

int86(0x1a,®s,®s); return(regs.h.cl); } main() {

void delay1(); int mypckey(); int err,i,flagm=1;

int sindata[36]={100,117,134,150,164,176,186,193,198,200,193,186, 176,164,150,134,117,100,83,64,50,38,24,14,7,2,0,2,7,20,24,36,50, 66,83,100};

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;

48

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

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

printf(\

////////////////////////////////////////////////////////////////////////////

ic0832r1=ic0832r1+iobase1; //获取0832的寄存器地址 ic0832r2=ic0832r2+iobase1;

printf(\显示提示

do //主循环 {

for (i=0;i<=35;i++) {

outportb(ic0832r1,sindata[i]); //向0832写正弦值 outportb(ic0832r2,0x0); //使0832输出正弦值

} delay1(); flagm=mypckey(); } while (flagm==1);

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

int mypckey() //扫描键盘

49

{

int pckey1();

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

int pckey1() // {

union REGS regs; regs.h.ah=0x6; regs.h.dl=0x0ff;

int86(0x21,®s,®s); return(regs.h.al); }

void delay1() // {

int i,j,a=0;

for (i=1;i<=500;i++) {

for (j=1;j<=1000;j++) { a=a+0; }

}

return;

调用int 21H(6H)中断 延时子程序 }

50


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

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

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

马上注册会员

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