大家好,我用DS作USB驱动,基本的数据传输都没有问题了,可惜我用了CancelSpinLock
后就出问题,蓝屏。如果启动SoftICE,碰到错误后也可以忽略后继续运行成功。下面
是我的cancel例程:
我没有用startio:
VOID USB160Device::CancelReadCallback(KIrp I)
{
CancelSpinLock::Release( I.CancelIrql() );
blockingIRP *blckirp=(blockingIRP *) PIRP(I) ->Tail.Overlay.DriverContext[0];
ULONG Address=(0x400000 & 0xfff00000);
ULONG NCAddress=(blckirp->c6xTdescAddr & 0xfffff)+BAR2BASEADDRESS;
t<<" Enter CancelReadCallback NCAddress " << NCAddress << EOL;
WRITE_PLX_SPACE0_LOCAL_ADDR(Address);
if( blckirp->operation == TRANSFER_DMAtoPC )
USB160_WRITE_REG(NCAddress+4, TRANSFER_CANCEL_DMAtoPC);
else
USB160_WRITE_REG(NCAddress+4, TRANSFER_CANCEL_DMAtoC6X);
WRITE_PLX_P2LDBELL( (ULONG)MASK_BIT31 );
}