當前位置:歷史故事大全網 - 故事大全 - WINCE 6.0 SPI驱动如何工作起来

WINCE 6.0 SPI驱动如何工作起来

给你一些意见,我自己总结的,不知道对不对!

1,如何编译出spi.dll文件

BSP默认是不生成spi.dll文件 的,可以通过设置smdk210.bat文件中的BSP_NOSPI=1设置为BSP_NOSPI=即可,因为

在source文件中添加了!if "$(BSP_NOSPI)" == "1" SKIPBUILD= 1 !endif 选项

2,spi_INITFail Error KernelIoControl问题

找到原因是isri.dwIrq的值为-1

解决办法:在DDKReg_GetIsrInfo的定义 中看到

// 如果注册表中没有指定IRQ值,dwIrq将被设置为IRQ_UNSPECIFIED。

// 如果注册表中没有指定SYSINTR值,dwSysintr将被设置为IRQ_UNSPECIFIED。 设置为SYSINTR_NOP。

这里需要设置配额WRITE_REG_DWORD(DrvKey,L"Irq", DriverIRQ); DriverIRQ为spi的物理中断号

不需要设置Sysintr,一般采用动态申请的方式。

还要设置WRITE_REG_DWORD(DrvKey,L"DeviceArrayIndex", DriverDeviceArrayIndex);这是什么我也不知道

3,对spi的初始化

static void InitSpiConfig(BOOL 模式)

{

if (mode)//master

{

spiConfig.dwMode = SPI_MASTER_MODE;< /p>

}

else//从机

{

spiConfig.dwMode = SPI_SLAVE_MODE;

}

/*接收发送使用中断模式,不使用DMA模式*/

spiConfig.bUseRxDMA = FALSE;

spiConfig.bUseRxIntr = TRUE;

< p> spiConfig.bUseTxDMA = FALSE;

spiConfig.bUseTxIntr = TRUE;

spiConfig.dwLineStrength = 0;

spiConfig.dwFBClkSel = 0;

>

spiConfig.Format = SPI_FORMAT_1;

/*设置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 失败\r\n")));

}

if( DeviceIoControl(hdDevice, SPI_IOCTL_START, NULL, NULL, NULL, NULL, NULL, NULL)!=TRUE )

{

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

}

}

如果还是不行的话,再问吧!

  • 上一篇:職業能力傾向測驗與綜合應用能力有什麽區別?
  • 下一篇:天使之音(下)電子書txt全集
  • copyright 2024歷史故事大全網