请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6456|回复: 13
收起左侧

[有问必答] STM32F407 DMA->FSMC->AD7616 模式的难点

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2020-6-1 11:34:24 | 显示全部楼层 |阅读模式
最开始我是用 TIM->FSMC->AD7616这样的模式,通过定时器中断把AD采样数据放到一个缓存A[2048]中,但是由于CPU开销较大,用中断不合适,就使用 DMA->FSMC->AD7616的模式;
结合AD7616的转换周期,DMA触发一次只能存放32个数据,即A[0]---A[31],下一次触发DMA存放数据会再次从A[0]重新开始;
现在有一个问题,我需要持续的采样存数据,即希望在不使用中断的前提下,下一次触发DMA存放数据会从A[32]开始,下下一次触发从A[64]开始,依次类推
求大神解答!!!!!!!!!!
跪谢!!!!!!!!!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2020-6-1 11:47:35 | 显示全部楼层
已经发布AD7606的FMC DMA双缓冲方案,可以及时处理,参考学习即可,任何F4都可以移植。
V6板子第36章节。

【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至36章(2020-05-25)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255


我们V5板子的F407为什么没有做,是因为这个帖子:

这么多年了,才发现STM32F4系列使用DMA1的大坑,只有DMA2才是完全体
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97900

当前V5板子的AD7606插座使用的引脚不是用的TIM1或者TIM8,如果是你自己的板子务必,而且,只能使用两个定时器配套的PWM输出引脚,其它不支持。




回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2020-6-1 12:00:44 | 显示全部楼层
eric2013 发表于 2020-6-1 11:47
已经发布AD7606的FMC DMA双缓冲方案,可以及时处理,参考学习即可,任何F4都可以移植。
V6板子第36章节。
...

多谢!我先看一下
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2020-6-1 17:27:50 | 显示全部楼层
eric2013 发表于 2020-6-1 11:47
已经发布AD7606的FMC DMA双缓冲方案,可以及时处理,参考学习即可,任何F4都可以移植。
V6板子第36章节。
...

看了下发布的DMA->FMC->AD7606双缓冲方案,用到了DMA的中断
其实是希望不使用任何中断的方式,去存储AD数据,这个有办法么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2020-6-1 17:39:39 | 显示全部楼层
放开那个鸡腿 发表于 2020-6-1 17:27
看了下发布的DMA->FMC->AD7606双缓冲方案,用到了DMA的中断
其实是希望不使用任何中断的方式,去存储AD ...

可以的,你可以不开启中断,注释掉DMA中断开启即可,直接读取缓冲,适合单纯的电压,电流采集。

开启双缓冲的优势是可以实时处理。
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2020-6-1 17:52:47 | 显示全部楼层
eric2013 发表于 2020-6-1 17:39
可以的,你可以不开启中断,注释掉DMA中断开启即可,直接读取缓冲,适合单纯的电压,电流采集。

开启 ...

但是如不例程不开启中断的话,下一次触发DMA,存储数据依然会从A[0]重新开始,而不是A[32]开始,这个问题怎么解决呢?
或者是我理解错了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2020-6-1 17:58:36 | 显示全部楼层
放开那个鸡腿 发表于 2020-6-1 17:52
但是如不例程不开启中断的话,下一次触发DMA,存储数据依然会从A[0]重新开始,而不是A[32]开始,这个问题 ...

开的是DMA中断。。。不是定时器中断,比如你一次性采集2048个数据,双缓冲仅续两次中断。这个中断CPU占用率0.x%,几乎可以忽略。

把教程好好研究下先。。。。。

感觉你还没有理解。

回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2020-6-1 18:08:23 | 显示全部楼层
eric2013 发表于 2020-6-1 17:58
开的是DMA中断。。。不是定时器中断,比如你一次性采集2048个数据,双缓冲仅续两次中断。这个中断CPU占用 ...

是的,对于DMA中断和定时器中断不理解,有没有建议啊
谢谢大神!!
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2020-10-21 11:50:02 | 显示全部楼层
也改用了DMA方式,设置了A0和B0为自测模式,DMA 16次一中断,完成中断都没问题。但是读出来的数据全是A0通道的0XAAAA,
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2020-11-11 15:23:49 | 显示全部楼层
7616交流一下呗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2020-11-12 03:11:34 | 显示全部楼层
zhengwending 发表于 2020-10-21 11:50
也改用了DMA方式,设置了A0和B0为自测模式,DMA 16次一中断,完成中断都没问题。但是读出来的数据全是A0通 ...

突发模式整上没。
回复

使用道具 举报

36

主题

249

回帖

357

积分

高级会员

积分
357
发表于 2020-11-12 10:15:05 | 显示全部楼层
eric2013 发表于 2020-11-12 03:11
突发模式整上没。

整上了,http://www.armbbs.cn/forum.php?m ... &highlight=7616   还是这个帖子的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2020-11-13 09:49:37 | 显示全部楼层

那你这个突发设置有bug啊,你设置为半字支持INC16突发

QQ截图20201113095427.png
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2021-10-18 09:53:55 | 显示全部楼层
AD7616好像不支持转换器件读取数据,如何用busy引脚去触发DMA的传输呢,也不知道最后楼主这个问题解决没有。我也是发现用busy去中断后去读取,采样速率达不到,耗用CPU资源太高。再就是请教个问题,我用DMA+DAC产生一个扫描波形,想要扫描和采集能够同步开始,不知道能不能实现,现在没有思路
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 19:35 , Processed in 0.198212 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表