¿Cómo funciona el controlador SPI WINCE 6.0?
1. Cómo compilar el archivo spi.dll
BSP no genera el archivo spi.dll de forma predeterminada. Puede configurar BSP_NOSPI=1 en el archivo smdk210.bat en BSP_NOSPI. =., porque
se agregó en el archivo fuente. if "$(BSP_ NOSPI)" == "1" SKIPBUILD=1 !opción endif
2. spi_INIT falló Error Problema de KernelIoControl
La razón es que isri.dwIrq es -1
Solución: en la definición de DDKReg_GetIsrInfo
// Si no se especifica ningún valor de IRQ en el registro, dwIrq se establecerá en IRQ_UNSPECIFIED.
// Si no se especifica ningún valor SYSINTR en el registro, dwSysintr se establecerá en IRQ_UNSPECIFIED.
La clave de registro WRITE_REG_DWORD(DrvKey,L "Irq", DriverIRQ) debe configurarse aquí. DriverIRQ es el número de interrupción física de spi
No es necesario configurar Sysintr, generalmente se solicita dinámicamente.
También necesitas configurar WRITE_REG_DWORD(DrvKey,L "DeviceArrayIndex", DriverDeviceArrayIndex; no sé qué es esto
3. Inicializa spi
static void InitSpiConfig (modo BOOL)
{
if (modo)//master
{
spiConfig.dwMode = SPI_MASTER_MODE;
}
else/slave
{
spiConfig.bUseRxDMA = FALSE;
spiConfig.bUseRxIntr = TRUE;
p>spiConfig.bUseTxDMA = FALSE;
spiConfig.Format = SPI_FORMAT_1
/*Establezca los valores de predisparo y tiempo de espera de SPI*/ /
spiConfig.dwTimeOutVal = 0;
spiConfig.dwPrescaler = 120;
if( DeviceIoControl(hdDevice, SPI_IOCTL_SET_CONFIG, &spiConfig, sizeof(spiConfig), NULL , NULL, NULL, NULL) ! =TRUE )
{
RETAILMSG(1, (TEXT("[SPI1] SPI_IOCTL_SET_CONFIG falla\r\n"));
} p>
if( DeviceIoControl(hdDevice, SPI_ IOCTL_START, NULL, NULL, NULL, NULL, NULL)!=TRUE )
{
RETAILMSG(1, (TEXT( "[SPI1] SPI_IOCTL_START fail\r\n"));
}
}
Si aún no lo hace Trabajo, ¡pregunta de nuevo!