mini2440裸机DMA(1)

发布者:创意旋律最新更新时间:2020-02-29 来源: eefocus关键字:mini2440  裸机  DMA 手机看文章 扫描二维码
随时随地手机看文章

第8章 直接存储器存取DMA

在DMA章接种一共有四个通道的DMA源,而每一种源由包括9个寄存器。则我们只需要配置好久个寄存器就可以操作好DMA了。


这里主要以通道0位讲解


第一个寄存器 DISRC

pDMA->DISRC=srcAddr;        //设置源地址


第二个 寄存器DISRCC

pDMA->DISRCC=(0<<1)|(0<<0); //设置源控制寄存器   inc,AHB


第三个寄存器 DIDST

pDMA->DIDST=dstAddr;        //设置目的地址


第4个寄存器 DIDSTC0

pDMA->DIDSTC=(0<<1)|(0<<0); //设置目的控制寄存器 inc,AHB


第5个寄存器 DCON

pDMA->DCON=(1<<31)|(1<<30)|(1<<29)|(burst<<28)|(1<<27)|


           (0<<23)|(1<<22)|(dsz<<20)|(tc);


//DMA控制寄存器  HS,AHB sync,enable interrupt,whole, SW request mode,relaod off

第6个寄存器 DSTAT

第7个寄存器 DSTAT

第8个寄存器 DSTAT

s3c2440提供了4个通道的DMA,它们不仅可以实现内存之间的数据交换,还可以实现内存与外设,以及外设与外设之间的数据交换。要用好s3c2440的DMA,关键是配置好它的源、目的寄存器,和必要的控制寄存器。寄存器DISRCn是初始DMA源寄存器,它是用于设置DMA数据传输的源基址,而寄存器DIDSTn是初始DMA目的寄存器,它是用于设置DMA数据传输的目的基址。初始DMA源控制寄存器DISRCCn的第1位用于选择源的总线系统总线AHB还是外设总线APB),第0位用于设置源基址在数据传输过程中是递增还是固定不变。初始DMA目的控制寄存器DIDSTCn的低两位与寄存器DISRCCn相识,但它是用来设置目的基址,而第2位用于设置是在传输完数据之后中断还是在自动重载后中断。DMA控制寄存器DCONn用于控制数据的DMA传输,第31位用于设置传输协议是需求模式还是握手模式,第30位用于选择同步时钟是PCLK还是HCLK,第29位用于设置DMA中断是否发生,第28位用于选择传输大小是单元传输还是突发传输,第27位用于选择服务模式是单步模式还是完全模式,第24位到第26位用于设置DMA的请求源,第23位用于设置DMA的源是软件还是硬件,第22位用于设置是否需要重载传输的目的和源基址,第20位和第21位用于设置数据传输的数据大小(字节、半字还是字),低20位用于初始化传输数据的个数。而通过读取DMA状态寄存器DSTATn的低20位可以获知当前的传输的计数。DMA掩码触发寄存器DMASKTRIGn的第2位可以终止当前DMA操作,第1位可以用于开启DMA通道,第0位则表示在软件请求模式下触发DMA通道。

 

资料来源于


2440中文手册


https://blog.csdn.net/zhaocj/article/details/5583935


第9个寄存器 DSTAT

pDMA->DMASKTRIG=(1<<1)|1; //DMA on, SW_TRIG

#define _NONCACHE_STARTADDRESS   0x31000000


DMA_M2M(0,_NONCACHE_STARTADDRESS,_NONCACHE_STARTADDRESS+0x800000,0x80000,0,0); //byte,single


DMA_M2M(0, 0x31000000, 0x31000000+0x800000,0x80000,0,0); //byte,single

关键字:mini2440  裸机  DMA 引用地址:mini2440裸机DMA(1)

上一篇:keil4.74中运行s3c2440程序出现警告 进行一步骤修改
下一篇:mini2440裸机之按键(1)

推荐阅读最新更新时间:2024-11-07 23:06

驱动开发之 DM9000 (for mini2440
内核版本:linux-2.6.32.2 实验平台:mini2440 1. 添加平台设备支持 首先需要在mach-mini2440.c中包含头文件 linux/dm9000.h ,dm9000平台设备定义如下: /* DM9000AEP 10/100 ethernet controller */ #define MACH_MINI2440_DM9000_BASE (S3C2410_CS4 + 0x300) static struct resource mini2440_dm9000_resource = { = { .start = MACH_MINI2440_DM9000_BASE, .end = MAC
[单片机]
驱动开发之 DM9000 (for <font color='red'>mini2440</font>)
基于mini2440的boa服务器移植
win7 系统 开发板:mini2440 虚拟机:ubuntu12.04 准备工作:确保主机与开发板之间能够正常通信,即能够ping通,具体的操作课参考我上一篇随笔。 1.首先从 http://www.boa.org/ 下载boa的源码,并将其加压出来 2.生成makefile 进入到boa的src文件夹内,运行./configure 修改Makefile文件,如下所示: 然后运行make,这个时候有可能报错,常见的两种错误情况是: make: yacc:命令未找到 make: *** 错误 127 make: lex:命令未找到 make: *** 错误 127 这时候
[单片机]
基于<font color='red'>mini2440</font>的boa服务器移植
MSP430 SPI接口DMA模式通信
因为在tinyos系统下,节点写flash的速度过慢,开始怀疑是不是SPI的速度有问题,所以后来就直接在IAR上裸机读写FLASH,看看速度可以去到多少。用到了430的SPI的DMA模式 DMA模式之所以会更快,是因为所要传输的数据省去了要经过CPU处理这一步,直接在内部总线传输到DMA寄存器,然后DMA寄存器在根据情况通过总线传输到目标寄存器。这里的总线,我也还没搞清楚。在DMA传输数据的时候,虽然说CPU可以继续干自己的活,但是如果CPU要使用总线的话,而总线被DMA占用了,这时候该怎么办? void SpiDmaSend(uint8_t cmd,uint8_t *tx_addr, uint8_t *rx_addr,uint1
[单片机]
2.关于MINI2440下载的问题
1.打开快速下载工具选择Linux 2.在选择Images目录中选择压缩包下的images 3.修改Liunx Kernel,选择对应的屏幕类型 4.点击开始烧写 5.点击快速启动 6.运行的效果 7.使用SD卡脱机快速安装系统的方法 Mini2440已经支持通过SD卡脱机烧写系统,即烧写系统不再需要PC和USB数据线,这个功能需要借助Nor Flash中的Superboot来进行,Mini2440开发板在出厂时已经往Nor Flash中烧写好Superboot,无需客户自行烧写,你只需要做的是: 准备一张SD卡,先将SD卡格式化为FAT格式,然后将2440光盘下整个image目录拷到SD卡中。 默
[单片机]
2.关于<font color='red'>MINI2440</font>下载的问题
STM32笔记--ADC(DMA方式)
在上一次的博客中重新学习了DMA,这次我们便学以致用了,ADC的概念想必大家都是十分清楚了,模拟转数字,可以用在测信号,测电压,在我们的生活中有着十分巨大的作用,这次我们就来看看ADC又有哪些操作吧! ADC流程,首先ADC采集一个信号(信号范围大都为0-3.3V,ps:3.3V可通过更改Vref寄存器修改),每隔相同时间菜一次数值发送到一个可变16位数中,下面是我们的数组定义: __IO uint16_t ADC_ConvertedValue; //定义该16位数用来传输数据,原因是我们使用的12位AD,由于寄存器的定义方便,因此使用16位数 下面是ADC的初始化和配置代码: void ADC1_Init(void
[单片机]
OMAP5910实时图像系统中的DMA数据传输
  引言   实时图像处理系统的显著特点是数据量大,有效地处理和传输图像数据是实现实时图像处理系统的关键,TI公司推出了高性能多媒体双核处理器OMAP5910,是将高性能、低功耗的TMS320C55x DSP与控制性能很强的ARM925微处理器集成到同一芯片器件中如何有效地发挥双核的优势,合理利用OMAP5910的各种内存配置DMA控制器实时、高效传输大规模的图像数据是本文研究的重点。    1 OMAP5910的内存管理   由于OMAP5910支持多种内存,因此在设计DMA传输方案时,必须对OMAP5910的内存管理有一个详细的了解。   OMAP5910的MPU存储器片内集成了192KB的SRAM,DSP存储器片内集
[嵌入式]
OMAP5910实时图像系统中的<font color='red'>DMA</font>数据传输
趣谈STM32的ADC与DMA
最近在做ADC采样电池电压,有时候有点纠结,不用DMA我能很好的把电压给采集出来,那么我为什么要费那些精力去使用DMA呢?用了DMA万一搞错了呢,不用DMA的效果还没有影响到让我非用不可的地步。我有时候确实会有这些小纠结,不想太麻烦,一分钟能做出来的事情,不想用两分钟做出来。但是看到网上很多人一谈到ADC立马就开始说各种DMA,仿佛这种类似的数据外设到内存的传输非DMA不可。 网上的一篇文章详细的讲述了ADC外设和DMA的来龙去脉,非常清晰,在此摘抄下来用以学习:原文地址 : http://m646208823.blog.163.com/blog/static/1669029532012217115010531/ 作为一个偏向工
[单片机]
趣谈STM32的ADC与<font color='red'>DMA</font>
STM32 USART使用DMA设置
1、外设时钟初始化 首先初始化需要用到的外围设备设备的时钟,需要初始化的始终有USART RX DMA使用的DMA1、USART1、USART1使用的GPIO、AFIO(如果USART的管脚需要Remap则需要打开否则不用); /* DMA clock enable (USART RX using dma1) */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* USART clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); /* Enable GPIO cloc
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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