OpenEdv-开源电子网

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

DMA与IO的传输问题

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-6-26
在线时间
0 小时
发表于 2014-9-5 21:45:48 | 显示全部楼层 |阅读模式
5金钱
各位大神,怎么用DMA实现寄存器到IO口的传输啊?

最佳答案

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

设置源地址为寄存器 目的地址为IO口的ODR寄存器 然后用软件触发的方式。 就可以了。 触发一次,传输一次。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-9-5 21:45:49 | 显示全部楼层
设置源地址为寄存器
目的地址为IO口的ODR寄存器
然后用软件触发的方式。
就可以了。
触发一次,传输一次。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-9-5 21:45:49 | 显示全部楼层
你参考下我的代码吧。
DMA 读取GPIO的数据,到SRAM。
你估计就是反过来操作而已。

OV7670_DMA_正式版V1.1.zip

67.89 KB, 下载次数: 1935

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-8-7
在线时间
0 小时
发表于 2014-9-5 22:11:05 | 显示全部楼层
顶一个 同求
Sorrow is hushed into peace in my heart like the evening among the silent trees.
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-6-26
在线时间
0 小时
 楼主| 发表于 2014-9-5 22:39:52 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子大哥,不好意思,应该是从存储器到IO,这个怎么弄啊?
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-8-7
在线时间
0 小时
发表于 2014-9-5 23:20:38 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
想把一个数组的元素用DMA传到IO上去实现高速传输。。
这样弄了还是不能传过去。。。不知道为什么
Sorrow is hushed into peace in my heart like the evening among the silent trees.
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-8-7
在线时间
0 小时
发表于 2014-9-6 00:02:35 | 显示全部楼层
回复【3楼】 正点原子 :
---------------------------------
现在做到的就是类似原子大哥给的例程 可以把我的数组的数据发给串口
pc机可以用串口调试助手接收这些数据
以下是部分代码 :
[mw_shl_code=c,true]        Stm32_Clock_Init(9); USART1_Init(); MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,5168); LED_Init(); LCD_Init(); USART1->CR3 = 1<<7; MYDMA_Enable(DMA1_Channel4); while(1) { SendBuff[i++]=i; }[/mw_shl_code]

这里有一句 USART1->CR3 = 1<<7;
此位使能发送时的DMA模式

想传给IO口的时候 config改成这样
MYDMA_Config(DMA1_Channel4,(u32)&GPIOC->ODR,(u32)SendBuff,5168);
但是IO口没有像UASRT->CR3那样的寄存器可以设置
IO口的DMA模式该如何开启?


Sorrow is hushed into peace in my heart like the evening among the silent trees.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-9-6 00:42:14 | 显示全部楼层
回复【4楼】须佐之男:
---------------------------------
什么存储器?
回复【6楼】Phoenix_2011:
---------------------------------
用存储器到存储器模式。
然后软件触发。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2014-6-26
在线时间
0 小时
 楼主| 发表于 2014-9-6 00:53:18 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
软件触发哪一位呢?
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-8-7
在线时间
0 小时
发表于 2014-9-6 10:14:24 | 显示全部楼层
 回复【9楼】 正点原子 :
---------------------------------
1.映射问题
MYDMA_Config(DMA1_Channel5,(u32)&GPIOC->IDR,(u32)OV7670_BUF[0],640);

GPIOC->CRL=0X88888888;
GPIOC->ODR|=0x00ff;

这个意思是DMA1_Channel5直接能映射到GPIOC的0-7位吗?
如果此时Channel5传输的数据为0xAA
那么GPIOC的0-7位电平分别为1010 1010吗?


2.触发问题
究竟是如何触发了Channel5的传输 ?


TIM4_Excat_Init();//TIM4,CH3,输入捕获
这句的意思是利用TIM4_CH3的输入捕获触发了Channel5吗?
Sorrow is hushed into peace in my heart like the evening among the silent trees.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-9-6 22:56:31 | 显示全部楼层
存储器到存储器模式,如果是软件触发,不用选通道.
但是我这里选择了触发源,也就是定时器4通道3来触发DMA传输.
所以就是通道5了.

也就是定时器4,外部触发有一个脉冲,DMA就会执行一次读取GPIOC->IDR,并存储到数组里面.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-11-8
在线时间
19 小时
发表于 2014-11-8 18:18:28 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
原子哥,DMA从GPIO运送数据到SRAM里速度如何,和CPU单纯处理是不是慢点,还有DMA的速度和触发源有关么
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2014-12-1
在线时间
8 小时
发表于 2015-5-30 19:48:13 | 显示全部楼层
回复【10楼】Phoenix_2011:
---------------------------------
请问你的dma传数据到 GPIO 搞定没 我也在搞
回复

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-5-31 09:54:56 | 显示全部楼层
http://www.openedv.com/posts/list/49532.htm

附件在9楼。。。
Good good study , day day up...
回复

使用道具 举报

16

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2015-8-5
在线时间
53 小时
发表于 2015-10-13 10:30:24 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
原子哥我看了这个程序,DMA采集普通的IO口数据,,也有专用的DMA通道吗,外设地址你设置的是(u32)&GPIOC->IDR,是代表GPIOC的所有端口吗?
坚持到感动自己
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-10-13 22:36:23 | 显示全部楼层
回复【16楼】小二郎123:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2015-8-5
在线时间
53 小时
发表于 2015-10-13 23:27:02 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
DMA的那个通道是采集普通IO口的,好像不完全手册上没提到
坚持到感动自己
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-10-13 23:38:21 | 显示全部楼层
回复【18楼】小二郎123:
---------------------------------
把IO当内存用就对了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
344
金钱
344
注册时间
2015-8-5
在线时间
53 小时
发表于 2015-10-14 12:48:19 | 显示全部楼层
回复【19楼】正点原子:
---------------------------------
原子哥,需要采集的IO口,要怎么配置呢?
坚持到感动自己
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-10-18 22:05:02 | 显示全部楼层
回复【20楼】小二郎123:
---------------------------------
把gpio当内存用.
你好好理解我这句话.
原本是内存地址的,换成&GPIOA->IDR/ODR之类的,就可以了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2016-7-17
在线时间
25 小时
发表于 2016-9-2 09:18:22 | 显示全部楼层
正点原子 发表于 2014-9-5 21:45
你参考下我的代码吧。
DMA 读取GPIO的数据,到SRAM。
你估计就是反过来操作而已。

有个疑问,GPIO是连在AHB1总线上的,DMA1没有跟AHB1连接,能传输吗?
回复

使用道具 举报

1

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2016-8-9
在线时间
29 小时
发表于 2016-9-2 16:37:48 | 显示全部楼层
高手,支持了
回复

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2018-11-8 16:38:03 | 显示全部楼层
嗯学习了,谢谢!!
回复

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-8-2
在线时间
23 小时
发表于 2020-7-30 22:22:08 | 显示全部楼层
正点原子 发表于 2014-9-5 21:45
你参考下我的代码吧。
DMA 读取GPIO的数据,到SRAM。
你估计就是反过来操作而已。

原子哥,DMA传输到IO口的传输速率能达到多少呢?我测的H750,速率才8M
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-11-14
在线时间
4 小时
发表于 2021-3-25 10:36:52 | 显示全部楼层
正点原子 发表于 2015-10-18 22:05
回复【20楼】小二郎123:
---------------------------------
把gpio当内存用.
你好好理解我这句话.
原本是 ...

把GPIO当内存用,是不是F7只能使用DMA2来完成DMA修改GPIO的值,如果使用软件触发的话,可以用TIM1/TIM8来触发
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 13:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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