打印
[AT32F415]

如何配置DMA实现多次的SPI通讯

[复制链接]
1429|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wdconverter|  楼主 | 2022-4-30 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wdconverter 于 2022-4-30 18:27 编辑

Demo板的例程中只有实现一次SPI通讯(20个字节)的DMA配置例程,在第一次20个字节信息通讯后,要如何配置DMA,才能启动第二次20个字节信息的SPI收发?需要将DMA模块像初始化一样完全重新配置一遍吗?

使用特权

评论回复
沙发
wdconverter|  楼主 | 2022-5-1 10:24 | 只看该作者
通过自己在Demo板上多次试验之后,自己试出来了:
1、一次DMA控制的20字节SPI通讯后,DMA通道的状态标志位(HDTF、FDTF、GF、DTERRF)被置1,DMA通道的数据传输量寄存器(DMA_CxDTCNT)值由20变为0;
2、启动下一次DMA控制的20字节SPI通讯所需做的配置如下(四行代码):
      ①清除后续需要用到的状态标志位(使用DMA_CLR寄存器)
      ②关闭需要启动的DMA通道(使用DMA_CxCTRL寄存器的CHEN位)
      ③给DMA通道的数据传输量寄存器(DMA_CxDTCNT)重新赋值
      ④重新使能DMA通道(使用DMA_CxCTRL寄存器的CHEN位)
       执行第4步指令后,将立即启动下一次通讯。

希望官方能完善Demo板例程,以方便以后的学习者。TI的例程确实完善很多。。。

使用特权

评论回复
板凳
座机呀| | 2022-6-1 11:21 | 只看该作者
如果用F435/F437,直接配置为链传输模式,更加方便

使用特权

评论回复
地板
muyichuan2012| | 2022-6-1 14:41 | 只看该作者
将dma_init_struct.loop_mode_enable = TRUE

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

12

帖子

0

粉丝