首先在前面的实例中,在dev文件夹下增加dma.c文件,然后把它加入到该目录的Makefile里面:


这样就框架就好了,接下来打开dma.c来实现:
首先打开2440的芯片手册:
我们要操作的是串口0,对应的是通道0:

对应的源寄存器:

对应的控制寄存器:

该寄存器只有两个位:

可以看到DMA控制寄存器的[1]位是绝对用的是AHB,还是APB总线。这是从第一章的原理图:

可以看到内存用的是AHB总线。
所以源地址的源寄存器应该被设置为:


目的地址:

目的地址的控制寄存器:


目的寄存器的控制寄存器有三位:
[2]位是控制中断产生的时机,这里选择的是默认,就是设置为0,当计数到0的时候产生中断。
[1]位是选择是AHB或者APB去存放位置,这里是串口,是APB:[1]=1.

[0]位是控制在数据传输的过程中,目的地址是否需要变化。这是就一个串口接收数据,所以地址不用变化,所以[0]=1。

上面是DMA发送和接受的寄存器设置,还有一个DMA控制寄存器的设置:

这里是DCON0寄存器的[26:24]:

是设置DMA源的,这是使用的是UART0,所以[26:24]=001。
[23]位是表示DMA源是软件还是硬件,这是我们是串口,是硬件,所以是1:

[22]位控制的是,当你发送完数据后是否重新发送,这里是不用重复发送的,所以设置1:

TC[19:0]位是用来告诉DMA发送数据的大小,DMA才知道啥时候结束。上面Hello FORFISH的长度为13,所以:

最终是:

到这里DMA的control寄存器的设置就结束了。
最后的函数:

该函数就设置好了DMA控制器,接下来就是要设置打开DMA,当DMA打开之后就可以进行数据传输了。


这里打开DMA只需要将DMASKTRIG0寄存器的[1]位设置为1即可:

涉及的寄存器列表:

注意:最后一个UTXH0是要该寄存器的地址,而不是寄存器的值。定义的时候注意。
在main.c里调用DMA的操作函数:

修改好了之后make:

烧写到开发板,NandFlash启动:

可以看到,通用DMA的方式,把字符串传递到了串口了,实现DMA的机制。
关键字:DMA
引用地址:
17.DMA-2440
推荐阅读最新更新时间:2026-03-23 10:53
17.DMA-2440
首先在前面的实例中,在dev文件夹下增加dma.c文件,然后把它加入到该目录的Makefile里面: 这样就框架就好了,接下来打开dma.c来实现: 首先打开2440的芯片手册: 我们要操作的是串口0,对应的是通道0: 对应的源寄存器: 对应的控制寄存器: 该寄存器只有两个位: 可以看到DMA控制寄存器的 位是绝对用的是AHB,还是APB总线。这是从第一章的原理图: 可以看到内存用的是AHB总线。 所以源地址的源寄存器应该被设置为: 目的地址: 目的地址的控制寄存器: 目的寄存器的控制寄存器有三位: 位是控制中断产生的时机,这里选择的是默认,就是设置为0,当计数到0的时候产生中断。 位
[单片机]
S3C2440 DMA 驱动示例
将 DMA 抽象为一个字符设备,在初始化函数中调用 void *dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp) 函数来分配两段物理地址连续的空间,一段作为源空间,一段作为目的空间。 然后将物理地址进行 ioremap 供驱动使用,最后调用 register_chrdev 来注册这个字符设备。 DMA 的 regs: #define DMA0_BASE_ADDR 0x4B000000 #define DMA1_BASE_ADDR 0x4B000040 #define DMA2_
[单片机]
s3c2440学习系列6(dma 续)
DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CPU的工作效率。 DMA大容量数据传输中非常重要,比如图像数据传输,SD卡数据传输,USB数据传输等等。 S3C2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同。 那么怎么使用DMA呢,S3C2410内部集成了DMA控制器,我们只需要简单的配置一下寄存器就可以实现DMA的传输了。 步骤与要点: 1.数据从哪里来,到哪里去? 使用DMA当然首先我们要知道数据的流向,DISRCx寄存器是DMA初始源寄存器存放了数据的源地址。DIDSTx是DMA的初始目的寄存器,应该存放数据的目的地址。 2.数据走得什么总线
[单片机]
mini2440之ads下dma测试
在网上找到一个dma的ads工程,将其dma功能整到了原来的ads工程TQ2440_Test里面 用下面的main.c换下原来TQ2440_Test的main.c http://download.csdn.net/detail/songqqnew/3636198 之所以要介绍DMA,因为它对性能太重要了!只有活用了DMA,CPU的性能才能上去!S3c2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具体见Datasheet。 这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。 Atomic transfer:指的是DMA的单次原子操作,
[单片机]
S3C DMA使用方法,2410-2440 dma介绍
这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。 Atomic transfer:指的是DMA的单次原子操作,它可以是Unit模式(传输1个data size),也可以是burst模式(传输4个data size),具体对应DCON 。 Data Size:指的是单次原子操作的数据位宽,8、16、32,具体对应DCON 。 Request Source:DMA请求的来源有两种,软件&硬件模块,由DCON 控制;当为前者时,由软件对DMASKTRIG寄存器的位0置位触发一次DMA 操作。当为后者时,具体来源由DCON 控制,不同硬件模块的某时间触发一次DMA操作,具体要见不同的硬件模块。
[单片机]
mini2440硬件篇之DMA
1. 硬件原理 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于CPU与慢速及中速外设之间的数据交换。但当高速外设要与系统内存或者要在系统内存的不同区域之间进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率。直接存储器存取(DMA)就是为解决这个问题提出的,采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送。 SC2440支持位于系统总线与外围总线之间的四通道DMA控制。每一通道的DMA都可以处理一下四种情况: 1.源和目的器件均可以在系统总线 2.源器件在系统总线而目的器件在外围总线
[单片机]
陈老师告诉你STM32单片机的DMA怎么使用
DMA技术的运用合乎真香定律,是提高单片机CPU程序执行效率的常用方法之一,但是在其运用前须要对很多的寄存器进行初始配置,对新手不够友好,今天我以串口为例,来带大家梳理一下DMA的运用方法,理清概念之间的关系,帮助大家更好的掌握和运用DMA技术. ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程和毕业设计指导,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像白色字体加我也能领取哦,记得口令陈老师/// 串口是单片机最常用的外设,一般可用于达到多机的通讯功能.(串口USART1在单片机内部的位置如下图1处所示),CPU是控制和计算核心(如下图2处所示),DMA也能够认为是一个内部的控制器,(如下图3处所示)
[单片机]