17.DMA-2440

17.DMA-2440

首先在前面的实例中,在dev文件夹下增加dma.c文件,然后把它加入到该目录的Makefile里面:

这样就框架就好了,接下来打开dma.c来实现:

首先打开2440的芯片手册:

我们要操作的是串口0,对应的是通道0:

对应的源寄存器:

对应的控制寄存器:

该寄存器只有两个位:

可以看到DMA控制寄存器的[1]位是绝对用的是AHB,还是APB总线。这是从第一章的原理图:

可以看到内存用的是AHB总线。

所以源地址的源寄存器应该被设置为:

目的地址:

目的地址的控制寄存器:

目的寄存器的控制寄存器有三位:

[2]位是控制中断产生的时机,这里选择的是默认,就是设置为0,当计数到0的时候产生中断。

[1]位是选择是AHB或者APB去存放位置,这里是串口,是APB:[1]=1.

[0]位是控制在数据传输的过程中,目的地址是否需要变化。这是就一个串口接收数据,所以地址不用变化,所以[0]=1。

上面是DMA发送和接受的寄存器设置,还有一个DMA控制寄存器的设置:

这里是DCON0寄存器的[26:24]:

是设置DMA源的,这是使用的是UART0,所以[26:24]=001。

[23]位是表示DMA源是软件还是硬件,这是我们是串口,是硬件,所以是1:

[22]位控制的是,当你发送完数据后是否重新发送,这里是不用重复发送的,所以设置1:

TC[19:0]位是用来告诉DMA发送数据的大小,DMA才知道啥时候结束。上面Hello FORFISH的长度为13,所以:

最终是:

到这里DMA的control寄存器的设置就结束了。

最后的函数:

该函数就设置好了DMA控制器,接下来就是要设置打开DMA,当DMA打开之后就可以进行数据传输了。

这里打开DMA只需要将DMASKTRIG0寄存器的[1]位设置为1即可:

涉及的寄存器列表:

注意:最后一个UTXH0是要该寄存器的地址,而不是寄存器的值。定义的时候注意。

在main.c里调用DMA的操作函数:

修改好了之后make:

烧写到开发板,NandFlash启动:

可以看到,通用DMA的方式,把字符串传递到了串口了,实现DMA的机制。

时间: 2024-08-05 21:06:11

17.DMA-2440的相关文章

文华财经函数大全

文华财经函数大全 1.引用数据 AVPRICE 引用均价(在盘后对于国内三个期货交易所指结算价)SETTLE 引用结算价(如果用在周期小于'日'的K线上如5分钟K线,一小时k线,每根k线返回的值表示这根k线当日开盘时到这根k线的为止的结算价(均价)如果用在周期大于等于'日'的K线上,返回当根K线结束时间所在日的结算价.)CLOSE 引用收盘价(在盘中指最新价),也可简写为C.HIGH 引用最高价,也可简写为H.LOW 引用最低价,也可简写为L.OPEN 引用开盘价,也可简写为O.OPI 引用持仓

关于启动文件分析的(MDK-ARM) 【转】

;******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s ;* Author : MCD Application Team ;* Version : V3.4.0 ;* Date : 10/15/2010 ;* Description : STM32F10x High Density Devices vector ta

AnimeGAN输出日志

D:\MyFiles\LearnFiles\Code\Python\AnimeGAN\AnimeGAN>python main.py --phase train --dataset Hayao --epoch 1 --init_epoch 1D:\Users\feng_\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\dtypes.py:516: FutureWarning:

六、2440裸机开发 lcd操作

六.lcd的控制 原文地址:http://blog.csdn.net/woshidahuaidan2011/article/details/51278058 by jaosn Email: [email protected] LCD ( Liquid Crystal Display 的简称)液晶显示器.LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏

DMA设计

目录 DMA设计 DMA框架 手册请看英文手册 芯片特性 请求来源 协议简述 基本时序 模式 协议 数据大小的描述 具体完整的实例时序 代码设计 驱动程序 测试程序 测试 参考链接 title: DMA设计 tags: linux date: 2019年1月5日 17:27:08 toc: true --- DMA设计 DMA框架 一个简单的DMA框图如下DREQ→HOLD→HLDA→DACK DMAC的一些必备特性: 能发出地址信息,对存储器寻址,并修改地址指针,DMAC内部必须有能自动加1或

ok6410的DMA裸机总结

1.为何使用DMA:为了提高CPU的工作效率,避免多余的等待时间 2.关于DMA控制器:(1)通道数:2440有4个通道,6410有4个DMA控制器(初始化的时候要选择),32个通道.210有两种DMA一种是内存与内存之间,另外则是普通的内存与外设之间.(2)请求源:(3)基本时序 nXDREQ请求生效并经过2CLK周期同步后,nXDACK响应并开始生效,但至少还要经过3CLK的周期延迟,DMA控制器才可获得总线的控制权,并开始数据传输(4)工作模式:•Demond模式:如果DMA完成一次请求后

STM32的串口DMA收发以及双缓冲区的实现

在使用STM32的UART的DMA功能总结如下: 首先上代码,这里采用STM32 的USART1作为Demo,RX的DMA为DMA1_Channel5,TX的DMA为DMA1_Channel4.初始化如下,红色的标记需要注意: RX-DMA初始化 1 // DMA Rx 2 USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE); 3 DMA_Cmd(DMA1_Channel5,DISABLE); 4 DMA_InitStruct.DMA_PeripheralBa

mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信

这个只能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.数据传输完后,DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系统中各种常用的数据输入/输出方法有查询方式(包括无条件及条件传送方式)和中断方式,这些方式适用于CPU与慢速及中速外设之间的数据交换.但当高速外设要与系统内存或者要在系统内存的不同区域之间进行大量数据的快速传送时,就在一定程度上限制了数据传送的速率.直接存储器存取(DMA)就是为解决这个问题提出的,采

STM32——DMA接收和发送的实现

最近写程序,需要一段一段数据的接收,再通过其他串口发送出去. 老司机们建议用DMA通信,以节约CPU资源.然后,我听了,发现挺好用的.特此,把自己写的代码贴上了. DMA发送接收的步骤如下: 1.初始化. a.IO时钟+串口时钟+DMA时钟使能. b.IO初始化 c.串口初始化 d.DMA初始化 e.中断向量设置 2.串口中断服务函数 3.DMA中断服务函数 具体实现如下: 一.初始化 1 //串口1的初始化2 //bound:波特率 3 /***************************