S3C2410:DMA介紹

发布者:明理厚德最新更新时间:2022-05-25 来源: eefocus关键字:S3C24  DMA 手机看文章 扫描二维码
随时随地手机看文章

之所以要介绍DMA,因为它对性能太重要了!只有活用了DMA,CPU的性能才能上去!S3c2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具体见Datasheet。


这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。


Atomic transfer:指的是DMA的单次原子操作,它可以是Unit模式(传输1个data size),也可以是burst模式(传输4个data size),具体对应DCON[28]。

Data Size:指的是单次原子操作的数据位宽,8、16、32,具体对应DCON[21:20]。

Request Source:DMA请求的来源有两种,软件&硬件模块,由DCON[23]控制;当为前者时,由软件对DMASKTRIG寄存器的位0置位触发一次DMA 操作。当为后者时,具体来源由DCON[26:24]控制,不同硬件模块的某时间触发一次DMA操作,具体要见不同的硬件模块。
   
DMA service mode:DMA的工作模式有两种,单一服务模式&整体服务模式。前一模式下,一次DMA请求完成一项原子操作,并且transfer count的值减1。后一模式下,一次DMA请求完成一批原子操作,直到transfer count等于0表示完成一次整体服务。具体对应DCON[27]。


RELOAD:在reload模式下,当transfer count的值变为零时,将自动加src、dst、TC的值加载到CURR_DST、CURR_SRC、CURR_TC,并开始一次新的DMA传输。该模式一般和整体服务模式一起使用,也就是说当一次整体服务开始后,src、dst、TC的值都已经被加载,因此可以更改为下一次服务的地址,2410说明文档中建议加入以下语句来判断当前的服务开始,src、dst、TC的值可以被更改了:while((rDSTATn & 0xfffff) == 0) ;

Req&Ack:DMA请求和应答的协议有两种,Demard mode 和 Handshake mode。两者对Request和Ack的时序定义有所不同:在Demard模式下,如果DMA完成一次请求如果Request仍然有效,那么DMA就认为这是下一次DMA请求;在Handshake模式下,DMA完成一次请求后等待Request信号无效,然后把ACK也置无效,再等待下一次Request。这个设计外部DMA请求时可能要用到。


传输总长度:DMA一次整体服务传输的总长度为:

Data Size × Atomic transfer size × TC(字节)。

 

2410的DMA支持四类DMA传输:系统总线到系统总线(ASB/AHB to ASB/AHB),系统总线到外设总线(ASB/AHB to APB),外设总线到系统总线(APB to ASB/AHB),外设总线到外设总线(APB to APB)。


2410共有四条DMA通道,每条通道5个请求源。

Ch0:nXDREQ0,UART0,SDI,Timer,USB EP1
Ch1: nXDREQ1,UART1,I2SSDI,SPI0,USB EP2
Ch2:I2SSDO,I2SSDI,SDI,Timer, USB EP3
Ch3:UART1,SDI,SPI1,Timer, USB EP4

2410 DMA 三个比较重要的信号,引用2410官方文档:
DMA REQ: In the Single service mode, these three states of main FSM are performed and then stops, and waits for another DMA REQ. And if DMA REQ comes in, all three states are repeated.

DMA ACK: DMA ACK is asserted and then deasserted for each atomic transfer. In contrast, in the Whole service mode, main FSM waits at state-3 until CURR_TC becomes 0. Therefore, DMA ACK is asserted during all the transfers and then deasserted when TC reaches 0.

INT REQ: INT REQ is asserted only if CURR_TC becomes 0 regardless of the service mode (Single service mode or Whole service mode).

2410 DMA状态机:
2410 的DMA使用一个具有三个状态的有限状态机进行DMA 传输的流程控制,引用2410官方文档:
State-1. As an initial state, the DMA waits for a DMA request. If it comes, it goes to state-2. At this state, DMA ACK and INT REQ are 0.
State-2. In this state, DMA ACK becomes 1 and the counter (CURR_TC) is loaded from DCON[19:0] register. Note that the DMA ACK remains 1 until it is cleared later.
State-3. In this state, sub-FSM handling the atomic operation of DMA is initiated. The sub-FSM reads the data from the source address and then writes it to destination address. In this operation, data size and transfer size(single or burst) are considered.


每当一次DMA操作结束,不管是使用什么服务模式,DMA状态机都会自动地从状态三回到状态一,开始另一次操作。注意这里信号是DMA REQ 和 DMA ACK,而最终引脚信号是nXDREQ 和 nXDACK,所以最后实际输出的电平与这里的描述是相反的。


2410 DMA 的服务模式:
共有两种服务模式,一种是单一服务模式(single service),另外一种是整体服务模式(whole service)。


在单一服务模式下,不使用传统的DMA计数器,三个DMA状态被顺序执行一次后停止,等待DMA 请求再一次来临后再重新开始另一次循环。


在整体服务模式下,使用传统的DMA 计数器,状态机会停留在状态三,直到DMA计数器的值减为零,再回到状态一,等待下一次DMA请求。


2410 DMA 数据传输模式:
共有两种数据传输模式:
单位数据传输模式:执行一次读操作和一次写操作。
并发数据传输模式:执行四次读操作和四次写操作。

关键字:S3C24  DMA 引用地址:S3C2410:DMA介紹

上一篇:s3c2440学习系列6(dma 续)
下一篇:S3C2410 DMA原理与实例

推荐阅读最新更新时间:2024-11-11 10:39

【STM32小知识】DMA入门
DMA 全称 Direct Memory Access(直接存储器访问), 是STM32的一个外设,它的特点在于: 在不占用CPU的情况下将数据从存储器直接搬运到外设,或者从外设直接搬运到存储器,当然也可以从存储器直接搬运到存储器。 比如在需要串口发送大量数据的时候,CPU只需要发起DMA传输请求,然后就可以去做别的事情了,DMA会将数据传输到串口发送,DMA传输完之后会触发中断,CPU如果有需要,可以对该中断进行处理,这样一来CPU的效率是不是大大提高了? 在STM32L431RCT6中有 2 个 DMA 外设:DMA1 和 DMA2,每个DMA外设有 7 个通道,每个通道都是独立的,配置DMA的时候有几个关键点:
[单片机]
UART需要使用DMA发送吗?
DMA一种在嵌入式实时任务处理中常用的功能。 而UART发送数据包,使用DMA方式能大量减轻CPU处理的时间,使其CPU资源不被大量浪费,尤其在UART收发大量数据包(如高频率收发指令)时具有明显优势。 Ⅰ简述DMA DMA:Direct Memory Access,直接内存存取/访问。简单来说就是内存RAM直接和其他设备(外设)进行数据交互,而不需要CPU参与的一种控制器。 DMA它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的数据复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 ⅡDMA优点 DMA在系统
[单片机]
stm32 双adc 采集问题 dma数据有一个没有 adc2为0
配置那些就不说了,我这里是同步规则采样,共4通道: view plain copy /* Regular Channel ² ¼ ³ ¼ . ³ adc ,dma 32bit , 16bit adc1 , 16bit adc2 */ ADC_RegularChannelConfig(ADC1, CH0_ADL1, 1, ADC_SampleTime_13Cycles5);//0 ADC_RegularChannelConfig(ADC1, CH1_ADL2, 2, ADC_SampleTime_13Cycl
[单片机]
STM32单片机实现DMA+ADC+UART功能
突然想测试一下STM32单片机ADC采样速率问题,按照常规方法,可以通过ADC采样,然后将采样值打印出来。但是这种方法在处理和打印数据的时候会占用很多时间,导致处理数据的时间超过了ADC的采样时间。于是想到了ADC采样的数据用DMA功能存储,并通过串口打印。但是串口打印依然要占用单片机时间,那能不能串口数据的输出也采用 DMA功能呢?这样ADC采样的数据通过DMA直接存储,然后串口通过DMA功能直接输出采样到的数据。这样速度程序执行速度不就极大的提升了吗?说干就干,使用STM32F103C8T6单片机,标准库函数,keil5软件,编写一个测试程序。 首先实现ADC采样并通过DMA存储 #ifndef __ADC_H #de
[单片机]
STM32单片机实现<font color='red'>DMA</font>+ADC+UART功能
ARM学习《十一》—不用库函数自己动手配置STM32中的DMA
今天调试的STM32的DMA部分,第一次接触这部分,8位的单片机没有这部分的功能,一开始感觉这东西很神秘,所以怀着敬畏的心情来学习它。慢慢的发现这确实是个好东西,功能强大,可以分担CPU的任务。但它没有想象中那么棘手。 DMA英文全称是Direct Memory Access,意思是直接存储器访问。他的作用就是不需要经过CUP进行数据传输,也就是替CPU分担点事情做,什么事情?数据传输方面的事情。也就是说,你只要使能并配置好了DMA,DMA就可以将一批数据从源地址搬运到目的地址去而不经过CPU的干预,这样可以为CPU节省好多精力去干更重要的事情很人性化。就像我们人一样,我们平常习惯性的动作是不用经过大脑思考的,比如说眨眼睛,
[单片机]
基于STM32的串口DMA发送
问题描述 使用STM32的串口进行DMA发送(Noraml模式),在某个任务中连续调用两次发送函数log_printf(),但是发回的数据在串口调试助手上显示与预期不符。第一次发送的数据有一部分被第二次发送的数据覆盖,如图所示: 任务代码如下: /* Log_Task function */void Log_Task(void const * argument) { /* USER CODE BEGIN Log_Task */ /* Infinite loop */ for(;;) { if(router_rx_flag == 1) { router_rx_flag = 0; log_printf(“Get okrn”); l
[单片机]
基于STM32的串口<font color='red'>DMA</font>发送
STM32F0xx_DMA收发USART数据配置详细过程
前言 关于DMA(Direct Memory Access)的功能,前面关注我微信的人应该知道,其实我已经在F1芯片上简单讲了一下。有网友要求在F0讲解一下使用DMA收发串口数据。今天就应网友要求总结一下在F0芯片上,使用DMA方式传输(收发)USART数据的功能。 在多种芯片上(F0、F1、F2、F3、F4)了解过DMA模块功能的朋友可能会发现一个特点,就是DMA的功能有很多相似的地方,甚至是一样。其实,每一个模块在不同系列芯片(甚至不同厂商)基本上是大同小异,这就是所谓的触类旁通。对于软件开发也是一样的,当你学会某一项语言的开发,接触其他语言的开发就很容易了。这里我想说,其实我对ST大部分芯片(全系列芯片STM8、STM32)
[单片机]
STM32F0xx_<font color='red'>DMA</font>收发USART数据配置详细过程
stm32ADC的DMA模式
//变量定义 __IO uint16_t ADCConvertedValue ; //ADC 外设的数据寄存器 #define ADC1_DR_Address ((uint32_t)0x4001244C) //ADC_DR(ADC规则数据寄存器),偏移量=0x4c ADC1(0x40012400-0x400127ff) //ADC1_GPIO配置 void ADC1_GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure PC.01 (ADC Channel11) as analog inpu
[单片机]

推荐帖子

参与问卷调查赢好礼:罗德与施瓦茨-车载以太网及其一致性测试方案 回馈您的需求!
观看罗德与施瓦茨-车载以太网及其一致性测试方案的精彩视频,你不可错过的精华都在这里。活动详情罗德与施瓦茨-车载以太网及其一致性测试方案回馈您的需求看视频有好礼活动时间:即日起-2017年11月05日活动流程:1、观看车载以太网及其一致性测试方案的精彩视频;2、点击“立即参与”按钮,参与问卷调查,即有机会获赠精美礼品。(共50份)活动奖品:参与问卷调查赢好礼:罗德与施瓦茨-车载以太网及其一致性测试方案回馈您的需
EEWORLD社区 测试/测量
motorola 锁相环PLL教材
很不错的资料,拿出来分享一下,回帖我再发新的内容motorola锁相环PLL教材我的金币都不够用了Re:motorola锁相环PLL教材
netkernel 模拟电子
51键盘扫描问题
我的学习板上是3*3的键盘,数码管位选是直接接P2口的,我的目的是按几数码管就显几,不按的时候就不显,但现在发现我按几是显示了几,但不按的时候数码管还是有显示程序如下,看看问题出在哪,有位高手说要用定时动态扫描,能不能具体说下#includereg52.h#defineuintunsignedint#defineucharunsignedcharsbitdig1=P2^0;sbitdig2=P2^1;sbitdig3=P2^2;sbitdig4=P2
zjjone1023 51单片机
在交流固态继电器输出串一个整流二极管可用来控制直流电机
原先一直担心这种接法不能用:交流固态继电器(非增强型)是双向可控硅输出的,串上一个二极管后输出原理上是输出脉动的直流(半波),原理上相当与单向可控硅输出的方式,因为没实际做实验,所以老感觉有什么地方不踏实,今天我用电灯炮做负载,用示波器看了负载波形,是半波的脉动直流,这下总算安心了,可惜没有直流电机,不然就试试控制电机调速怎么样(这种脉动的直流当然对电机的损坏要比直流电大,一般的应用不考虑损耗的话是可以用的。)以后还是多多做实验啊,这样会更安心点。在交流固态继电器输出串一个整流二极管可用来控
gsy 工控电子
保持电源系统中高效可靠的设计方案
DC-DC转换器输入端的电容在保持转换器稳定性方面发挥着重要的作用,并有助于滤除输入端的电磁干扰(EMI)。DC-DC转换器输出端的大电容则会给电源系统带来艰巨的挑战。DC-DC转换器的许多下游负载需要电容才能正确工作。这些负载可以是脉冲式功率放大器或输入端需要电容的其它转换器。如果负载端的电容值超过直流电源系统设计能够处理的极限,电源系统的电流可能在启动和正常工作期间超出其最大额定值。电容还能引起电源系统的稳定性问题,导致错误的系统操作和过早的电源系统失效。  遇到给大电容负载供电
fish001 模拟与混合信号
模拟设计为工程师软肋,教育缺失是根本
分析2304份有效调查问卷发现,工程师认为最具挑战性的设计前五位分别为EMI/EMC设计、射频设计、低噪声电路设计、信号处理和电源管理,分别占到受访工程师总数的42%、33%、30%、27%和24%,而EMI/EMC设计、射频设计、低噪声电路设计和电源管理都直接关系到模拟电路设计。模拟电路设计成为中国电子设计工程师面临的最大设计挑战。模拟电路设计挑战分析“模拟电路设计更像一门艺术而不是一门科学。”这是业界对模拟设计特点的高度总结,而艺术的东西是需要时间去沉淀的,本次参加调查的所有回复
fighting 模拟电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved