硬汉嵌入式论坛

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

[例程下载] F407设置疑问

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2016-8-1 13:19:30 | 显示全部楼层 |阅读模式
在使用F407的ADC+定时器+DMA的采样方式中,如果打开IRAM2,ADC采样就异常,得到全部是0.  但是,DAC也是定时器+DMA方式,却是正常的。
如果放弃IRAM2,ADC就正常了。这是为什么呢?
ScreenHunter_184 Aug. 01 13.11.jpg
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
QQ
发表于 2016-8-1 13:27:14 | 显示全部楼层
这段内存是内核专有的,除了内核任何其它总线都不能访问,这就意味着,一旦编译器将数据分配到CCM中,而同时使用了DMA访问,显然会出问题。
[sub][/sub][sup][/sup][strike][/strike]关于ccm内存的使用可以看http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=604814&fromuid=392580
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2016-8-1 14:09:46 | 显示全部楼层
CCM RAM不支持DMA。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2016-8-1 14:15:56 | 显示全部楼层

回 eric2013 的帖子

eric2013:CCM RAM不支持DMA。 (2016-08-01 14:09) 
那我们只能放弃那个64K的RAM了吗?

我没有特别定义变量到这个RAM中,都是Keil编译自动搞得。
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2016-8-1 14:23:45 | 显示全部楼层

回 youyoudh 的帖子

youyoudh:这段内存是内核专有的,除了内核任何其它总线都不能访问,这就意味着,一旦编译器将数据分配到CCM中,而同时使用了DMA访问,显然会出问题。
关于ccm内存的使用可以看http://www.stmcu.org/module/foru ... ;amp;fromuid=392580
 (2016-08-01 13:27) 
这种用法好繁琐,还不知道有没有潜在风险啊。。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2016-8-1 14:23:46 | 显示全部楼层

回 caicaptain2 的帖子

caicaptain2:那我们只能放弃那个64K的RAM了吗?

我没有特别定义变量到这个RAM中,都是Keil编译自动搞得。 (2016-08-01 14:15) 
在主程序里面设置一个指针变量,指向这个CCM RAM的首地址,直接用就行了,不让MDK去设置。
以前总结的几个使用方法

http://www.armbbs.cn/forum.php?mod=viewthread&tid=4314
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
 楼主| 发表于 2016-8-1 17:42:55 | 显示全部楼层
好了,我这么用了,应该也不算浪费了。

#define GUI_NUMBYTES  (1024*60)
void GUI_X_Config(void) {
  //
  // 32 bit aligned memory area
  //
  static U32 aMemory[GUI_NUMBYTES / 4] __attribute__((at(0x10000000)));
  //
  // Assign memory to emWin
  //
  GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
  //
  // Set default font
  //
  GUI_SetDefaultFont(GUI_FONT_8X16);
}
回复

使用道具 举报

20

主题

110

回帖

170

积分

初级会员

积分
170
发表于 2019-4-21 15:04:50 | 显示全部楼层
caicaptain2 发表于 2016-8-1 17:42
好了,我这么用了,应该也不算浪费了。

#define GUI_NUMBYTES  (1024*60)

我直接用指向外部SRAM的方法,把动态内存指向到IRAM2里了,目前没发现什么问题

#define IRAM2 ((U32)0x10000000)
#define GUI_NUMBYTES  (1024*64)

volatile U32 *aMemory = (volatile U32 *)IRAM2;
GUI_ALLOC_AssignMemory((void *)aMemory, GUI_NUMBYTES);
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 09:20 , Processed in 0.256198 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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