La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cómo funciona el controlador SPI WINCE 6.0?

¿Cómo funciona el controlador SPI WINCE 6.0?

Te doy algunas opiniones. Yo mismo las he resumido ¡No sé si son ciertas!

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. = Eso es todo, porque

agregó !if "$(BSP_NOSPI)" == "1" SKIPBUILD=1 !endif opción en el archivo fuente

2, spi_INIT falló Error Problema de KernelIoControl

El motivo es que el valor de isri.dwIrq es -1

Solución: véalo en la definición de DDKReg_GetIsrInfo

// Si no Se especifica el valor 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 SYSINTR_NOP.

Aquí es necesario configurar la clave de registro WRITE_REG_DWORD(DrvKey,L"Irq", DriverIRQ es el número de interrupción física de spi

No es necesario configurar Sysintr, generalmente se usa una aplicación dinámica);

También configure WRITE_REG_DWORD(DrvKey,L"DeviceArrayIndex", DriverDeviceArrayIndex); no sé qué es esto.

Inicialización de spi

estática. void InitSpiConfig(modo BOOL)

{

if (modo)//master

{

spiConfig.dwMode = SPI_MASTER_MODE;

}

else//esclavo

{

spiConfig.dwMode = SPI_SLAVE_MODE;

}

/*recibir y enviar usa el modo de interrupción, no usa el modo DMA*/

spiConfig.bUseRxDMA = FALSE;

spiConfig.bUseRxIntr = TRUE;

spiConfig.bUseTxDMA = FALSE;

spiConfig.bUseTxIntr = TRUE;

spiConfig.dwLineStrength = 0;

spiConfig.dwFBClkSel = 0;

spiConfig.Format = SPI_FORMAT_1;

/*configuración del valor de pre-frecuencia 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, NULL)!=TRUE )

{

RETAILMSG(1, (TEXT("[SPI1] SPI_IOCTL_START falla\r\n" )));

}

}

Si aún no funciona, ¡pregunta nuevamente!