OpenEdv-开源电子网

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

外部SRAM程序有一点不能理解,求教

[复制链接]

18

主题

46

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2014-2-4
在线时间
9 小时
发表于 2014-3-11 20:48:50 | 显示全部楼层 |阅读模式
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{
for(;n!=0;n--)  
{    
*(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;  
WriteAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1.
pBuffer++;
}   
}
这个程序中的 WriteAddr+=2;//这里需要加2,是因为STM32的FSMC地址右移一位对其.加2相当于加1. 
写在 *(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;这个语句后面能起到对齐FSMC地址的作用吗?
还是应当下在它的前面呢

u32 testsram[250000] __attribute__((at(0X68000000)));//测试用数组
for(ts=0;ts<250000;ts++)testsram[ts]=ts;//预存测试数据
这个直接把数据存到地址里面,不需要对齐FSMC地址了吗?






 

选择了就别再后悔
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-11 23:33:23 | 显示全部楼层
回复【楼主位】LLS:
---------------------------------
这里+1才对。
库函数版本还没改过来,寄存器版本已经修正了。
 *(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer
这句不需要对其,这句因为有了VU8*这个强制转换,FSMC回去控制UB/LB的高低字节,来控制写入的数据,所以地址不需要加2了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

46

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2014-2-4
在线时间
9 小时
 楼主| 发表于 2014-3-12 18:09:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
回复【2楼】正点原子:
---------------------------------
原子哥,是不是WriteAddr=4096时,对应的SRAM地址是2048呢?

u32 testsram[250000] __attribute__((at(0X68000000)));//测试用数组
for(ts=0;ts<250000;ts++)testsram[ts]=ts;//预存测试数据

testsram[1]对应的地址右移以后也就变成了0x68000010了是吗?
选择了就别再后悔
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-12 23:21:58 | 显示全部楼层
回复【3楼】LLS:
---------------------------------
WriteAddr=4096,地址是:0X68001000
testsram[1]的地址是:0X68000000+0X100
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

46

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2014-2-4
在线时间
9 小时
 楼主| 发表于 2014-3-13 13:36:50 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
还是不大理解:
比如在SRAM的地址0写入1个8位的字节,那么LB会输出有效,而UB则保持不变(高电平),表示写入地址0的低8位,写法就是: 
*(vu8*)(Bank1_SRAM3_ADDR+0)=0Xaa;//0XAA是你想写入的字节。 
而如果要在SRAM地址0写入高8位,那么对于STM32来说,地址就相应加1即可,即: 
*(vu8*)(Bank1_SRAM3_ADDR+1)=0XAA; 
此时LB会输出高电平,UB会输出有效电平(低电平),表示写入地址0,的高字节。 
这样,对STM32来说,地址就是连续的了,0,1,2,3,4,5,都是合法的了,自然就不需要你的地址右移对齐了,硬件通过UB/LB去控制了。

看过你写的这个,是不是一个地址可以写入两个字节的数据。Bank1_SRAM3_ADDR+0与 Bank1_SRAM3_ADDR+1右移后的地址对应的是0X68000000,Bank1_SRAM3_ADDR+2与Bank1_SRAM3_ADDR+3右移后地址是0X68000001。。。。所以实现地址连续呢
WriteAddr=4096,对应地址是0X68000800,testsram[1]的地址是:0X68000002。
我理解是在哪出错了呢?
选择了就别再后悔
回复 支持 反对

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13083
金钱
13083
注册时间
2012-11-26
在线时间
3809 小时
发表于 2014-3-13 13:38:36 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-13 17:40:15 | 显示全部楼层
回复【5楼】LLS:
---------------------------------
地址已经是连续的了是吧?
那4096应该是:0X1000
testsram[1]=地址+4=0X6800 0004

前面我的100是错的,搞成二进制去了...倒。

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

使用道具 举报

18

主题

46

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2014-2-4
在线时间
9 小时
 楼主| 发表于 2014-3-13 18:26:48 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥,你说的是RAM的地址吗?
可是你在上面在SRAM地址0写入了高八位和低八位,WriteAddr就加到1
那在SRAM地址二写入高八位和低八位时,WriteAddr加到3
那么在SRAM地址2048写入高八位和低八位时,WriteAddr不就加到4095吗
那WriteAddr=4096时,SRAM地址不也就成了2049了吗?
选择了就别再后悔
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-14 00:01:10 | 显示全部楼层
回复【8楼】LLS:
---------------------------------
这个看是不是从0数起,地4096个数据,和从0开始数,还是从1开始数有关系。
从0开始数,第4096个是4095,没错。
从1开始数,那就是4096.
这个,你自己权衡下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

46

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
316
金钱
316
注册时间
2014-2-4
在线时间
9 小时
 楼主| 发表于 2014-3-14 07:51:52 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
好的,谢谢原子哥
选择了就别再后悔
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 23:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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