s3c2440学习系列6(dma 续)

发布者:rockstar6最新更新时间:2022-05-28 来源: eefocus关键字:s3c2440  dma  控制器 手机看文章 扫描二维码
随时随地手机看文章

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;


关键字:s3c2440  dma  控制器 引用地址:s3c2440学习系列6(dma 续)

上一篇:裸机系列——supervivi烧写
下一篇:S3C2410:DMA介紹

推荐阅读最新更新时间:2024-11-08 12:38

s3c2440之IIS(4)S3C2440的I2S控制器
一、I2S控制器结构框图 S3C2440A的Inter-IC Sound (IIS)总线接口作为一个编解码接口连接外部8/16位立体声音频解码IC用于迷你碟机和可携式应用。IIS总线接口支持IIS总线数据格式和MSB-justified数据格式。该接口对FIFO的访问采用了DMA模式取代了中断。它可以在同一时间接收和发送数据。 图1 结构框图 1 、总线接口,寄存器组和状态机(BRFC):总线接口逻辑和FIFO 访问由状态机控制。 2、5 位双预定标器(IPSR):一个预定标器用于IIS 总线接口的主时钟发生器,另外一个用作外部编解码时钟发生器。 3、64 位FI
[单片机]
<font color='red'>s3c2440</font>之IIS(4)<font color='red'>S3C2440</font>的I2S<font color='red'>控制器</font>
飞思卡尔微控制器:如何保证强劲的发展势头
——飞思卡尔技术论坛2014全记录 在20号上午的主题演讲中,飞思卡尔总裁兼CEO Gregg Lowe先生多次向我们强调了当前聚焦的五个核心产品部门,但是对于具体的发展情况没有进行具体的说明。在下午的专场采访中,我们深度了解了五个核心产品部门的发展情况以及以后的战略规划。 首先采访的就是飞思卡尔的微控制器部门,作为飞思卡尔的核心部门以及关键技术所在,微控制器一直保持着非常良好的发展态势,在过去的2013年内,MCU同比增长了17%。“快速增长的主要原因在于,我们对于所有的MCU系列产品都进行了大量的研发投入,以保证我们在市场的竞争力。”飞思卡尔高级副总裁兼微控制器部总经理Geoff Lees在谈到MCU的发展情况时表
[半导体设计/制造]
飞思卡尔微<font color='red'>控制器</font>:如何保证强劲的发展势头
内核移植(2)arch/arm/mach-s3c2440/mach-smdk2440.c
对于s3c2410、s3c2440开发板,它们的CPU Id都是0x41129200,在arch/arm/mm/proc -arm920.S中的_ _arm920_proc_info结构中。 定义开发板参数在arch/arm/mach-s3c2440/mach-smdk2440.c中,如机器类型ID、起始I/O物理地址、Bootloader传入的参数的地址、中断初始化函数等。 arch/arm/kernel/head.S是内核执行的第一个文件。 S3c2440开发板上启动uImage时串口输出乱码的原因,开发板晶振的频率设置有问题。 1、在arch/arm/mach-s3c2440/mac
[单片机]
NI最新CompactRIO控制器可在宽温下工作
    美国国家仪器公司(National Instruments,简称NI)于2010年2月23日发布两款最新CompactRIO可编程控制器(PAC)——NI  cRIO-9023和NI cRIO-9025实时控制器,确保工程师和机器制造者在更为极端的温度条件下进行高性能测量与控制应用。这两款新的控制器还带有敷形涂层(conformal coating),保护元件和电路在恶劣环境下正常使用。     全新的CompactRIO控制器为-40℃至70℃温度下的高级测量和控制应用提供更高的处理能力。NI cRIO-9023控制器具有533 MHz PowerPC处理器,NI cRIO-9025控制器具有800 MHz P
[工业控制]
STM32F767XX微控制器的功能及特性分析
STM32F765XX、STM32F767XX、STM32F768AX和STM32F769XX设备基于高性能ARM®Cortex®-M7 32位RISC核心,工作频率高达216兆赫。Cortex®M7内核具有一个浮点单元(FPU),支持ARM®双精度和单精度数据处理指令和数据类型。它还实现了一套完整的DSP指令和一个内存保护单元(MPU),提高了应用程序的安全性。 STM32F765XX、STM32F767XX、STM32F768AX和STM32F769XX设备采用高速嵌入式存储器,闪存高达2兆字节、512千字节SRAM(包括128千字节的数据,用于关键实时数据的tcm ram)、16千字节的指令tcm ram(用于关键实时例
[单片机]
STM32F767XX微<font color='red'>控制器</font>的功能及特性分析
基于AC/DC数字电源控制器iW3610的可调光LED控制器
普通照明用LED驱动电源一般都采用基于PWM控制器的反激式变换器电路拓扑。这种解决方案虽然结构简单,但一般不能利用传统白炽灯用三端双向晶闸管(TRIAC)调光器对LED进行调光,这是因为白炽灯是一种纯电阻性负载,而AC/DC电源系统与白炽灯的情况完全不同。用iW3610型AC/DC数字电源控制器构建反激式LED驱动器,可以与所有类型的调光器兼容操作,调光范围达2%~10%,并且无闪烁现象发生,在无调光器时的功率因数达0.9,系数效率达85%。 1 iW3610的结构与特点 iW3610采用8引脚SOIC封装,引脚配置如图1所示。 iW3610芯片集成了启动和输入电压检测电路、反馈信号调节电路、A/D转换器、D/A转
[电源管理]
基于AC/DC数字电源<font color='red'>控制器</font>iW3610的可调光LED<font color='red'>控制器</font>
基于FPGA的步进电机多轴控制器设计
  步进电机 FPGA 取样针移位系统   步进电机是一种完全数字化的电动执行机构,从原理上说,其角位移与驱动脉冲的个数成正比,在正常情况下,步进电机具有使用简单、运动精确、连续运行无累积误差等特点,因而被广泛应用于各种位置控制系统中。   当前由于仪器内部的机械系统日益复杂,其运动往往是多自由度的,因而通常需要利用多个步进电机的运动合成来实现系统的各种动作。例如,对图1所示的半自动生化分析仪的取样针移位系统,该系统的动作执行就是由两部分组成的:   一是固定基座上的步进电机控制取样横臂进行垂直方向上的升降运动;   二是滑块上的步进电机控制取样横臂进行水平方向上的旋转运动。   这两个运动的合成实现了取样横臂的位置
[嵌入式]
18.DMA-6410
对于6410的DMA控制器和2440的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、
[单片机]
18.<font color='red'>DMA</font>-6410

推荐帖子

知道吗开发DSP项目需要什么工具?
与传统的微处理器一样,一个DSP项目需以下几个指标:把算法转成机器语言要使用codegentools,它主要包括c编译器,汇编器,连接器,代码生成器,闻亭公司为TI各个系列的DSP提供了这样的工具。为了验证这些算法需目标DSP来执行算法。你主要是围绕自己应用中的某一DSP来设计自己的硬件。先让硬件工作起来,可以使用现成的目标板来规范代码。目标板从闻亭公司获得用来支持通用的TIDSP。在调试过程中仿真器对控制DSP运行是必不可少的。闻亭公司销售工作在以下几种调试软件下的仿真工
fish001 DSP 与 ARM 处理器
立即填写问卷, 免费申请价值 USD50 的 C2000 Piccolo-A/B 开发套件
立即填写问卷,免费申请价值USD50的Piccolo-A/B开发套件!C2000Piccolo-A/B开发评估套件是一个基于32位C28x内核的微控制器的通用评估平台,支持针对TMS320F2802x或TMS320F2803x系列所有产品的软硬件开发评估。该套件是开发者用于初期设备评估和测试的理想产品,Piccolo开发评估套件包含一个TMS320F28027或TMS320F28035评估板和一个XDS100USB的高性能仿真器。评估板可直接
tiankai001 Microchip MCU
使用C/C++语言编写基于TMS320系列DSP程序的注意事项
1、不影响执行速度的情况下,可以使用C或C/C++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用fabs()或abs()函数,也可以使用if...else...判断语句来替代。2、要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静态变量。3、一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断向量表中的中断名是任意取定的,DSP是不认名字的,它只认地址!!中断
Jacktang DSP 与 ARM 处理器
51单片机到底使用哪种晶振好
从定时器中断准确的角度看,12M的晶振可以算出每个机器周期为1微妙从串口的角度看,使用11.0592M可以准确算出定时器起始值我现在要自己设计一个电路板,请问使用哪种好呢?谢谢。51单片机到底使用哪种晶振好11.0592M更好定时器的中断周期好像跟机器周期没什么关系不过51的话22.1184M也可以啊C51的最大晶振是24M的用来玩的问题都不大用来做产品的话,先用可靠的,再用便宜的我现在主要是想做一个电子钟,又要有串口下载功能是不是选用12M的晶振更好些?建议用12m
shenyesanbu 嵌入式系统
LLC拓扑电源死区时间一般都是IC内部自己定义的么?
各位老师好,在学习LLC拓扑电源时,也发现其他地方有这个问题,一直没有解决。看看咱们这里的老师是否知道,LLC拓扑电源死区时间一般都是IC内部自己定义的么?所以就想问是否还有其他方式可以进行调整。主控芯片为英飞凌的IDP2303A,资料如下附件中,如下图为该IC的datasheet和原理图,谢谢。LLC拓扑电源死区时间一般都是IC内部自己定义的么?
kal9623287 电源技术
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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