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

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

3天内不再提示

DMA数据传输(源代码分享)

电子工程师 来源:网络整理 作者:工程师3 2018-04-27 09:22 次阅读

手头项目也需要加入DMA数据传输,以最大限度地提升CPU效率,于是测试了一下XMEGA的DMA模块,把一块内存中的数据DMA传输到另外一块内存,DMA传输完成后,在中断函数中显示“DMAFinished”,提示DMA成功完成数据传输,另外DMA使用更多的情况是大量数据到USART、SPI等,本文只是小试牛刀。

效果如下,

源代码:

#define DMA_BUFFER_SIZE 1024

#define DMA_CHANNEL 0

uint8_t source[DMA_BUFFER_SIZE],destination[DMA_BUFFER_SIZE];

static void fill_pattern(uint8_t *buffer, size_t len)

{

int i;

for (i = 0; i 《 len; i++) {

buffer = 42 ^ (i & 0xff) ^ (i 》》 8);

}

}

static bool verify_pattern(uint8_t *buffer, size_t len)

{

for (size_t i = 0; i 《 len; i++) {

if (buffer != (42 ^ (i & 0xff) ^ (i 》》 8))) {

return false;

}

}

return true;

}

void dma_test(void)

{

struct dma_channel_config config;

fill_pattern(source, DMA_BUFFER_SIZE);

memset(destination, 0, DMA_BUFFER_SIZE);

dma_enable();

memset(&config, 0, sizeof(config));

/*

* This example will configure a DMA channel with the following

* settings:

* - Low interrupt priority

* - 1 byte burst length

* - DMA_BUFFER_SIZE bytes for each transfer

* - Reload source and destination address at end of each transfer

* - Increment source and destination address during transfer

* - Source address is set to ef source

* - Destination address is set to ef destination

*/

dma_channel_set_interrupt_level(&config, DMA_INT_LVL_LO);

dma_channel_set_burst_length(&config, DMA_CH_BURSTLEN_1BYTE_gc);

dma_channel_set_transfer_count(&config, DMA_BUFFER_SIZE);

dma_channel_set_src_reload_mode(&config,

DMA_CH_SRCRELOAD_TRANSACTION_gc);

dma_channel_set_dest_reload_mode(&config,

DMA_CH_DESTRELOAD_TRANSACTION_gc);

dma_channel_set_src_dir_mode(&config, DMA_CH_SRCDIR_INC_gc);

dma_channel_set_dest_dir_mode(&config, DMA_CH_DESTDIR_INC_gc);

dma_channel_set_source_address(&config, (uint16_t)(uintptr_t)source);

dma_channel_set_destination_address(&config,

(uint16_t)(uintptr_t)destination);

dma_channel_write_config(DMA_CHANNEL, &config);

/* Use the configuration above by enabling the DMA channel in use. */

dma_channel_enable(DMA_CHANNEL);

/*

* Enable interrupts as the example is now configured to handle them

* properly.

*/

cpu_irq_enable();

/*

* Trigger a manual start since there is no trigger sources used in

* this example.

*/

dma_channel_trigger_block_transfer(DMA_CHANNEL);

pmic_init();

cpu_irq_enable();

while(1);

}

ISR(DMA_CH0_vect)

{

gfx_mono_draw_string(“DMA Finished”,0,0,&sysfont);

}

int main(void)

{

。。。

dma_test();

。。。

}

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

    关注

    68

    文章

    10412

    浏览量

    206465
  • 数据传输
    +关注

    关注

    9

    文章

    1515

    浏览量

    63556
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    98971
收藏 人收藏

    评论

    相关推荐

    基于labview的远程数据传输

    跪求基于labview的远程数据传输源代码
    发表于 07-03 16:32

    Serial RapidIO接口DMA数据传输

    数据传输本人已经在多个基于DSP和PowerPC信号处理板上调试验证了Serial RapidIO Endpoint Master DMA功能.1. Master DMA Write数据传输
    发表于 08-23 13:27

    DMA数据传输速率是多少?

    DMA数据传输速率是多少?由于DMA与CPU无关,所以CPU的速率可能不高。你知道DMAC的时钟是什么吗? 以上来自于百度翻译 以下为原文What is the rate of data
    发表于 05-14 11:13

    请问怎样去设计一种Ultra DMA数据传输系统?

    怎样去设计Ultra DMA数据传输系统的硬件部分?怎样去设计Ultra DMA数据传输系统的软件部分?
    发表于 05-26 06:36

    怎样去实现DMA数据传输的有效进行呢

    过程时不可能像PL端那样能实现精准的时序控制,为了实现整个DMA数据传输的有效进行,需要明白数据传输的整个过程。以下面工程为例来对传输过程进行描述。如上图所示主要是完成PS端
    发表于 01-07 06:22

    MPC5748G无法通过DMA传输数据传输到终端上的UART怎么解决?

    已经实现了以下代码以在 MPC5748G 中使用 eDMA 通过 UART 通道传输数据。 但我无法通过 DMA传输
    发表于 05-05 06:16

    DMA进行数据传输和CPU进行数据传输的疑问

    求大佬解答,本人正在学习STM32单片机中DMA直接数据存储部分的内容 看了DMA简介后,也上手过实例代码,但是没有实际的项目经验,所以有以下疑问:
    发表于 05-25 17:18

    数据传输速率是什么意思

    数据传输速率是什么意思 数据传输速率是通过信道每秒可传输的数字信息量的量度。数据传输速率也称为吞吐率。数据传输速率由很
    发表于 03-18 14:45 4937次阅读

    数据传输中的成帧

    什么是数据传输中的成帧 数据传输中的成帧 成帧技术是一种用来在一个比特流内分配或标记信道的技术,为电信提供选择基本的时隙结构和管理方式、错误
    发表于 03-18 14:46 3668次阅读

    datamover完成ZYNQ片内PS与PL间的数据传输

    到PL的数据传输相对简单,使用vivado自带的axi_datamover即可完成,详细如下: A、向PL端查询剩余数据存储长度(以byte为单位); B、通过写寄存器设置PL端DMA数据传输
    发表于 02-08 01:00 1491次阅读
    datamover完成ZYNQ片内PS与PL间的<b class='flag-5'>数据传输</b>

    DMA数据传输在SPEAR300实现高速串口驱动设计

    DMA数据传输无需CPU的参与,是一种更加高效的数据传输方式。现有的DMA数据传输方案都是基于DMA
    发表于 04-04 12:23 1447次阅读
    <b class='flag-5'>DMA</b><b class='flag-5'>数据传输</b>在SPEAR300实现高速串口驱动设计

    STM32定时器触发DMA数据传输失败的原因如何解决

    有人使用STM32的定时器事件触发DMA,让其将内存数据传输到通信外设的数据寄存器进行发送,发现DMA根本就不动作。
    的头像 发表于 11-25 09:21 2w次阅读
    STM32定时器触发<b class='flag-5'>DMA</b><b class='flag-5'>数据传输</b>失败的原因如何解决

    STM32CubeMX-串口开启DMA进行数据传输

    STM32CubeMX笔记-串口开启DMA进行数据传输
    发表于 12-27 18:40 7次下载
    STM32CubeMX-串口开启<b class='flag-5'>DMA</b>进行<b class='flag-5'>数据传输</b>

    浅析AXI DMA收发数据传输过程

    MAIP的M_AXI_MM2S接口接收到数据完成后通过mm2s_introut接口输出高电平告诉PS端DMA接收数据传输完成,PS端开始执行发送中断程序。
    发表于 10-11 15:16 1943次阅读

    SPI数据传输有哪些方式

    SPI 数据传输可以有两种方式:同步方式和异步方式。 同步方式:数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用
    的头像 发表于 07-25 10:54 3269次阅读
    SPI<b class='flag-5'>数据传输</b>有哪些方式