WINCE下 SPI怎么编程,(已经有驱动程序),如何初始化配置,还有MCP2515这块芯片怎么编程,都是WINCE下的

WINCE下 SPI怎么编程,(已经有驱动程序),如何初始化配置,还有MCP2515这块芯片怎么编程,都是WINCE下的,第1张

已经有驱动的悔胡话,一般都有SPI_Init,SPI_Deinit,SPI_Open,SPI_Close,SPI_Read,SPI_Write等,运雹都旁前帆是调用它们的借口进行编程的,开发好的驱动程序,一般都不需要管它的内部实现的。

“如何初始化配置”

每个平台不一样,只能自己摸索了。

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

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

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

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

2,spi_INIT失败 Error KernelIoControl问题

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

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

// If no IRQ value is specified in the registry, dwIrq will be set to IRQ_UNSPECIFIED.

// If no SYSINTR value is specified in the registry, dwSysintr will be set to 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 mode)

{

if (mode)//master

{

spiConfig.dwMode = SPI_MASTER_MODE

}

else//slave

{

spiConfig.dwMode = SPI_SLAVE_MODE

}

/*receive &send use interrupt mode, not use DMA mode*/

spiConfig.bUseRxDMA = FALSE

spiConfig.bUseRxIntr = TRUE

spiConfig.bUseTxDMA = FALSE

spiConfig.bUseTxIntr = TRUE

spiConfig.dwLineStrength = 0

spiConfig.dwFBClkSel = 0

spiConfig.Format = SPI_FORMAT_1

/*setting SPI's pre-fre and time-out value*/

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 fail\r\n")))

}

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

{

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

}

}

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12397871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存