智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 10888|回复: 11
打印 上一主题 下一主题

[咨询] 野火K60 DMA传输GPIO数据实验 请教

[复制链接]

14

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
威望
760
贡献
412
兑换币
156
注册时间
2011-11-10
在线时间
35 小时
跳转到指定楼层
1#
发表于 2013-1-21 21:00:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下一行语句为野火库中对DMA进行初始化的语句:
DMA_PORTx2BUFF_Init (DMA_CH4,(void *)&PTD_BYTE0_IN,BUFF,PTA27,DMA_BYTE1,3,DMA_rising);

库中有句话设这样说的:
"PTA27上升沿触发DMA传输,源地址为PTD_BYTE0_IN"
而PTD_BYTE0_IN应该是指PTD0~PTD7的7个GPIO输入电平,这句话让我脑袋开花了。

那么,DMA源地址该如何进行设置,触发源PTA27与源地址是什么关系???

45

主题

761

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5023
威望
2903
贡献
558
兑换币
1271
注册时间
2012-10-16
在线时间
781 小时
2#
发表于 2013-1-21 21:23:20 | 只看该作者
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
3#
发表于 2013-1-21 23:07:05 | 只看该作者
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要把数据搬到哪里

PTA27 每个上升沿的时候,DMA就会传输一次数据
PTD_BYTE0_IN是指PTD0~PTD7的8个GPIO输入电平,即把这8个数据搬到BUFF缓冲区(每搬一次,目的地址都会自动加的)
回复 支持 反对

使用道具 举报

14

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
威望
760
贡献
412
兑换币
156
注册时间
2011-11-10
在线时间
35 小时
4#
 楼主| 发表于 2013-1-22 09:55:35 | 只看该作者
哦,事实上数据是从PTD0~PTD7这8个IO口输进去的,我以为读的是PTA27
回复 支持 反对

使用道具 举报

22

主题

321

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3258

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
1776
贡献
824
兑换币
625
注册时间
2011-9-30
在线时间
329 小时
5#
发表于 2013-1-28 08:15:54 | 只看该作者
本帖最后由 1174544639 于 2013-1-28 08:46 编辑
野火 发表于 2013-1-21 23:07
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要把 ...

问一下火哥,DMA可以直接传输一个IO口上的模拟量吗?也就是说它具有类似AD转换的功能吗?我是做平衡的,ccd只有一个输出口,但都是模拟量,如果直接将这个输出口接在一个IO口上作为源地址,这样我读到的值是不是已经二值化了?
回复 支持 反对

使用道具 举报

22

主题

321

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3258

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

QQ
威望
1776
贡献
824
兑换币
625
注册时间
2011-9-30
在线时间
329 小时
6#
发表于 2013-1-28 09:28:32 | 只看该作者
野火 发表于 2013-1-21 23:07
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要把 ...

火哥,还有:我的板子是100脚的,用的你们的库,写在编译时DMA_PORTx2BUFF_Init这个函数出现了这个问题:CW10.2控制台提示:
n = (u8)(((u32)SADDR - ((u32)(&PTA_BASE_PTR->PDIRByte.Byte0))) & 0x3f);         //              
>'PDIRByte' is not a member of class 'struct GPIO_MemMap'

这是什么原因啊
回复 支持 反对

使用道具 举报

9

主题

70

帖子

0

精华

高级会员

Rank: 4

积分
717
威望
354
贡献
183
兑换币
183
注册时间
2012-11-17
在线时间
90 小时
毕业学校
石家庄学院
7#
发表于 2013-4-1 18:37:59 | 只看该作者
就是DMA只传8位是吗?而且只是每个口的0—7引脚?
回复 支持 反对

使用道具 举报

14

主题

99

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1242
威望
760
贡献
412
兑换币
156
注册时间
2011-11-10
在线时间
35 小时
8#
 楼主| 发表于 2013-4-1 19:38:57 | 只看该作者
对的
回复 支持 反对

使用道具 举报

0

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
847
威望
422
贡献
259
兑换币
273
注册时间
2012-12-7
在线时间
83 小时
9#
发表于 2013-7-16 21:06:38 | 只看该作者
火哥,问个问题。
使用DMA后。DMA与外部设备进行数据传送,那么CPU还可以继续执行其他的指令对吗?
如果可以继续执行其他的指令,为什么例程里还要去一直等待图像采集完?
while(img_flag != IMG_FINISH)           //等待图像采集完毕
    {
        if(img_flag == IMG_FAIL)            //假如图像采集错误,则重新开始采集
        {
            img_flag = IMG_START;                        //开始采集图像
            PORTA_ISFR = ~0;                                        //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
            enable_irq(87);                                 //允许PTA的中断
        }
    }
回复 支持 反对

使用道具 举报

9

主题

37

帖子

0

精华

高级会员

Rank: 4

积分
730
QQ
威望
378
贡献
210
兑换币
217
注册时间
2013-7-11
在线时间
71 小时
毕业学校
安徽三联学院
10#
发表于 2015-3-23 17:42:02 | 只看该作者
请问DMA如何对引脚的初始化,对数据引脚的定义
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 18:17 , Processed in 0.130160 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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