|
为什么我在应用程序里配置
spiSetConfig.dwTimeOutVal = 3000;
SetConfig.dwMode = 1;
SetConfig.dwPrescaler = 2;
SetConfig.bUseRxDMA = FALSE;
SetConfig.bUseRxIntr = FALSE;
SetConfig.bUseTxDMA = FALSE;
SetConfig.bUseTxIntr = FALSE;
然后调用DeviceIoControl函数,而在驱动中SPI_Iocontol打印以上几个数值都不正确,全都是164954130
DeviceIoControl里的写入值都传不到SPI_Iocontrol 中,用的是6410的天嵌spi驱动。没改驱动。
SPI_Iocontrol()代码如下:
switch(dwIoControlCode)
{
case SPI_IOCTL_SET_CONFIG:
RETAILMSG(1,(TEXT("SPI_IOControl;switch SPI_IOCTL_SET_CONFIG \r\n")));
__try
{
if( lpInBuf == NULL || nInBufSize != sizeof(SET_CONFIG) )
{
bResult = FALSE;
RETAILMSG(1,(TEXT("lpInBuf == NULL || nInBufSize != sizeof(SET_CONFIG)\n")));
break;
}
RETAILMSG(1,(TEXT("lpInBuf == NULL || nInBufSize != sizeof(SET_CONFIG) successed \n")));
if (!CeSafeCopyMemory((LPVOID)&SetConfig, lpInBuf, nInBufSize))
{
bResult = FALSE;
RETAILMSG(1,(TEXT("CeSafeCopyMemory bResult = FALSE\n")));
break;
}
pSpiPrivate->dwTimeOutVal =SetConfig.dwTimeOutVal;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG dwTimeOutVal = : %d\n ",pSpiPrivate->dwTimeOutVal)));
pSpiPrivate->dwMode =SetConfig.dwMode;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG dwMode = : %d\n ",pSpiPrivate->dwMode)));
pSpiPrivate->dwPrescaler =SetConfig.dwPrescaler;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG dwPrescaler = : %d\n ",pSpiPrivate->dwPrescaler)));
pSpiPrivate->bUseRxDMA =SetConfig.bUseRxDMA;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG bUseRxDMA = : %d\n ",pSpiPrivate->bUseRxDMA)));
pSpiPrivate->bUseRxIntr =SetConfig.bUseRxIntr;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG bUseRxIntr = : %d\n ",pSpiPrivate->bUseRxIntr)));
pSpiPrivate->bUseTxDMA =SetConfig.bUseTxDMA;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG bUseTxDMA = : %d\n ",pSpiPrivate->bUseTxDMA)));
pSpiPrivate->bUseTxIntr =SetConfig.bUseTxIntr;
RETAILMSG(SPI_ERR,(TEXT("SPI_IOCTL_SET_CONFIG bUseTxIntr = : %d\n ",pSpiPrivate->bUseTxIntr))); |
|