S3C2440 - DMA传输(以字符传输为例)

发布者:花开堂前最新更新时间:2020-06-09 来源: eefocus关键字:S3C2440  DMA传输  字符传输 手机看文章 扫描二维码
随时随地手机看文章

一、使用DMA的优点及DMA支持的请求源


1、DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CPU的工作效率。


2、DMA在大容量数据传输中非常重要,比如图像数据传输,SD卡数据传输,USB数据传输等。

3、S3C2440有四个DMA,每个DMA支持的工作方式基本相同,但支持的DMA请求源可能略有不同。如下为四个DMA通道分别支持的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


那么怎么使用DMA呢,S3C2440内部集成了DMA控制器,我们只需要简单的配置一下寄存器就可以实现DMA的传输了。


二、DMA配置步骤及要点: (参考点击打开链接)


1. 数据从哪里来,到哪里去?

使用DMA首先我们要知道数据的流向,DISRCx寄存器是DMA初始源寄存器,存放了数据的源地址。DIDSTx是DMA的初始目的寄存器,存放数据的目的地址。


2. 数据走的什么总线?地址是否是固定的?

我们还要知道源与目的数据存储设备在什么总线上(AHB系统总线,一般是高速的比如内存,APB外围总线,低速的比如SD,UART;具体走什么总线可以在datasheet上查到);以及数据传输结束以后起始地址还原到发送前的起始地址呢,还是在现在的末尾+1做为新的起始地址。这些设置在DISRCCx与DIDSTCx两个寄存器里面配置。

3. 数据以什么方式传输?源与目的是什么设备?要不要自动重载?

需要确定数据的传输方式有请求还是握手,根据上面的总线确定与什么时钟同步(HCLK,PCLK),是单元传输还是突发传输,是以字节传输还是字传输,是否重载。是单服务(只发送一次)还是多服务(不停循环发送),以及数据的传送大小。选择源与目的设备。最后还要确定中断是不是传输结束发生(CURR_TC记数是不是0)。这些都在DCONx中设置。

4. 怎么开始传输DMA和停止DMA,这些在DMASKTRIG中设置。




三、操作实例(以DMA传输一段字符到控制台为例)


/*

*版权所有(C)2015,ZJU

*

*文件名称:dma.c

*内容摘要:关于DMA的配置

*其它说明:开发板型号: TX2440

*    注意Uart_Init中,设置UCON0寄存器时TX的方式要设置为DMA模式

*当前版本:V1.0

*作    者:Frank

*完成日期:2015.12.19

*

*/

 

#define  DISRC0 (*(volatile unsigned long *)0x4B000000) //DMA 0 initial source register

#define  DISRCC0 (*(volatile unsigned long *)0x4B000004) //DMA 0 initial source control register

#define  DIDST0 (*(volatile unsigned long *)0x4B000008) //DMA 0 initial destination register

#define  DIDSTC0 (*(volatile unsigned long *)0x4B00000C) //DMA 0 initial destination control register

#define  DCON0 (*(volatile unsigned long *)0x4B000010) //DMA 0 control register

#define  DMASKTRIG0 (*(volatile unsigned long *)0x4B000020) //DMA 0 mask trigger register

#define  UTXH0   (volatile unsigned long *)0x50000020 //UART channel 0 transmit buffer register

 

char *buf = "Hello World!";

 

 

/*******************************************************************

*函数名称:Dma_Init()

*功能描述:DMA初始化函数

*其他说明:

*创建日期:2015.12.19

*******************************************************************/

void Dma_Init(void)

{

//初始化源地址

DISRC0 = (unsigned int)buf;

DISRCC0 = (0 << 1) | (0 << 0); //DMA起始地址在AHB总线(Memory), 地址递增

//初始化目的地址

DIDST0 = (unsigned int)UTXH0; //目的地址为 UTXH0

DIDSTC0 = (1 << 1) | (1 << 0); /*DMA目的地址在APB总线(UART0), 地址不

变(因为要发送的字符总是传到UTXH0)*/

DCON0 = (1 << 24) | (1 << 23) | (1 << 22) | (12 << 0); //设置DMA请求源及工作模式

}

 

 

/*******************************************************************

*函数名称:Dma_Start()

*功能描述:DMA启动函数

*其他说明:

*创建日期:2015.12.19

*******************************************************************/

void Dma_Start(void)

{

DMASKTRIG0 = (1 << 1); //启动DMA通道

}

 

需要注意的几点是:


①没有使用DMA中断;


②使用的是Demand模式,实测发现Handshake模式也是可以的(推荐);


③在Uart_Init中,要将UCON0寄存器设置为发送采用DMA模式(开始就是没有设置,所以一直无法看到实验现象);


④源地址和目的地址要使用unsigned int强制转换为整数放进寄存器中;

关键字:S3C2440  DMA传输  字符传输 引用地址:S3C2440 - DMA传输(以字符传输为例)

上一篇:记录2--s3c2440 DMA的操作
下一篇:学习笔记 --- S3C2440 DMA操作原理

推荐阅读最新更新时间:2024-10-26 13:04

S3C2440 - DMA传输(以字符传输为例)
一、使用DMA的优点及DMA支持的请求源 1、DMA优点是其进行数据传输时不需要CPU的干涉,可以大大提高CPU的工作效率。 2、DMA在大容量数据传输中非常重要,比如图像数据传输,SD卡数据传输,USB数据传输等。 3、S3C2440有四个DMA,每个DMA支持的工作方式基本相同,但支持的DMA请求源可能略有不同。如下为四个DMA通道分别支持的DMA请求源: Ch0: nXDREQ0, UART0, SDI, Timer, USB EP1 Ch1: nXDREQ1, UART1, I2SSDI, SPI0, USB EP2 Ch2: I2SSDO,
[单片机]
s3c2440裸机-UART编程1-UART硬件介绍及传输原理
1.uart硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter(异步收发器)。 uart主要用于: 1.打印调试 2.数据传输 串口通过三根线即可,发送、接收、地线。 pc的TxD - arm的RxD (UART write) arm的TxD - pc的RxD (UART read) 2.uart的参数和格式 波特率:表示每秒传输多少bit,bits per second(bps).一般波特率都会有9600,19200,115200等选项。 格式: 起始位: 先发出一个逻辑”0”的信号,表示传输数据的开始。 数据位:可以是5~8位逻辑”0”或”1”。
[单片机]
s3c2440裸机-UART编程(一、UART硬件介绍及传输原理)
1.uart硬件介绍UART的全称是Universal Asynchronous Receiver and Transmitter(异步收发器)。 uart主要用于: 1.打印调试 2.数据传输 串口通过三根线即可,发送、接收、地线。 pc的TxD - arm的RxD (UART write) arm的TxD - pc的RxD (UART read) 2.uart的参数和格式 波特率:表示每秒传输多少bit,bits per second(bps).一般波特率都会有9600,19200,115200等选项。 格式: 起始位: 先发出一个逻辑”0”的信号,表示传输数据的开始。 数据位:可以是5~8位逻辑”0”或”1”。一般7
[单片机]
<font color='red'>s3c2440</font>裸机-UART编程(一、UART硬件介绍及<font color='red'>传输</font>原理)
S3C2440开发板学习——如何使用dnw进行数据的USB传输
首先,将开发板的serial和usb接口与PC相连,启动开发板; 其次,通过SecureCRT观察开发板的启动过程,并且按空格键进入开发板的menu菜单,设备管理中出现“SEC S3C2440 Test B/D”设备; 然后,启动禁用驱动程序强制签名的操作,再安装“SEC S3C2440X Test B/D”的驱动程序; 最后,可以发现设备管理中100ASK eBlocks SEC SOC Test Board设备顺利安装,之后就可以正常使用Dnw。 注意问题: 1、在开发板的menu中,可以通过不同选项,进行下载的参数选择,包括:Downloadu-boot to Nand Flash,Download u
[单片机]
STM32的DMA数据传输实例
本文将介绍如何通过DMA将ADC采集的数据直接存储到存储器中 而不需要经过CPU; 芯片:STM32F407 工具:STM32CUBEMX KEIL5 ①通过STM32CUBEMX配置工程文件 ②代码实现 ①通过STM32CUBEMX配置工程文件 使能USART3用于调试 PA4外部引脚接的是电压采样电路,将PA4设为ADC1采样通道 使能RCC时钟、配置时钟树 配置DMA 配置ADC1 配置DMA的中断优先级 7、生成代码 ②代码实现 输出重定向: 启动ADC采样后的DMA传输函数: 日志
[单片机]
STM32的<font color='red'>DMA</font>数据<font color='red'>传输</font>实例
STM32F429芯片带FIFO的DMA传输实现过程
STM32系列芯片都内置DMA外设,其中很多系列的DMA配备了FIFO。这里以STM32F429芯片及开发板为例,演示一下带FIFO的DMA传输实现过程。 大致情况是这样的,我用TIMER1通道1的比较事件触发DMA,将内存数据写进UART5的数据发送寄存器DR,并将UART5的TX/RX脚物理短接,同时开启UART5的DMA接收模式,即DMA将UART5接收到的数据写到指定的接收内存区。下面重点介绍UART5的DMA方式的接收过程。 首先使用STM32CubeMx完成基本配置。 下面是关于TIM1的相关配置,使用通道1的比较事件触发DMA,将内存数据写入UART的发送数据寄存器。为什么还要搞个定时器来触发,其中一个原因是
[单片机]
STM32F429芯片带FIFO的<font color='red'>DMA</font><font color='red'>传输</font>实现过程
stm32 嵌入式开发 中ADC独立多通道DMA传输数据实验总结
主要知识点: DMA 数据传输 串口传输 通道引脚初始化 (一)、DMA 数据传输            1、外设到存储器传输            2、存储器到外设传输            3、存储器到存储器传输     外设一般为:ADC、SPI、I2C等。 存储器一般为:片内SRAM、外部存储器、片内FLASH等   DMA功能框图:8个流通道(DMA_SxCR ),每个流通到对应8个外设请求(CHSEL )     DMA 请求映射:分两种 DMA1请求映射、DMA2请求映射    特点:每一个外设请求只占用一个数据流通道,相同的外设请求可以占用不同的通道请求。       当该数据流通道
[单片机]
stm32 嵌入式开发 中ADC独立多通道<font color='red'>DMA</font><font color='red'>传输</font>数据实验总结
STM32 DMA传输的问题分析
问题1、 用户使用STM32G473RET6芯片,开发环境STM32CubeMX+Keil(LL库)。使用DMA1通道1,在半传输中断和完全传输中断里,拷贝ADC采集的数据。在应用过程中发现DMA半传输中断和完全传输中断不能独立使用。 具体体现: 1、在DMA1初始化时,打开了半传输中断,关闭完全传输中断,照样能触发完全传输中断 LL_DMA_EnableIT_HT(DMA1,LL_DMA_CHANNEL_1);//打开DMA1半传输中断 LL_DMA_DisableIT_TC(DMA1,LL_DMA_CHANNEL_1);//关闭DMA1完全传输中断 2、在DMA1初始化时,关闭了半传输中断,打开完全传输中断,照样能触发半传
[单片机]
STM32 <font color='red'>DMA</font><font color='red'>传输</font>的问题分析
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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