0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-04 10:22 次阅读

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驱动的用户可与我们联系升级。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6084

    浏览量

    35148
收藏 人收藏

    评论

    相关推荐

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 290次阅读

    AM335x功耗估算工具

    电子发烧友网站提供《AM335x功耗估算工具.pdf》资料免费下载
    发表于 10-12 11:46 0次下载
    AM<b class='flag-5'>335x</b>功耗估算工具

    AM335x硬件设计指南

    电子发烧友网站提供《AM335x硬件设计指南.pdf》资料免费下载
    发表于 09-19 11:05 0次下载
    AM<b class='flag-5'>335x</b>硬件设计指南

    AM335x Sitara™处理器数据

    电子发烧友网站提供《AM335x Sitara™处理器数据表.pdf》资料免费下载
    发表于 08-08 13:07 0次下载
    AM<b class='flag-5'>335x</b> Sitara™处理器<b class='flag-5'>数据</b>表

    STM32H743VIT6使用SPI+DMA无法驱动2.4寸怎么解决?

    常了,但是使用STM32H743同样使用Cubemx生成代码,同样在初始化后加入HAL_SPI_DMAResume( hspi2);但是实测SPI+DMA发送无法驱动屏幕,如果使用HAL_SP
    发表于 07-02 08:12

    ESP32如何使用SPIDMA?

    module:ESP-WROOM-32 IDF Version:ESP-IDF 4.3 各位,ESP32的技术手册中有关于SPI DMA的描述,但是在ESP-IDF编程指南https
    发表于 06-18 08:18

    做I2S/SPI DMA发送数据的时候,遇到DMA fifo传输错误的原因?

    在做I2S/SPI DMA发送数据的时候,遇到DMA fifo传输错误,不确定是软件问题还是芯片问题,有做出来的兄弟可以给个最简单的工程参考参考吗,先谢谢了。
    发表于 04-30 08:08

    SPI+DMA方式驱动ADC芯片

    SPI+DMA方式驱动ADC芯片的例程吗
    发表于 04-26 17:53

    stm32f4下spi+dma读取数据不对是什么原因导致的?

    STM32F4用的HAL库,SPI3+DMA方式读取25FL512S片子数据,读出来的数据错误,之前没用DMA的时候读出来的数据是对的,为了
    发表于 04-19 06:07

    STM32H7 SPI使用DMA模式,W25Q256数据读写不正确的原因?

    主芯片是 STM32H743XSPI-FLASH是 W25Q256,使用HAL库(V1.8)。 如果SPI不使用DMA模式,则 W25Q256
    发表于 04-11 06:34

    STM32G0B1RE 从SPI+DMA返回数据时开始3个字节错误的原因?怎么解决?

    您好,我在使用STM32G0B1RE的SPI1作为从设备,数据收发采用DMA方式,通过STM32CubeIDE配置工程,SPI
    发表于 04-07 06:20

    STM32G070的SPI CRC 16位校验功能使用DMA方式传输,数据收发生错误的原因?

    使用SPI CRC校验功能,DMA发送和接收,如果是CRC 8位校验没有问题,改成16位就发生接收数据错误,跟踪调试是进入到SPI_DMAReceiveCplt函数执行到
    发表于 04-02 08:07

    使用CubeMX配置STM32F407VGT6的SPI DMA发送16位数据,时钟有波形的原因?

    使用CubeMX配置STM32F407VGT6的SPI DMA发送16位数据,时钟有波形,MOSI无数据,上电就是高电平,其他CLK有波形的时候也还是高电平,发送的
    发表于 03-28 07:40

    请问tc233 Uart收发数据如何绑定到DMA

    请问tc233 Uart收发数据如何绑定到DMA?绑定到DMA之后中断触发还是原来的 IfxCpu_Irq_installInterruptHandler()这个函数里绑定的中断服务函
    发表于 01-22 06:27

    dma和通道技术的区别

    DMA是一种通过绕过中央处理器(CPU)来直接访问内存的机制。它允许外部设备(如硬盘驱动器、网卡等)直接与内存进行数据传输,而无需通过CPU的干预。DMA的设计理念是提高
    的头像 发表于 01-04 14:31 2073次阅读