DMA直接存储器读取

1、数据搬运时不需要cpu参与
2、可以为源地址到目的地址开辟一条信息传输的通道。

芯片手册中相关章节:

DMAMUX:DMA的选择器
eDMA:DMA的控制器

DMA使用时要有的基本参数:

1、源地址 目的地址(来源和去向)
2、传输的数据字节数
3、每次搬运的数据位宽?8,16位?
4、传输的开始时间,每次的触发源是什么。
5、每次传输完成之后需不需要调整源地址和目的地址,调整多少。


DMA触发源选择在DMA MUX request sources中选择

DMA中传输具有两层嵌套循环,分为主循环和子循环。因此一次传输也就是 主循环*子循环


实现数据通过DMA进行搬运具体流程:

1、初始化DMA相关参数配置,主要分为对DMA整体配置,源地址和目标地址参数配置。首先要选择使用的是通道几。

我们本次使用的芯片拥有16路的通道。本次的实验中选择通道0。触发源根据需要进行选择,本次配置为一直触发。以及配置相应的普通模式。并且配置每次小循环的缓冲区大小和大循环的次数。

    DMA_InitTypeDef DMA_InitStruct = {0};DMA_InitStruct.chl=HW_DMA_CH0;                                          //选择通道0DMA_InitStruct.chlTriggerSource=MUX1_DMAREQ;                            //触发源选择为Always EnabledDMA_InitStruct.triggerSourceMode=kDMA_TriggerSource_Normal;             //普通模式DMA_InitStruct.minorLoopByteCnt=sizeof(SourceBuffer);                      //设置小循环的次数为sd缓存区的大小DMA_InitStruct.majorLoopCnt=1;                                          //设置主循环的次数为1

2、对需要搬运数据的源地址和目标地址进行初始化操作。

初始方式相似,首先将相应的源地址和目的地址传入结构体的sAddr和dAddr中。
设置每次主循环完成之后数据地址是否产生偏移以及偏移了多少。
设置每次读取之后数据的偏移量。
设置每次传输的数据宽度。
modulo模式用于对传输的数据地址进行锁定,比如配置为4则锁定4位数据一个0x0000123==4==读取的数据将只能在0x0000123==0==~0x0000123==F==之间进行循环。该功能通常用于循环读取,本次的例程中并未用到因此失能。
 DMA_InitStruct.sAddr=(uint32_t)SourceBuffer;DMA_InitStruct.sLastAddrAdj=0;DMA_InitStruct.sAddrOffset=1;DMA_InitStruct.sDataWidth=kDMA_DataWidthBit_16;                         //数据的宽度设置为16位的位长DMA_InitStruct.sMod=kDMA_ModuloDisable;                                 //禁用modulo模式DMA_InitStruct.dAddr=(uint32_t)DestBuffer;                               //目的地址DMA_InitStruct.dLastAddrAdj =0;                                         //每次执行完主循环之后地址向后偏移0DMA_InitStruct.dAddrOffset=1;                                           //每次读取了地址之后地址向后偏移1DMA_InitStruct.dDataWidth=kDMA_DataWidthBit_16;DMA_InitStruct.dMod=kDMA_ModuloDisable;DMA_Init(&DMA_InitStruct);                                               //初始化

3、配置好相关参数之后设置DMA中断回调函数DMA_ISR()

该函数中需要设置DMA完成了一次主循环或者半次循环后需要执行的相关代码,按需求配置。

DMA_CallbackInstall(HW_DMA_CH0, DMA_ISR);

4、设置中断的触发方式,为传输一半触发还是传输完成触发

DMA_ITConfig(HW_DMA_CH0, kDMA_IT_Major, true);

5、最后使能DMA传输即可

DMA_EnableRequest(HW_DMA_CH0);/* 启动DMA传输 */

小记:

%p 输出变量的内存地址。

%o以八进制数形式输出整数。

%x以十六进制数形式输出整数。

编译时出现function“memset”declared implicitly原因:
使用了memset所以需要在头文件中添加#include “string.h”
memset()作用:可以方便的清空一个结构类型的变量或数组。
例如:memset(sd_clear, 0, sizeof(sd_clear)); //清空sd_clear数组中的数据

渡鸦MK60学习 【DMA直接存储器读取】相关推荐

  1. 渡鸦MK60学习 【点亮一个LED】

    目标:点亮E6位置的LED灯-将E6口置为低电平输出即可 实现方法:寄存器直接控制 一.准备工作 使用开发板为Kinetis K60-渡鸦系列开发板. 芯片为ARM-M4 内核的 MK60DN512Z ...

  2. 渡鸦MK60学习 【ADC-PGA单通道16位数据采集】

    K60ADC外设特征 == • Linear successive approximation algorithm with up to 16-bit resolution== • Up to fou ...

  3. TF学习——TF数据读取:TensorFlow中数据读这三张图片的5个epoch +把读取的结果重新存到read 文件夹中

    TF学习--TF数据读取:TensorFlow中数据读这三张图片的5个epoch +把读取的结果重新存到read 文件夹中 目录 实验展示 代码实现 实验展示 代码实现 1.如果设置shuffle为T ...

  4. ffplay.c学习-2-数据读取线程

    ffplay.c学习-2-数据读取线程 目录 准备⼯作 avformat_alloc_context 创建上下⽂ ic->interrupt_callback avformat_open_inp ...

  5. Adam学习25之读取sam生成的alignmentRecord含recordGroupDictionary

    Adam学习25之读取sam生成的alignmentRecord含recordGroupDictionary 1.代码: package org.bdgenomics.adam.testimport ...

  6. 【深度学习】高效读取数据的方法(TFRecord)

    Record顾名思义主要是为了记录数据的. 使用TFRocord存储数据的好处: 为了更加方便的建图,原来使用placeholder的话,还要每次feed_dict一下,使用TFRecord+ Dat ...

  7. [pytorch、学习] - 4.5 读取和存储

    参考 4.5 读取和存储 到目前为止,我们介绍了如何处理数据以及如何构建.训练和测试深度学习模型.然而在实际中,我们有时需要把训练好的模型部署到很多不同的设备.在这种情况下,我们可以把内存中训练好的模 ...

  8. (pytorch-深度学习系列)读取和存储数据-学习笔记

    读取和存储数据 我们可以使用pt文件存储Tensor数据: import torch from torch import nnx = torch.ones(3) torch.save(x, 'x.pt ...

  9. 【opencv学习】【读取图像、视频、摄像头】

    今天学习opencv 一:读取图像 import cv2# 展示图像,封装成函数 def cv_show_image(name, img):cv2.imshow(name, img)cv2.waitK ...

最新文章

  1. 机器学习算法基础——k-means原理
  2. mysql 金额 类型,SQL实现根据类型对金额进行归类
  3. Resin 的 watchdog(看门狗)介绍
  4. Spring Cloud Stream 与 Kafka 整合
  5. 计算机应用对口升学后能学啥专业,计算机应用专业的对口升学生考什么大学好...
  6. 事务的传播性和隔离级别
  7. ffmpeg 为取经而来_伊力特的英雄情结从何而来?
  8. 看别人情侣空间显示服务器繁忙什么意思,调查13000位80后年轻人,他们的感情状态究竟如何?...
  9. 你为什么选择计算机这个专业英语,怎样选择计算机专业,英文作文:为什么选择计算机作为你的专业...
  10. JS去除数组中重复的值(四种方法)
  11. 【线段树】Interval GCD【线段树维护gcd】
  12. NetSpeedMonitor
  13. 服务器推送微信订阅消息,微信小程序-订阅消息服务通知
  14. Matlab/Simulink 自动代码生成 基于模型设计学习教程(2)---- 闪烁灯实验
  15. PAT 乙级 1020  月饼
  16. 新概念英语(第一册)复习(原文及全文翻译)——Lesson 61 - Lesson 90
  17. 集智全球开源 聚合中国力量 Tungsten Fabric中文社区成立大会暨社区第一次全员大会成功举行
  18. 均方根误差(RMSE)的含义是什么以及误差大小多少适合?
  19. CMNET和CMWAP GPRS 连接
  20. 全世界研发者,联合起来!

热门文章

  1. 360 和 QQ 和解了
  2. TCP/IP 详解(第 2 版) 笔记 / 目录
  3. Java基础零碎知识点,有这一篇就够了!
  4. 家具防霉方案(适用于家具厂)
  5. “老子”是伟大的多核计算科学家
  6. html三角形渐变颜色,三角形箭头的css渐变
  7. work group和domain的区别
  8. arduino数字时钟元件_数字元器件基础
  9. 2014年八大最热门IT技能
  10. ippr_z2C$qAzdH3FAzdH3F--百度图片网址解密的补充