PCI接口芯片s5935及其应用
IoConnectInterrupt
……
javascript:window.open(this.src);" style="cursor:pointer;"/>
DeviceControl()//实现应用程序中DeviceIOCon-trol函数对设备的读写
……
switchCONTROLCODE……
case ENABLE INTERRUPT: //使能和配置
中断方式
WRITE PORT ULONG(BASE ADDRESS 0+INTCSR,INT MASK DWORD);
case WRITE DATA:
WRITE PORT ULONG(BASE ADDRESS 0+INCOMING MBOX2 ADDRESS,DATA);
}
……}
InterruptHandler //中断服务函数
{ ……
DWORD= READ PORT ULONG(BASE AD-DRESS 0+INTCSR)//查询是否使本设备产生的中断及本设备以何种方式产生中断
……
DWORD=READ PORT ULONG(BASE AD-DRESS 0+PCI INCOMING MBOX2);//假设2号邮箱收到数据产生此中断
WRITE PORT ULONG(BASE ADDRESS 0+INTCSR,DEASSERT INTERRUPT WORD);//清中断
……
IoRequestDpc();//调用DpcForISR函数,完成可推迟的中断服务
……
DpcForISR ……
2.4 FIFO方式
s5935的两条FIFO,分别对应于读、写外加总线,它们可根据读写方向由s5935自动选择。当外加总线作为主控设备时,使能AMREN(外加总线主控读使能)和AMWEN(外加总线主控写使能)引脚即可启动FIFO/DMA传输,同时可通过相应的引脚或寄存器得到FIFO状态并复位FIFO。当从PCI总线进行s5935主控FIFO/DMA传输时,首先应在中断配置寄存器中写endian格式和中断方式,然后写地址和计数寄存器,最后写PCI控制/状态寄存器(MCSR)并启动DMA, 在Windows2000下的驱动程序步骤如图2所示,具体编程可参考邮箱方式。