关于F28335的DMA用法

参考资料:TI的ControlSuit例程里面的Example_2833xAdcToDMA.c和TI的关于DMA的Reference Guide(SPRUFB8D)

https://e2echina.ti.com/question_answer/microcontrollers/c2000/f/56/p/30915/105409

http://bbs.elecfans.com/jishu_900708_1_1.html

F28335的DMA中有几个概念不容易理解,分别是,Burst、Transfer和Wrap。

Burst:外设中断一次传输的数据,由最多32个字(16bits)组成,Burst大小用BURST_SIZE定义。

Transfer:每个通道进行一次传输时,一共传送的Burst数据,其大小用TRANSFER_SIZE定义。

Burst:每传送完一个字,将source或destination对应的BURST_STEP值加到SRC_ADDR或DST_ADDR中。

TRNSFER:有两种改变地址方式。第一种,将SRC/DST_TRANSFER STEP加到对应地址指针上,第二种,通过Wrapping方式。在wrap方式下,SRC/DST_TRANSFER STEP无效。

Wrap不好理解,结合官方的例子去看,Example_2833xAdcToDMA.c

第一个函数DMACH1BurstConfig(3,1,10);里面的三个参数分别是BURST_SIZE,SRC_BURST_STEP和DST_BURST_STEP,因为ADC的一次SOC可以采集4个通道(A0~A3),根据前面DMA的Burst介绍,可知BURST_SIZE应设置为3(=4-1);SRC_BURST_STEP应设置为1(通道连续);程序中DST_BURST_STEP设置为10通过仿真可以看到第一个ADC通道A0从DMABuf1[0]开始存储,第二个ADC通道A0从DMABuf1[11]开始存储,第三个ADC通道A0从DMABuf1[21]开始存储,第四个ADC通道A0从DMABuf1[31]开始存储,也可将该值改为其他,修改后各个ADC通道对应的DMABuf1起始地址将发生变化。

第二个函数DMACH1TransferConfig(9,1,0);里面的三个参数分别是TRANSFER_SIZE,SRC_TRANSFER_STEP和DST_TRANSFER_STEP,因为一共要进行10次SOC,每次转换4个通道,每个通道需要10个存储单元,因此TRANSFER_SIZE设置为9(=10-1);因为需要设置成Wrap方式,所以SRC_TRANSFER_STEP和DST_TRANSFER_STEP忽略。

注:Transfer结束触发DMA中断。

第三个函数DMACH1WrapConfig(1,0,0,1);里面的四个参数分别是SRC_WRAP_SIZE,SRC_WRAP_STEP,DST_WRAP_SIZE和DST_WRAP_STEP。每进行完2次burst以后,源地址回到初始位置(两次Burst正好对应4个通道每个都转换2次),每进行完1次burst,目的地址变为起始地址+1(指向DMABuf1的下一个单元)。

 

 

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: F407是STM32系列单片机的一种型号,具备模数转换器(ADC)以及直接内存访问(DMA)功能。在使用F407的ADC进行数据记录时,可以结合DMA来实现更高效的数据传输和存储。 DMA是一种特殊的数据传输方式,通过直接从外设(如ADC)读取数据,绕过CPU来完成数据的传输和存储,从而减少了CPU的负担和数据传输的延迟。在F407上,可以通过配置DMA来实现ADC数据的传输和存储。 首先,需要配置ADC的输入通道和采样率。可以指定需要采集的模拟信号输入通道,以及采样率的设置。设置好后,在开始转换前,需要使能ADC模块。 其次,需要配置DMA来接收ADC的转换结果并存储。可以选择DMA的通道,设置数据的传输方向、数据宽度和存储目的地。可以选择小端模式或大端模式,以及不同的数据宽度(如8位、16位、32位等),以适配具体的存储需求。 然后,需要启动DMA的传输并开始ADC的转换。当ADC转换完成后,DMA会自动将转换结果传输到指定的存储目的地,无需CPU干预。可以通过查询或中断的方式获取DMA传输完成的标志位,以确定数据传输已完成。 最后,可以根据存储目的地的需求,对采集到的数据进行处理和分析。这些数据可以用于后续的计算、显示或其他应用。 通过使用DMA记录F407的ADC数据,可以提高数据传输的效率和精确度,减少了CPU的负担,同时也提供了更灵活的数据处理方式。因此,DMA记录是在F407上进行ADC数据采集的一个重要方法之一。 ### 回答2: F407是一款由意法半导体(STMicroelectronics)生产的微控制器系列,它内置了多个用于模拟信号转换的模数转换器(ADC)。要使用F407的ADC进行数据记录,可以通过直接编程控制ADC模块,也可以使用DMA(直接内存访问)来实现数据的高效传输和记录。 DMA是一个硬件模块,可以在微控制器的内部实现数据的直接传输,而无需使用CPU的干预。在F407中,它可以与ADC模块配合使用,将ADC的采样结果直接传输到指定的存储区域中,以减轻CPU的负担,提高系统的效率。 使用DMA记录F407的ADC数据,需要按照以下步骤进行操作: 1. 配置ADC模块:设置ADC的采样通道、采样分辨率、采样速率等参数,并使能ADC模块。 2. 配置DMA通道:选择一个可用的DMA通道,并将其与ADC的数据寄存器相连。 3. 设置DMA传输参数:设置传输的数据长度、传输方向(从ADC到内存)、传输触发源等相关参数。 4. 配置存储区域:选择一个合适的内存区域,用于存储ADC采样的数据。 5. 启动DMA传输:使能DMA模块,并设置采样次数或触发条件,触发ADC开始采样并将数据传输到内存中。 6. 等待传输完成:可以轮询DMA传输状态标志位,或配置DMA传输完成中断,以确保数据传输完成。 通过以上步骤的配置和操作,F407的ADC可以实现使用DMA进行数据记录。使用DMA可以有效地减少CPU的负载,提高数据记录的效率和准确性,适用于需要高频率、大量数据采集和记录的应用场景,例如传感器数据采集、音频信号处理等。 ### 回答3: F407是一款由STM32生产商STMicroelectronics开发的微控制器系列,具有强大的功能和高性能特点。该系列中的微控制器F407具备了ADC(模数转换器)和DMA(直接内存访问)功能。下面将详细介绍F407的ADC使用DMA记录的过程。 首先,ADC是一种用于将模拟信号转换为数字信号的设备。F407微控制器芯片上集成了多个ADC通道,可以同时测量多个模拟输入信号。ADC的测量结果可以用来读取传感器的信号,比如温度、湿度、光强等。 接下来,为了提高数据传输效率和减少处理器负载,F407微控制器还配备了DMA功能。DMA允许数据在外设和内存之间直接传输,而无需CPU的干预。因此,在记录ADC信号时,我们可以使用DMA来自动将ADC的测量结果直接传输到指定的内存位置。 具体步骤如下: 1. 配置ADC:首先,我们需要配置ADC通道,包括输入引脚、采样时间、转换分辨率等参数。这可以通过相应的寄存器进行设置。 2. 配置DMA:接下来,我们需要配置DMA控制器。这包括选择ADC作为数据源和设置目标内存地址。 3. 启动ADC和DMA:配置完毕后,我们可以启动ADC和DMA。ADC将开始对模拟信号进行采样和转换,并将结果存储在ADC转换寄存器中。DMA将读取ADC转换寄存器中的数据,并将其传输到指定的内存位置。 4. 等待传输完成:在数据传输期间,CPU可以继续执行其他任务。我们可以使用轮询或中断方式来等待DMA传输完成。 5. 处理数据:一旦传输完成,我们可以从内存中读取ADC的测量结果进行进一步处理,比如存储、分析或显示。 总而言之,F407微控制器可通过配置ADC和DMA来实现对模拟信号的高效记录。ADC负责测量模拟信号并将结果存储在寄存器中,而DMA负责将结果传输到内存中。通过这种方式,我们可以减少CPU的负载和提高数据传输效率,从而更好地记录和处理模拟信号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值