|
embedsky_lhh 发表于 2012-10-31 15:10
你凭什么依据来判断他没调用,有没有加有效的打印信息?
有啊,添加了很多RETAILMSG(1,.......)的,请看代码: 求解释
PSPI_PUBLIC_CONTEXT SPI_Init(PVOID Context)
{
LPTSTR ActivePath = (LPTSTR) Context;
PSPI_PUBLIC_CONTEXT pPublicSpi = NULL;
BOOL bResult = TRUE;
DWORD dwHwIntr=0;
RETAILMSG(SPI_INIT,(TEXT("++[SPI] HSP_Init Function\r\n")));
RETAILMSG(1,(TEXT("[SPI] Active Path : %s\r\n"), ActivePath));
if ( !(pPublicSpi = (PSPI_PUBLIC_CONTEXT)LocalAlloc( LPTR, sizeof(SPI_PUBLIC_CONTEXT) )) )
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] Can't not allocate for SPI Context\r\n")));
bResult = FALSE;
goto CleanUp;
}
if ( !(pRestoreSPIregs = (PS3C6410_SPI_REG)LocalAlloc( LPTR, sizeof(S3C6410_SPI_REG) )) )
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] Can't not allocate for pRestoreSPIregs \r\n")));
bResult = FALSE;
goto CleanUp;
}
if(!HW_Init(pPublicSpi))
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] HW_Init is failed\r\n")));
bResult = FALSE;
goto CleanUp;
}
if(!InitializeBuffer())
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] InitializeBuffer is failed\r\n")));
bResult = FALSE;
goto CleanUp;
}
// Request DMA Channel
// DMA context have Virtual IRQ Number of Allocated DMA Channel
// You Should initialize DMA Interrupt Thread after "Request DMA Channel"
if( DMA_request_channel(&g_OutputDMA, DMA_SPI0_TX) != TRUE )
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] DMA SPI TX channel request is failed\r\n")));
bResult = FALSE;
goto CleanUp;
}
if( DMA_request_channel(&g_InputDMA, DMA_SPI0_RX) != TRUE )
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] DMA SPI RX channel request is failed\r\n")));
bResult = FALSE;
goto CleanUp;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] DMA SPI RX and TX channel request is success \r\n")));
do
{
InitializeCriticalSection(&(pPublicSpi->CsRxAccess));
InitializeCriticalSection(&(pPublicSpi->CsTxAccess));
//Rx Thread
pPublicSpi->hRxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (pPublicSpi->hRxEvent == NULL)
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Rx Event creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Rx EVENT creation success!!!\r\n")));
pPublicSpi->hRxThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForRx, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwRxThreadId);
if (pPublicSpi->hRxThread == NULL)
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Rx Thread creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Rx THREAD creation success!!!\r\n")));
pPublicSpi->hRxDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (pPublicSpi->hRxDoneEvent == NULL)
{
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Rx Done Event creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Rx Done Event creation success !!!\r\n")));
pPublicSpi->hRxIntrDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (pPublicSpi->hRxIntrDoneEvent == NULL)
{
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Rx Interrupt Event creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Rx Interrupt Event creation success !!!\r\n")));
//Tx Thread
pPublicSpi->hTxEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (pPublicSpi->hTxEvent == NULL)
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Tx Event creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Tx EVENT creation success !!!\r\n")));
pPublicSpi->hTxThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForTx, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwTxThreadId);
if (pPublicSpi->hTxThread == NULL)
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Tx Thread creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Tx Thread creation success !!!\r\n")));
pPublicSpi->hTxDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (pPublicSpi->hTxDoneEvent == NULL)
{
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Tx Done Event creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Tx Done Event creation success !!!\r\n")));
pPublicSpi->hTxIntrDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (pPublicSpi->hTxIntrDoneEvent == NULL)
{
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Tx Interrupt Event creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT, (TEXT("[SPI] SPI Tx Interrupt Event creation success !!!\r\n")));
//Spi ISR
pPublicSpi->dwSpiSysIntr = SYSINTR_NOP;
dwHwIntr = IRQ_SPI0; //HS-SPI
pPublicSpi->hSpiEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwHwIntr, sizeof(DWORD), &pPublicSpi->dwSpiSysIntr, sizeof(DWORD), NULL))
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] Failed to request the SPI sysintr.\r\n")));
pPublicSpi->dwSpiSysIntr = SYSINTR_UNDEFINED;
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] successed to request the SPI sysintr.\r\n")));
if (!InterruptInitialize(pPublicSpi->dwSpiSysIntr, pPublicSpi->hSpiEvent, NULL, 0))
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Interrupt Initialization failed!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Interrupt Initialization successed !!!\r\n")));
pPublicSpi->hSpiThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForSpi, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwSpiThreadId);
if (pPublicSpi->hSpiThread == NULL)
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI ISR Thread creation error!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI ISR Thread creation successed !!!\r\n")));
//Tx DMA Done ISR
pPublicSpi->dwTxDmaDoneSysIntr = SYSINTR_NOP;
dwHwIntr = g_OutputDMA.dwIRQ;
pPublicSpi->hTxDmaDoneDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
pPublicSpi->hTxDmaDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
RETAILMSG(SPI_INIT,(TEXT("[SPI] Tx DMA Done ISR(hTxDmaDoneDoneEvent and hTxDmaDoneEvent) creation successed !!!\r\n")));
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dwHwIntr, sizeof(DWORD), &pPublicSpi->dwTxDmaDoneSysIntr, sizeof(DWORD), NULL))
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] Failed to request the SPI_DMA sysintr.\r\n")));
pPublicSpi->dwTxDmaDoneSysIntr = SYSINTR_UNDEFINED;
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] successed to request the SPI_DMA sysintr.\r\n")));
if (!InterruptInitialize(pPublicSpi->dwTxDmaDoneSysIntr, pPublicSpi->hTxDmaDoneEvent, NULL, 0))
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] DMA Interrupt Initialization failed!!!\r\n")));
bResult = FALSE;
break;
}
RETAILMSG(SPI_INIT,(TEXT("[SPI] DMA Interrupt Initialization successed !!!\r\n")));
pPublicSpi->hTxDmaDoneThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ThreadForTxDmaDone, (LPVOID)pPublicSpi, 0, (LPDWORD)&pPublicSpi->dwTxDmaDoneThreadId);
if (pPublicSpi->hTxDmaDoneThread == NULL)
{
RETAILMSG(SPI_INIT,(TEXT("[SPI] SPI Dma Thread creation error!!!\r\n")));
bResult = FALSE;
break;
}
|
|