完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ESM335x提供了1路4线制全双工SPI接口,可设置的波特率从1.5KHz到48MHz,ESM335x(WEC7)标准的SPI驱动采用IO模式进行数据收发,在大数据量通讯时,IO模式传输速度较慢,并且会占用相当多的CPU资源,进而影响整个系统的运行效率。 为了满足SPI大数据量传输的应用,我们对SPI的驱动进行了更新,升级后的SPI驱动程序通过DMA控制数据收发。经过对比测试,同样的传输过程,当在IO模式下CPU占用率接近100%时,采用DMA方式传输的CPU占用率仅在10%左右。ESM335x SPI接口采用DMA传输方式的数据传输率可达到每秒2MBytes。 升级后的驱动与原来的驱动程序提供的用户API函数接口完全相同,在应用程序中配置SPI参数时增加MCSPI_CHCONF_DMAR_ENABLE 和 MCSPI_CHCONF_DMAW_ENABLE宏定义即使能DMA传输,否则采用原来的IO方式时行数据传输。下面是示例代码: #include "stdafx.h" #include "mcspi.h" #define XCH_SIZE (0x2000) int _tmain(int argc, _TCHAR* argv[]) { HANDLE hSPI; BOOL rc; BYTE TxBuf[XCH_SIZE]; BYTE RxBuf[XCH_SIZE]; DWORD dwSpiConf; DWORD dwSpiCount, dwWorldSize, dwWL; DWORD i; hSPI = SPIOpen( _T("SPI1:")); if( hSPI == INVALID_HANDLE_VALUE ) goto cleanUp; dwWL = 8; // 8-bits SPI,有效的设置为4-bits至32-bits dwSpiConf = MCSP1_MODE0 | // SPI时序模式0 /* Enable DMA, Maximum buffer is 0x4000 Bytes */ MCSPI_CHCONF_DMAR_ENABLE | MCSPI_CHCONF_DMAW_ENABLE| MCSPI_CHCONF_WL(dwWL); rc = SPIConfig( hSPI, 8000000, dwSpiConf); // 波特率8MHz if( !rc ) goto cleanUp; if( dwWL > 16 ) dwWorldSize = sizeof(UINT32); else if(dwWL > 8 ) dwWorldSize = sizeof(UINT16); else dwWorldSize = sizeof(UINT8); dwSpiCount = 2000; for(i=0; i { TxBuf = i; // 初始化数据收发buffer RxBuf = 0; } dwSpiCount *= dwWorldSize; // 传输的字节数 rc = SPIWriteRead( hSPI, TxBuf, RxBuf, dwSpiCount ); if( !rc ) { // 数据传输有错,错误处理... } cleanUp: if( hSPI != INVALID_HANDLE_VALUE ) { SPIClose(hSPI); } return 0; } ESM335x SPI接口同样支持4种标准的SPI通讯模式,下图是ESM335x主芯片数据手册中对SPI各个模式的定义说明。 此次驱动升级针对ESM335x和EM335x系列的WEC7工控主板,需要更新SPI驱动的用户可与我们联系升级。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 10:17 , Processed in 0.646564 second(s), Total 57, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号