OpenEdv-开源电子网

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

关于DMA的知识,求助原子哥

[复制链接]

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
发表于 2016-6-1 07:43:58 | 显示全部楼层 |阅读模式
10金钱
请原子哥看看,下面的图片,DMA传输,我如果在芯片内部RAM申请1K的空间到LCD传输,是不是这个要更改????
这个图片的源地址是SRAM到LCD,

这个函数的源地址

这个函数的源地址

最佳答案

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

1.内部RAM数据传输到LCD,需要将DMA配置为内存到内存的配置,只能使用DMA2,CR..DIR=2 2.如果LCD是8080总线,需要将配置CR..PSIZE=0, CR..MSIZE=0, CR..PINC=0, CR..MINC=1 3.M0AR=内存地址, PAR=LCD地址 4.NDTR=数据长度,以字节为单位 5.启动传输,当传输完成时,也就是NDTR为0时,禁止传输,将FIFO的剩余数据刷到LCD
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-6-1 07:43:59 | 显示全部楼层
本帖最后由 zmingwang 于 2016-6-1 20:49 编辑

1.内部RAM数据传输到LCD,需要将DMA配置为内存到内存的配置,只能使用DMA2,CR..DIR=2
2.如果LCD是8080总线,需要将配置CR..PSIZE=0, CR..MSIZE=0, CR..PINC=0, CR..MINC=1
3.M0AR=内存地址, PAR=LCD地址
4.NDTR=数据长度,以字节为单位
5.启动传输,当传输完成时,也就是NDTR为0时,禁止传输,将FIFO的剩余数据刷到LCD
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-6-1 19:30:25 | 显示全部楼层
zmingwang 发表于 2016-6-1 11:53
1.内部RAM数据传输到LCD,需要将DMA配置为内存到内存的配置,只能使用DMA2,CR..DIR=2
2.如果LCD是8080总线, ...

大神,长见识了。看过原子哥探索者综合测试实验的spblcd驱动吗?那个能不能在内部192K空间申请内存然后把数据刷到LCD???如果可以的话,这个DMA怎么配置?
回复

使用道具 举报

5

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-5-29
在线时间
5 小时
发表于 2016-6-1 19:32:21 | 显示全部楼层
起飞了
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-6-1 19:39:24 | 显示全部楼层

什么意思
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-6-1 20:01:54 | 显示全部楼层
李振 发表于 2016-6-1 19:30
大神,长见识了。看过原子哥探索者综合测试实验的spblcd驱动吗?那个能不能在内部192K空间申请内存然后把 ...

我没有看过你说的那个代码,因为这些都是很基础的东西,如果是我自己要用的话,我会参考官方的DEMO和用户手册来做.
你参考我给你提出的配置方法,自行修改试试吧,不明白就看看用户手册关于DMA的章节,多思考,多实验.
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-6-1 20:04:46 | 显示全部楼层
zmingwang 发表于 2016-6-1 20:01
我没有看过你说的那个代码,因为这些都是很基础的东西,如果是我自己要用的话,我会参考官方的DEMO和用户手 ...

一直在看,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-6-1 20:08:57 | 显示全部楼层
李振 发表于 2016-6-1 19:30
大神,长见识了。看过原子哥探索者综合测试实验的spblcd驱动吗?那个能不能在内部192K空间申请内存然后把 ...

可以,不过192K,不够一帧缓存。
你也就显示个小小区域。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-6-1 20:51:54 | 显示全部楼层
正点原子 发表于 2016-6-1 20:08
可以,不过192K,不够一帧缓存。
你也就显示个小小区域。

开10K缓冲,多次DMA传输可以吗?我在探索者开发板中把srambuf改小,改到1K还能传输,但是我把内存申请放在内部内存,就是//sramlcdbuf=gui_memex_malloc(lcddev.width*lcddev.height*2);        //1帧缓存就够了//if(sramlcdbuf==NULL)return 1;//错误
就是这个函数,把它更改到内部内存就不行了,就是这个#define SLCD_DMA_MAX_TRANS        1*1024//DMA一次最多传输1K字节       
extern u16 *sramlcdbuf;        //SRAMLCD缓存,先在SRAM 里面将图片解码,并加入图标以及文字等信息。。。。。。但是
        sramlcdbuf=gui_memex_malloc(lcddev.width*lcddev.height*2);        //1帧缓存就够了
        if(sramlcdbuf==NULL)return 1;//错误       
这句话,更改为在内部内存申请,就不对了。就花屏了
我刚测试过。。。。
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-6-1 20:55:02 | 显示全部楼层
正点原子 发表于 2016-6-1 20:08
可以,不过192K,不够一帧缓存。
你也就显示个小小区域。

所以我就考虑是spb.c中的驱动不能支持在内部内存使用缓存。暂时还不知道什么原因,求助原子哥,
回复

使用道具 举报

21

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-6-17
在线时间
136 小时
 楼主| 发表于 2016-6-1 21:00:12 | 显示全部楼层
正点原子 发表于 2016-6-1 20:08
可以,不过192K,不够一帧缓存。
你也就显示个小小区域。

原子哥请帮忙看一下程序,谢谢http://pan.baidu.com/s/1o8TaE4y
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 11:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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