DMA 优点是其进行数据传输时不需要 CPU 的干涉,可以大大提高 CPU 的工作效率。
DMA 大容量数据传输中非常重要,比如图像数据传输, SD 卡数据传输, USB 数据传输等等。
S3C2410 有四个 DMA ,每个 DMA 支持工作方式基本相同,但支持的 source Dest 可能略有不同。
那么怎么使用 DMA 呢, S3C2410 内部集成了 DMA 控制器,我们只需要简单的配置一下寄存器就可以实现 DMA 的传输了。
步骤与要点:
1.数据从哪里来,到哪里去?
使用 DMA 当然首先我们要知道数据的流向, DISRCx 寄存器是 DMA 初始源寄存器存放了数据的源地址。 DIDSTx 是 DMA 的初始目的寄存器,应该存放数据的目的地址。
2.数据走得什么总线?地址是否是固定的?
我们还要知道源与目的数据存储设备是在什么总线上( AHB 系统总线,一般是高速的比如内存, APB 外围总线低速的,比如 SD , UART );
以及数据传输结束以后起始地址还原到发送前的起始地址呢,还是在现在的末尾 +1 做为新的起始地址。
这些设置在 DISRCCx 与 DIDSTCx 两个寄存器里面配置。
3.数据以什么方式传输?源与目的是什么设备?要不要自动重载?
需要确定数据的传输方式有请求还是握手(推荐使用 HANDSHAKE ) , 根据上面的总线确定与什么时钟同步( HCLK , PCLK ),是单元传输还是突发传输,是以字节传输还是字传输,是否重载。是单服务(只发送一次)还是多服务(不停循环发送),以及数据的传送大小。
选择源与目的设备,这里 DMA 控制器支持:
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
最后还要确定中断是不是传输结束发生( CURR_TC 记数是不是 0 )。
这些都在 DCONx 中设置。
4.怎么开始传输 DMA 和停止 DMA ,这些在 DMASKTRIG 中设置。
下面是 DMA 在 SD 卡中使用的一段示例:
SD 卡读的 DMA 设置:
pISR_DMA0=(unsigned)DMA_end; //DMA 中断服务函数入口地址,一次 DMA 传送结束发生 rINTMSK = ~(BIT_DMA0); // 开 DMA 中断
rDISRC0=(int)(Tx_buffer); // 源地址在内存 就是从内存读数据到 SD 卡
rDISRCC0=(0<<1)+(0<<0); // 内存的总线是 AHB, 地址是自动增加 inc
rDIDST0=(U32)(SDIDAT); // 目的地址 SD 卡
rDIDSTC0=(1<<1)+(1<<0); // 在总线 APB, 地址是固定的因为 SD 的 FIFO 是固定大的
rDCON0=(1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(2<<20)+128*block;
//handshake 握手模式 , 与 PCLK 同步 , 发送完产生中断 , 单元传输 , 单服务 , SDI
// 不自动重载 , 每次发送一个字 , 发送大小
rDMASKTRIG0=(0<<2)+(1<<1)+0; // 不停止 , DMA0 channel 启动 , 不用 SW 触发
SD 卡写的相应代码
pISR_DMA0=(unsigned)DMA_end;
rINTMSK = ~(BIT_DMA0);
rDISRC0=(int)(Tx_buffer);
rDISRCC0=(0<<1)+(0<<0);
rDIDST0=(U32)(SDIDAT);
rDIDSTC0=(1<<1)+(1<<0);
rDCON0=(1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(2<<24)+(1<<23)+(1<<22)+(2<<20)+128*block;
rDMASKTRIG0=(0<<2)+(1<<1)+0;
上一篇:ARM汇编指令格式及规则
下一篇:裸机系列——DMA总结
推荐阅读最新更新时间:2024-11-11 12:40
推荐帖子
- 【IoT毕设】机智云物联网平台+arduinoNano控制板+全自动高效智能种树小车
- 摘要:针对目前人工种树效率低的问题,设计了一种全自助高效智能种树小车。介绍了装置的结构组成,剖析了装置的运动机理。通过SolidWorks三维软件对传动部件进行了结构设计。利用蓝牙模块实现了种植过程的信息传递、发送命令等,物联网机智云模块可以实时上报种植数据至云平台。制作了装置模型样机,试验测试结果表明:该装置完成一棵树的种植时间需要约8.45s,完成区域10m10m的土地种植时间需要约73.85s。装置完全实现了自动运树、挖坑、下树、填坑、浇水等功能,为树木自动种植领域的研究奠定了基础
- 毛球大大 RF/无线
- 交直流两用暗室安全灯
- lorant 移动便携
- 【Follow me第二季第1期】入门任务+基础任务一
- 大家好,我是小神123,很荣幸能够入选【Followme第二季第1期】活动,作为活动参与者,跟着官方一起学习adafruitcircuitplaygrandexpress这款开发板。第一次参加【followme】活动,自己是一名电子爱好者,接着这次机会,可以让自己对编程有个更加深入的动手实践,大大提升自己的动手能力以及思维逻辑能力,同时再次感谢得捷电子给予此次机会。这款开发板AdafruitCircuitPlaygroundExpress是一体化设计板,具有处理器、
- 小神123 DigiKey得捷技术专区
- 有木PCB的QQ交流群?
- 论坛有没关于PCB的QQ交流群?这样有疑惑可以随时解决,各位有的话可以回帖给我~谢谢有木PCB的QQ交流群?
- dirty PCB设计
- 综合报告求助 时间违规
- Timingconstraint:DefaultperiodanalysisforClock\'pll_2clk_inst/CLKOUT1_BUF\'Clockperiod:2.813ns(frequency:355.492MHz)Totalnumberofpaths/destinationports:229/73-------------------------------------------------------------------
- zsy5460 FPGA/CPLD
- 四创GPS定位lll型汽车行驶记录仪(附图)
- GPS定位III型汽车行驶记录仪将汽车行驶记录仪、语音通话、语音图像、调度、导航、娱乐、防暴等功能融为一体的新款产品。您可以通过调度中心传来的信息,了解道路情况。在对道路不是很熟悉的情况下,通过电子地图,了解您身在何处,并且很容易就找到您想去的地方。您还可以在停车休息的时候听听歌,看看VCD(DVD),尽情地放松自己。当有紧急事件发生的时候,您可以触动报警装置,调度中心将立即获得您所在的位置信息和报警信息,并采取相应的措施。采用分体式设计(一体设计),现场语音图像传输方便管理调度人员了解现场情况
- frozenviolet 汽车电子
设计资源 培训 开发板 精华推荐
- LTC3621IMS8E-23.3 1.2Vout、同步至 600kHz、强制连续模式同步降压型稳压器的典型应用
- 使用 NXP Semiconductors 的 UBA2000T 的参考设计
- LT6200 的典型应用 - 165MHz、轨到轨输入和输出、0.95nV/vHz 低噪声运算放大器系列
- HB LED驱动器,基于QFN封装的ST1CC40,具有禁止功能
- 纯洁PCB尺子系列
- MC33072DR2G高速低压比较器典型应用
- LTC1662IN8 超低功耗、双 10 位 DAC 在 MSOP 中的典型应用
- OP213FSZ-REEL7 低噪声运算放大器电压基准的典型应用
- 嵌入式小车_1.0V
- LT1172HVIQ 的典型应用,1.25A 外部电流限制