打印
[Atmel]

SAML21走起19:DMA

[复制链接]
866|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本例的DMA是从源数组到目标地址。各512个字节。
利用上次的工程不用新建,加入DMAC模块。

再打开ASF EXPLORER 打开快速指导。Quick Start Guide for Memory to Memory Data Transfer Using DMAC


按照里边的提示形成工程。


然后编译。在没有仿真之前,在目地数组名点右键加入到观察窗口。

程序运行后,源数组数据考入了目地数组中。见下面截图:



以下是程序清单:

#include <asf.h>
#define DATA_LENGTH (512)
static uint8_t source_memory[DATA_LENGTH];
static uint8_t destination_memory[DATA_LENGTH];
static volatile bool transfer_is_done = false;
COMPILER_ALIGNED(16)
DmacDescriptor example_descriptor;
static void transfer_done(struct dma_resource* const resource )
{
        transfer_is_done = true;
}
static void configure_dma_resource(struct dma_resource *resource)
{
        struct dma_resource_config config;
        dma_get_config_defaults(&config);
        dma_allocate(resource, &config);
}
static void setup_transfer_descriptor(DmacDescriptor *descriptor )
{
        struct dma_descriptor_config descriptor_config;
        dma_descriptor_get_config_defaults(&descriptor_config);
        descriptor_config.block_transfer_count = sizeof(source_memory);
        descriptor_config.source_address = (uint32_t)source_memory +
        sizeof(source_memory);
        descriptor_config.destination_address = (uint32_t)destination_memory +
        sizeof(source_memory);
        dma_descriptor_create(descriptor, &descriptor_config);
}




int main (void)
{
        system_init();
         struct dma_resource example_resource;
        configure_dma_resource(&example_resource);
        setup_transfer_descriptor(&example_descriptor);
        dma_add_descriptor(&example_resource, &example_descriptor);
        dma_register_callback(&example_resource, transfer_done,
        DMA_CALLBACK_TRANSFER_DONE);
        dma_enable_callback(&example_resource, DMA_CALLBACK_TRANSFER_DONE);
        for (uint32_t i = 0; i < DATA_LENGTH; i++) {
                source_memory[i] = i;
        }
       
          dma_start_transfer_job(&example_resource);
          dma_trigger_transfer(&example_resource);
          while (!transfer_is_done) {
                  /* Wait for transfer done */
          }
          while (true) {
                  /* Nothing to do */
          }
}


相关帖子

沙发
C洛达尔多| | 2015-8-30 09:16 | 只看该作者
这个讲的是如何用dma吗

使用特权

评论回复
板凳
跟屁虫| | 2015-8-30 10:28 | 只看该作者
这个mdk 的工程,有eclipse的吗

使用特权

评论回复
地板
ddllxxrr|  楼主 | 2015-8-30 19:56 | 只看该作者
C洛达尔多 发表于 2015-8-30 09:16
这个讲的是如何用dma吗

DMA的一个例子

使用特权

评论回复
5
春风的暖暖| | 2015-8-31 21:39 | 只看该作者
atmel能用eclipse来开发吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝