DMA学习

一、通过串口发送解析为什么需要 DMA
之前的程序串口如果要发送一个字符串,就需要调用cpu不断对UTXH0输入字符,达到输出字符串。
但是这样占用了太多CPU的时间,显然是一个低效率的方式。所以可以用DMA,让CPU告诉DMA哪些数据需要对I/O口操作,DMA照着执行就好了。
这样就可以释放CPU的使用。

二、DMA控制器
2.1 通道数
The S3C2440A supports four-channel DMA controller located between the system bus and the peripheral bus.
2.2 请求源
四个通道分别可以设置不同的请求源:

2.3 基本时序
nXDREQ请求生效并经过2CLK周期同步后,nXDACK 响应并开始生效,但至少还要经过3CLK的周期延迟, DMA控制器才可获得总线的控制权,并开始数据传输。

2.4 工作模式
Demond模式:
如果 DMA完成一次请求后如果 Request仍然有效,那么 DMA就认为这是下一次 DMA请求,并立即开始下一次的传输
Handshake模式:
DMA完成一次请求后等待 Request信号无效,如果 Request无效, DMA会无效 ACK两个时钟周期,再等待下一次 Request

三、2440DMA程序设计

  1. #define DISRC0 *((volatile unsigned long*)0x4B000000)
  2. #define DISRCC0 *((volatile unsigned long*)0x4B000004)
  3. #define DIDST0 *((volatile unsigned long*)0x4B000008)
  4. #define DIDSTC0 *((volatile unsigned long*)0x4B00000C)
  5. #define DCON0 *((volatile unsigned long*)0x4B000010)
  6. #define DMASKTRIG0 *((volatile unsigned long*)0x4B000020)

  7. #define UTXH0 (volatile unsigned long*)0x50000020

  8. char *buf = "Hello World!";

  9. void dma_init()
  10. {
  11.     //初始化原地址
  12.     DISRC0 = (unsigned int)buf;                        //源地址
  13.     DISRCC0 = (0<<1)|(0<<0);

  14.     //初始化目的地址
  15.     DIDST0 = UTXH0;                                    //目的地址,串口的地址
  16.     DIDSTC0 = (0<<2)|(1<<1)|(1<<0);

  17.     DCON0 = (1<<24)|(1<<23)|(1<<22)|(12<<0);

  18. }

  19. void dma_start()
  20. {
  21.     DMASKTRIG0 = (1<<1);
  22. }
这样在main.c中调用dma_init()和dma_start();并不能实现hello world!。
在uart.c中的发送模式需要修改成DMA模式
  1. void uart_init()
  2. {
  3.     //1.配置引脚功能
  4.     GPHCON &= ~(0xf<<4);
  5.     GPHCON |= (0xa<<4);

  6.     //2.1设置数据格式
  7.     ULCON0 = 0b11;
  8.     //2.2设置工作模式
  9.     //UCON0 = 0b0101;中断轮循
  10.     UCON0 = 0b1001;

  11.     //3.设置波特率
  12.     UBRDIV0    = (int)(PCLK / (BAUD *16) - 1);
  13. }

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(35) | 评论(0) | 转发(0) |
0

上一篇:串口学习

下一篇:像素深度BPP

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PCIE-DMA是一种基于PCIe接口的直接内存访问技术,能够实现高速数据传输。在我的学习笔记中,我详细记录了与PCIE-DMA相关的知识和学习心得。 首先,我了解到PCIE-DMA技术的基本原理和作用。PCIE-DMA可以通过PCIe总线直接访问系统内存中的数据,而不需要过多的CPU干预,提高数据传输的速度和效率。这种技术在需要大量数据传输的场景下非常有效,比如高性能计算、数据采集等。 其次,我深入学习了PCIE-DMA的工作原理。PCIE-DMA的核心是DMA控制器,它负责管理和控制数据传输的流程。当设备需要读写内存中的数据时,它通过DMA控制器发送请求,然后DMA控制器生成一个事务,将数据直接传输到或从内存中。这样就大大减少了CPU的参与,提高了数据传输的效率。 另外,我还学习了PCIE-DMA的配置和编程方法。PCIE-DMA的配置主要包括硬件配置和软件配置两个部分。硬件配置通常涉及到DMA控制器和PCIe接口的初始化和配置,软件配置则需要编写驱动程序来驱动DMA控制器和处理数据传输过程中的事件和异常。这部分内容对于我来说还比较新颖,需要更多的实践和实践。 最后,我总结了PCIE-DMA的应用场景和发展前景。PCIE-DMA在高性能计算、数据采集等领域具有广阔的应用前景。随着数据量的不断增加和传输速度的要求越来越高,PCIE-DMA技术的需求也将越来越大。因此,对于我来说,学习掌握PCIE-DMA技术非常有价值。 通过学习和记录PCIE-DMA的相关知识和经验,我对这项技术有了更深入的理解和掌握。希望将来能通过应用PCIE-DMA技术解决实际问题,为科研和工程项目的顺利进行做出贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

习惯就好zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值