英创信息技术ESM335x SPI驱动DMA数据收发介绍

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] = i;// 初始化数据收发buffer
rxbuf[i] = 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驱动的用户可与我们联系升级。

家居设备与仪器产生的电磁场有多强?
可擦除可编程存储IC P24CM01B介绍
高通首次推出AI引擎 打包所有软硬件算力
AI芯片神坛开始下滑
河北移动提升5G建设及优化的进度,建优同步提升质量
英创信息技术ESM335x SPI驱动DMA数据收发介绍
【节能学院】启东某生物制药公司宿舍楼电能管理系统的设计与应用
什么是蜂窝纸
小米GaN充电器65W高清图集
三星在不久的将来在2020年将One UI 3.1更新引入其他旗舰手机
一种易于建立的高性能、高可靠性隔离式电源
电动牙刷哪个牌子好?比起看牙费用,这些好牌子一点都不贵
诺基亚授权芬兰公司推出首款中国特供机
点燃我的科技感!这是要上演“酒店科幻大片”的节奏啊!
艾拉比芮亚楠:OTA是智能网联汽车战略的必经之路
5G时代的超高清视频战役谁能胜出
MotherBox:汽车无线充电的安全选择
7nm自研芯片“秀肌肉”,台积电:从不与客户竞争
Gigaphoton推出KrF激光器G300K,可提高生产性及削减成本
Exar发布Express DX1845高性能数据安全和缩减