第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
上一篇:keil4.74中运行s3c2440程序出现警告 进行一步骤修改
下一篇:mini2440裸机之按键(1)
推荐阅读最新更新时间:2024-11-07 23:06
设计资源 培训 开发板 精华推荐
- Si57X-EVB,使用 Si57x 任意频率 I2C 可编程 XO/VCXO 的评估板
- 使用 Analog Devices 的 LTC1479IG 的参考设计
- 新的比较器功能在所有条件下都可微功耗运行
- 使用 MaxLinear, Inc 的 SPX385M1-1.2/TR 的参考设计
- 使用 Analog Devices 的 LTC1555L-1.8 的参考设计
- 用于仪表的 18 位、3.75SPS、4 通道 ADC
- 智能栅极驱动耦合器评估板
- 具有集成 MOSFET 的 ER2120QI 2A、4.5 至 5.5 Vin 同步降压稳压器的典型应用电路
- TWR-MCF51JG,用于 MCF51JG256 32 位 ColdFire+ MCU 模块的开发塔式系统模块,具有 256KB 闪存和 64KB SRAM 存储器
- 基于梁山派开发板松筠的小车