OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5455|回复: 14

请问有什么方法可以重置DMA的存储基地址?

[复制链接]

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
发表于 2014-10-26 12:01:56 | 显示全部楼层 |阅读模式
5金钱
请问,我现在用dma进行乒乓的方式,有没有办法在切换数组的时候令存储基地址重置,即每次且换数组都是从0开始读数据。谢谢

最佳答案

查看完整内容[请看2#楼]

DMA切换基址本来就是从0开始的。 不知道你担心什么。
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-10-26 12:01:57 | 显示全部楼层
DMA切换基址本来就是从0开始的。
不知道你担心什么。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-26 14:45:15 | 显示全部楼层
继续求帮忙...谢谢
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

11

主题

1042

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3699
金钱
3699
注册时间
2011-5-23
在线时间
2009 小时
发表于 2014-10-26 16:31:01 | 显示全部楼层
没太听明白楼主想要实现什么样的功能?
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-26 16:48:42 | 显示全部楼层
回复【3楼】aozima:
---------------------------------
就是我定了2个数组,假如数组1,数组2,我通过DMA把数据传到数组1,当数组1收到数据后,我把基地址换成数组2,数组2收到数据再把基地址换成1,这样子循环下去,每次切换我要保证是从数组第0位开始写入数据的,我现在只会关了dma再打开,这样基地址就从0开始算,但是这样传输数据就断断续续的,我要连续传输数据
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-26 20:09:31 | 显示全部楼层
回复【4楼】ljjdglg520:
---------------------------------
参考官方demo板子的wav播放例程
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-27 11:20:22 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------

换基地址后要把DMA关了再打开才从0开始吧?我测试是这样的,也可能是我自己的问题,我现在每次切换基地址都要把DCMI和DMA关了再开,这样就很慢。我想用乒乓的模式,但是我这样写,切换不了数组: 

DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)JpegBuffer2; 
DMA_Init(DMA2_Stream1, &DMA_InitStructure); 

每次都要这样写: 

                       DMA_DeInit(DMA2_Stream1); 
DMA_InitStructure.DMA_Channel = DMA_Channel_1;   
DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS; 
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)JpegBuffer2;    
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; 
DMA_InitStructure.DMA_BufferSize = 1024*32;   
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; 
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; 
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; 
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; 
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; 
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; 
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;         
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; 
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; 
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; 
DMA_Init(DMA2_Stream1, &DMA_InitStructure); 

每次这样初始化切换就很慢了...调了3个多星期快一个月了,DCMI的连续采集模式弄了好久,总是一个数组里的第二张图片出问题,第一张是正常输出的,之后一直有数据输出,但是没有图片,然后我用快照模式+上面乒乓的方式输出,用115200的波特率输出只有0.5帧。。。要崩溃了。。。
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-10-27 13:35:00 | 显示全部楼层
回复【7楼】ljjdglg520:
---------------------------------
我们F4的板子,IIS播放和录音都是用的乒乓操作,正常的很哦。
而且buf我还搞了好多个都很正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-27 15:25:28 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
你的意思是,直接这样写就可以换基地址,而且这样写完地址就从0开始算?:
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)JpegBuffer2; 
DMA_Init(DMA2_Stream1, &DMA_InitStructure);

而且不用关DMA再打开? 

请问乒乓模式用不用设置DMA双缓冲才能使用的?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2014-10-27 17:11:40 | 显示全部楼层
回复【9楼】ljjdglg520:
---------------------------------
当然要DMA双缓冲了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-28 13:58:20 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥,我看F4xx的参考手册,上面写,目标存储器依据DMA_SxCR寄存器中CT值的情况,一定已从存储器0更改为存储器1(或从1到0),意思不是说,设置了双缓冲区后,基地址的数组一旦满值,就会自动切换到另一个数组吗?怎么现在用乒乓模式好像还要手动更改基址?不是自动切换的吗?CT是标志位,一旦CT的值变化就更新AHB存储器的基址,原子哥求解啊~~~
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-28 13:59:23 | 显示全部楼层
回复【5楼】ricefat:
---------------------------------
大哥,哪里有?我没找到
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-10-28 14:19:51 | 显示全部楼层
回复【12楼】ljjdglg520:
---------------------------------
f4 discovery的wav播放例程就有
回复

使用道具 举报

47

主题

360

帖子

0

精华

高级会员

Rank: 4

积分
726
金钱
726
注册时间
2014-3-6
在线时间
19 小时
 楼主| 发表于 2014-10-28 14:46:05 | 显示全部楼层
回复【13楼】ricefat:
---------------------------------
原来是discovery的,谢谢啦
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
回复

使用道具 举报

62

主题

902

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3555
金钱
3555
注册时间
2016-1-8
在线时间
543 小时
发表于 2017-7-13 12:01:52 | 显示全部楼层
DMA采用循环模式数组存满之后,又从0开始存储并且覆盖原来的数据,如果想某一次让他直接从数组0开始存储,怎么设置
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-18 16:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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