单片机
返回首页

18.DMA-6410

2024-10-31 来源:cnblogs

对于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、使能相应通道(设置DMACC_Configuratoin);

 

1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);

在6410的DMA控制器里有四个控制器:

这里使用的是UART0的源,而该源可以还有的控制器有两个:DMA0和SMDA0:

那么到底使用的哪个寄存器呢?是通过DMA_SEL这个寄存器来进行选择的:

这里使用的是UART0,然后是通过SDMA0寄存器控制的。所以设置DMA_SEL的值为0即可:

 

2、开启DMAC控制,设置DMAC_Configuration寄存器;

第一步选择好了DMA寄存器后,接着就是使能DMA控制。使能是通过DMAC_Configuration寄存器:

由该寄存器的描述知道,要使能DMA只需将DMAC_Configuration寄存器的[0]位设置为1即可:

3、设置通道的源数据地址和目的数据地址(设置DMACC_SrcAddr和DMACC_DestAddr);

这一步跟2440是一样的,都是设置DMA的源寄存器和DMA的目的寄存器。由于我们这里是将内存里的字符串送到串口,所以源寄存器地址是在内存,目的寄存器的地址是在串口0中寄存器的地址。实现代码:

寄存器DMACC0SrcAddr参数:

 

4、设置通道控制寄存器0(设置DMACC_Control0);

[25]位中,由于我们的串口是外设,所以[25]位的值是1。然后在我们的源地址寄存器里,当输出一个字符是,是会增长里面的参数,然后继续输出的。所以[26]位的值是1。[31]位是中断的运行位,也是设置位1。最后设置的参数:

5、设置通道控制寄存器1,(传输大小,设置DMACC_Control1);

主要是设置传输数据的大小的:

实现:

6、设置通道配置寄存器;(设置DMACC_Configuration)

    

在上面的寄存器里,要考虑的位是[6]位、[11]位、[14]、[15]位。其中[6]位是选择DMA的目的地址是不是一个外设,我们这里是串口,就是一个外设,所以是1。[11]位是流控制位和tranfer type:

我们这里是从内存到串口,所以是001.

[14]位和[15]位是中断屏蔽的,设置为1.

最后实现的函数:

7、使能相应通道(设置DMACC_Configuratoin);

 

上面就设置好了使能6410的DMA通道的操作。在main.c调用:

Make编译:


进入单片机查看更多内容>>

上一篇:19.液晶屏的原理

下一篇:17.DMA-2440

相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章