Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo funciona el controlador SPI WINCE 6.0?

¿Cómo funciona el controlador SPI WINCE 6.0?

Te daré algunas sugerencias, yo mismo las he resumido, ¡no sé si serán correctas!

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"));

}

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!