[Atmel] SAML21走起19:DMA

[复制链接]
 楼主| ddllxxrr 发表于 2015-8-28 15:20 | 显示全部楼层 |阅读模式
本例的DMA是从源数组到目标地址。各512个字节。
利用上次的工程不用新建,加入DMAC模块。

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


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


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

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



以下是程序清单:

  1. #include <asf.h>
  2. #define DATA_LENGTH (512)
  3. static uint8_t source_memory[DATA_LENGTH];
  4. static uint8_t destination_memory[DATA_LENGTH];
  5. static volatile bool transfer_is_done = false;
  6. COMPILER_ALIGNED(16)
  7. DmacDescriptor example_descriptor;
  8. static void transfer_done(struct dma_resource* const resource )
  9. {
  10.         transfer_is_done = true;
  11. }
  12. static void configure_dma_resource(struct dma_resource *resource)
  13. {
  14.         struct dma_resource_config config;
  15.         dma_get_config_defaults(&config);
  16.         dma_allocate(resource, &config);
  17. }
  18. static void setup_transfer_descriptor(DmacDescriptor *descriptor )
  19. {
  20.         struct dma_descriptor_config descriptor_config;
  21.         dma_descriptor_get_config_defaults(&descriptor_config);
  22.         descriptor_config.block_transfer_count = sizeof(source_memory);
  23.         descriptor_config.source_address = (uint32_t)source_memory +
  24.         sizeof(source_memory);
  25.         descriptor_config.destination_address = (uint32_t)destination_memory +
  26.         sizeof(source_memory);
  27.         dma_descriptor_create(descriptor, &descriptor_config);
  28. }




  29. int main (void)
  30. {
  31.         system_init();
  32.          struct dma_resource example_resource;
  33.         configure_dma_resource(&example_resource);
  34.         setup_transfer_descriptor(&example_descriptor);
  35.         dma_add_descriptor(&example_resource, &example_descriptor);
  36.         dma_register_callback(&example_resource, transfer_done,
  37.         DMA_CALLBACK_TRANSFER_DONE);
  38.         dma_enable_callback(&example_resource, DMA_CALLBACK_TRANSFER_DONE);
  39.         for (uint32_t i = 0; i < DATA_LENGTH; i++) {
  40.                 source_memory[i] = i;
  41.         }
  42.        
  43.           dma_start_transfer_job(&example_resource);
  44.           dma_trigger_transfer(&example_resource);
  45.           while (!transfer_is_done) {
  46.                   /* Wait for transfer done */
  47.           }
  48.           while (true) {
  49.                   /* Nothing to do */
  50.           }
  51. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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的一个例子
春风的暖暖 发表于 2015-8-31 21:39 | 显示全部楼层
atmel能用eclipse来开发吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部