ok6410的DMA裸机总结

发布者:Serendipity22最新更新时间:2024-07-19 来源: cnblogs关键字:ok6410  DMA 手机看文章 扫描二维码
随时随地手机看文章

1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间


2.关于DMA控制器:

(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道。210有两种DMA一种是内存与内存之间,另外则是普通的内存与外设之间。

(2)请求源:

(3)基本时序

  nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输

(4)工作模式:

•Demond模式:

如果DMA完成一次请求后如果Request仍然有效,那么DMA就认为这是下一次DMA请求,并立即开始下一次的传输


•Handshake模式:

DMA完成一次请求后等待Request信号无效,如果Request无效,DMA会无效ACK两个时钟周期,再等待下一次Request。


3.初始化

(1)源地址寄存器初始化(总线模式以及地址是否增加,还有选择通道,指定地址)

(2)目的地址寄存器初始化

(3)控制寄存器初始化(选择DMA请求源,选择源是软件还是硬件,是否重加载以及计数值决定发送多少数据)


范例代码:


/*

S3C6410中DMA操作步骤:

1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);

2、开启DMAC控制,设置DMAC_Configuration寄存器;

3、清除传输结束中断寄存器和错误中断寄存器;

4、选择合适的优先级通道;

5、设置通道的源数据地址和目的数据地址(设置DMACC_SrcAddr和DMACC_DestAddr);

6、设置通道控制寄存器0(设置DMACC_Control0);

7、设置通道控制寄存器1,(传输大小,设置DMACC_Control1);

8、设置通道配置寄存器;(设置DMACC_Configuration)

9、使能相应通道(设置DMACC_Configuratoin);

*/



#define SDMA_SEL                  (*((volatile unsigned long *)0x7E00F110))

#define DMACIntTCClear          (*((volatile unsigned long *)0x7DB00008))

#define DMACIntErrClr              (*((volatile unsigned long *)0x7DB00010))

#define DMACConfiguration          (*((volatile unsigned long *)0x7DB00030))

#define DMACSync                 (*((volatile unsigned long *)0x7DB00034))

#define DMACC0SrcAddr             (*((volatile unsigned long *)0x7DB00100))

#define DMACC0DestAddr             (*((volatile unsigned long *)0x7DB00104))

#define DMACC0Control0          (*((volatile unsigned long *)0x7DB0010c))

#define DMACC0Control1          (*((volatile unsigned long *)0x7DB00110))

#define DMACC0Configuration     (*((volatile unsigned long *)0x7DB00114))



#define UTXH0              (volatile unsigned long *)0x7F005020


char src[100] = 'nrHello World-> This is a test!nr';



void dma_init()

{

    //DMA控制器的选择(SDMAC0)

    SDMA_SEL = 0;

    

    //DMA控制器使能

    DMACConfiguration = 1;

    

    

    //初始化源地址

    DMACC0SrcAddr = (unsigned int)src;

    

    

    //初始化目的地址

    DMACC0DestAddr = (unsigned int)UTXH0;


    //对控制寄存器进行配置

    /*

    源地址自增

    目的地址固定、

    目标主机选择AHB主机2

    源主机选择AHB主机1

    */


    DMACC0Control0 =(1<<25) | (1 << 26)| (1<<31);  /* 25选择目的地址 26源地址增长  31中断允许位  */

    DMACC0Control1 = 0x64;     //传输的大小

    

    

    

    /*

    流控制和传输类型:MTP 为 001

    目标外设:DMA_UART0_1,源外设:DMA_MEM

    通道有效: 1

    */


    DMACC0Configuration = (1<<6) | (1<<11) | (1<<14) | (1<<15); /* 6选择目的地址是否为外设   11流控位 memory to peripheral 14and15 中断屏蔽 */


                

}


void dma_start()

{

    //开启channel0 DMA

    DMACC0Configuration  = 1;    

}


关键字:ok6410  DMA 引用地址:ok6410的DMA裸机总结

上一篇:ok6410的LCD裸机范例
下一篇:linux MTD系统解析,

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

stm32F103 DMA通道
[单片机]
stm32F103 <font color='red'>DMA</font>通道
基于Linux嵌入式系统的ISA总线DMA的实现
     1.DMA概述   DMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PIO)方法,也即由CPU通过内存读写指令或I/O指令来持续地读写外设的内存单元(8位、16位或32位),直到整个数据传输过程完成。 (2)DMA,即由DMA控制器(DMA Controller,简称DMAC)来完成整个数据传输过程。在此期间,CPU可以并发地执行其他任务,当DMA结束后,DMAC通过中断通知CPU数 据传输已经结束,然后由CPU执行相应的ISR进行后处理。   DMA技术产生时正是ISA总线在PC中流行的时侯。因此,ISA卡的DMA数据传输是通过ISA总
[嵌入式]
STM32CubeMX学习笔记6:按键控制DMA串口发送
MCU:STM32F103ZET6 IDE: MDK-ARM V5 +STM32CubeMX5.0.0 串口调试助手:SSCOM3.2 功能描述:通过KEY_UP按键控制DMA串口1数据的传送。 需要配置DMA,串口USART1,使能按键中断,LED提示灯。 一. 在 Pinout&Configuration---System Core中: 1. 首先设置时钟RCC的HSE(外部高速时钟)为晶振模式:Crystal/ceramic Resonator 2. 设置系统SYS的Debug为Serial Wire: 3. 设置GPIO中的LED管脚。 在MCU管脚图中找到PC0和PC1管脚(查原理图对应
[单片机]
STM32CubeMX学习笔记6:按键控制<font color='red'>DMA</font>串口发送
基于STM32介绍DMA的双缓冲模式
目前STM32家族中有些系列支持DMA的双缓冲模式,比如STM32F2/STM32F4/STM32F7等系列。尤其随着人们对STM32F4/F7系列应用不断拓宽和加深,在设计中运用到DMA双缓冲的场合也越来越多。STM32芯片中的DMA又可分为两大类,一类是通用DMA,一类是专用DMA,比如用于USB,TFT LCD,ETHERNET等外设应用上的DMA。这里要谈的是基于通用DMA的话题,不妨以STM32F4系列芯片为例。 关于STM32F4的DMA双缓冲传输在STM32F4系列的参考手册里做了简单描述。因为它是基于介绍了单缓冲模式的DMA介绍之后接着介绍的,稍显言简意赅。 相比单缓冲的数据流,双缓冲多了一个DMA存储区和
[单片机]
基于STM32介绍<font color='red'>DMA</font>的双缓冲模式
嵌入式stm32学习:DMA-存储到外设
bsp_usart_dma.h #ifndef __USART_DMA_H #define __USART_DMA_H #include stm32f4xx.h #include stdio.h //USART #define DEBUG_USART USART1 #define DEBUG_USART_CLK RCC_APB2Periph_USART1 #define DEBUG_USART_RX_GPIO_PORT GPIOA #define DEBUG_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA #define DE
[单片机]
40.DMA基本原理与配置
一。DMA简介 如果没有DMA,我们要把一个数据从一个空间复制到另外一个空间,需要先把数据读进CPU,然后再写到另外一个空间。当用了DMA后就不再需要CPU,DMA控制器可以开启一个传输通道,直接把数据从一个空间传到另外一个空间。 二。DMA框图 DMA1有7个通道,DMA2有5个通道。仲裁器用来处理优先级。 DMA请求来自于外设,经过仲裁器连接到相应的通道,通过DMA总线去访问存储器。 DMA可以把外设某个寄存器的数据通过DMA开辟一个通道直接传输到存储器,或者从存储器传输到外设。 三。STM32的DMA的特性 注: 每个通道对应不同的外设,使用的时候要根据外设选择相对应的通道。 四。DMA
[单片机]
40.<font color='red'>DMA</font>基本原理与配置
换体DMA高速数据采集电路的CPLD实现
摘要:介绍了块体DMA高速数据采集电路原理及其CPLD实现。用CPLD设计双端口RAM缓存、控制译码、时序逻辑电路,很好地解决了电路元件所占体积大、电路复杂、不能实现在线升级等问题,大大提高了系统的整体性能。 关键词:换体DMA CPLD 双端口RAM 在线升级 在许多仪器和控制系统中,高速数据采集电路是必不可少的,也是经常需要解决的问题。数据采集电路设计方法很多,但往往离不开A/D转换电路、数据缓存电路、控制逻辑电路、地址发生器、址译码电路等。而数据缓存、控制逻辑、地址译码等电路通常是由RAM芯片、与非门、触发器、缓冲/驱动器等构成,导致数据采集电路复杂、芯片繁多,特别是硬件的固定使得采集系统在线升级几乎不可能。很多情况下只有重新
[半导体设计/制造]
小广播
设计资源 培训 开发板 精华推荐

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

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

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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