查看: 1486|回复: 0

STM32L496-DISCOVERY开发板DMA2-stm32入门5

[复制链接]
  • TA的每日心情
    慵懒
    2017-12-23 11:10
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-12-20 17:39:00 | 显示全部楼层 |阅读模式
    分享到:
    上一篇已经说了dma的工作原理等,今天我们就来小试牛刀,分析一下dma code。
    打开官网提供的芯片手册,在强调一下,芯片手册很重要,他是第一手,而且是最重要的参考资料!!!

    再次说明了,dma是一个用于高速数据传送的硬件结构,而且不仅用于内存和外设,存储器之间也可以通过dma进行访问和数据传输。
    我们的STM32L496 有两个dma 控制器,而且每个都有7个channel,总计14个channel。
    下面是dma的sche 图。


    可以看到DMA和CPU之间共用系统总线。
    在这种情况下,dma和CPU之间可能会发生竞争,比如访问同一个外设,这种情况下,DMA优先访问。
    DMA,工作流程,通过一个信号(可以软件也可以硬件)trigger DMA control 。DMA control 会把发送端的数据写入外设或者内存数据寄存器中,对于stm32l496而言,对应的是DMA_CPARx or DMA_CMARx register。对于接受者而言,同样的根据芯片的电流变化会把外设或者内存数据寄存器中的数据移动到另外的内存或者外设数据寄存器,此外还有一个计数寄存器,统计数据首发完成情况。
    对于stm32l496而言,是DMA_CNDTRx register.
    析完dma原理之后,我们以其中一个寄存器为例分析,其余的寄存器,可推而广之。

    我们以DMA conf 寄存器为例。

    物理地址:
    0x08 + 0d20 × (channel number – 1) 。
    我们的code,dma config;

    设计m2m 模式,pinc enble.
    再看看我们芯片手册,14bit 控制M2M,12-13bit 控制pinc 。

    根据说明我们应该把对应value 设置为相应的值。
    伪代码:
    ex:
    0X1<<14 // m2m mode
    我们看一下hal lib 处理。

    继续追一下。

    再追一下code。

    可以发现就是将14bit值设置为1.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 11:36 , Processed in 0.121260 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.