打印

有关于SRAM简单的读写程序有的发份

[复制链接]
3737|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mage心寒|  楼主 | 2011-10-24 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wangkj| | 2011-10-24 10:40 | 只看该作者
for(i=0;i<0xffff;i++)
{
x=i;:lol
}

使用特权

评论回复
板凳
mage心寒|  楼主 | 2011-10-24 15:01 | 只看该作者
看不懂,本人新手。麻烦注释下。。3Q

使用特权

评论回复
地板
wangkj| | 2011-10-24 15:31 | 只看该作者
对内存变量的所有操作,都是对sram的操作。

使用特权

评论回复
5
mage心寒|  楼主 | 2011-10-24 16:16 | 只看该作者
我现在就是外扩一个SRAM,有一些零碎的资料,程序写出来结果不对。。希望可以给份源代码参考下。。

使用特权

评论回复
6
wangkj| | 2011-10-24 16:21 | 只看该作者
你得先确认,硬件正常。
搞不明白,就找原厂。

使用特权

评论回复
7
mage心寒|  楼主 | 2011-10-24 16:41 | 只看该作者
这个是我们公司的一个人画的。。现在他走了。。程序什么的没有例子。。来了就给本书自己搞

使用特权

评论回复
8
bobo1957| | 2011-10-24 20:53 | 只看该作者
就是把控制信号发过去,然后读写数据,so easy

使用特权

评论回复
9
mage心寒|  楼主 | 2011-10-25 09:18 | 只看该作者
我也知道SRAM的读写算很简单的了。。但我现在不会啊。。求高手给份例子。。还想问下SRAM和CPU之间的最快速率

使用特权

评论回复
10
mage心寒|  楼主 | 2011-10-25 09:19 | 只看该作者
最快速率怎么计算

使用特权

评论回复
11
我是土匪| | 2011-10-25 09:36 | 只看该作者
可以选择IO模拟总线,可以直接用总线接口。

使用特权

评论回复
12
mage心寒|  楼主 | 2011-10-25 09:40 | 只看该作者
我同事跟我说不用模拟总线,开发板上带这个工程直接往寄存器里面送地址写数据就行了。。我也很郁闷呢。。那偏远,读写信号的时序不管了吗??现在一片迷茫啊。。刚老大还让我今天将SRAM与CPU的时序发给它,根据开发板写出程序,算出与CPU的最大通信速率。。求助啊。。最好给我发个代码。。本人QQ591652256

使用特权

评论回复
13
mage心寒|  楼主 | 2011-10-25 15:35 | 只看该作者
#include    "config.h"
#define uint unsigned int
#define uchar unsigned char
//#define SRAM_ADDR  (uint16 *)0x80000000   //SRAM的起始地址分配在BANK0
#define SRAM_ADDR  0x80000000
//由于BS62LV16008001的A0与LPC2214的A1相连,所以addr要左移一位
//#define GetAddr(addr)   (volatile uint16 *)(SRAM_ADDR|(addr<<1))
#define LED  0x000f0000
//#define
uint8 a=0;

void delay_ms(uint z)
{
   uint x,y;
   for(x=3000;x>0;x--)
      for(y=z;y>0;y--);
}

void sram_init()
{
PINSEL2=0x0e000020;          //WE OE CS0使能
BCFG0=0x0200182f;            //存储器组配置寄存器
PINSEL2=PINSEL2&0xfffffff7;  //将P1.16-P1.25设置为GPIO口
IO1DIR=LED;                  //将P1.16-1.19设置为输出端
IO1SET=LED;

}

void write_data(uint32 Addr, uint8 data)
{
  volatile uint16  *ip;
  ip=(volatile uint16 *)(SRAM_ADDR|Addr);
  *ip=data;  
}

uchar read_data(uint32 Addr)
{
  uchar k;
  volatile uint16 *ip;
  ip=(volatile uint16 *)(SRAM_ADDR|Addr);
  k=*ip;
  return(k);
}

int main()
{
  sram_init();
  write_data(0x0,0x01);
  delay_ms(5);
  a=read_data(0x0);  
  while(1)
  {
      if(a==0x01)   
      {
        IO1SET=LED;
      }
      else
      {
        IO1CLR=LED;
      }
  }  
  return(0);
}
这是我的程序,不知道哪错了,我用示波器量了OE WE BSL0信号还是高电平,我也配置了,不知道什么原因,求高手帮忙。。坐等啊。。哎。。等了一天了。。

使用特权

评论回复
14
mage心寒|  楼主 | 2011-10-25 16:31 | 只看该作者
到底有没有人救急啊。。

使用特权

评论回复
15
mage心寒|  楼主 | 2011-10-26 10:46 | 只看该作者
继续等。。。有没有人啊。。。

使用特权

评论回复
16
xsp123666| | 2011-10-26 10:51 | 只看该作者
高手

使用特权

评论回复
17
mage心寒|  楼主 | 2011-10-26 11:06 | 只看该作者
高手人呢

使用特权

评论回复
18
mage心寒|  楼主 | 2011-10-26 11:07 | 只看该作者
#include    "config.h"
#define uint unsigned int
#define uchar unsigned char
//#define SRAM_ADDR  (uint16 *)0x80000000   //SRAM的起始地址分配在BANK0
#define SRAM_ADDR  0x80000000
//由于BS62LV16008001的A0与LPC2214的A1相连,所以addr要左移一位
//#define GetAddr(addr)   (volatile uint16 *)(SRAM_ADDR|(addr<<1))
#define LED  0x000f0000
uint16 a=0;

void delay_ms(uint z)
{
   uint x,y;
   for(x=3000;x>0;x--)
      for(y=z;y>0;y--);
}

void sram_init()
{
PINSEL2=0x0e000020;          //拉低WE OE CS0
BCFG0=0x0000fbef;            //存储器组配置寄存器
PINSEL2=PINSEL2&0xfffffff7;  //将P1.16-P1.25设置为GPIO口
IO1DIR=LED;                  //将P1.16-1.19设置为输出端
IO1SET=LED;

}

void write_data(uint32 Addr, uint8 data)
{
  volatile uint16  *ip;
  PINSEL2=0x0e000020;          //拉低WE OE CS0
  ip=(volatile uint16 *)(SRAM_ADDR|Addr);
  *ip=data;  
  PINSEL2=0x0e000030;          //拉高WE OE CS0送数据
}

/*uchar read_data(uint32 Addr)
{
  uchar k;
  volatile uint16 *ip;
  ip=(volatile uint16 *)(SRAM_ADDR+0);
  k=*ip;
  return(k);
}*/

int main()
{
  volatile uint16  *addr;
  sram_init();
  write_data(0x0,0x01);
  PINSEL2=0x0e000020;          //拉低WE OE CS0
  addr=(volatile uint16 *)SRAM_ADDR+0;
  delay_ms(1);
  a=(*addr);  
      if(a==0x01)   
      {
        IO1SET=LED;
      }
      else
      {
        IO1CLR=LED;
      }
      while(1);
  return(0);
}
程序现在改成这样了,但还是不行。。求助,求高手

使用特权

评论回复
19
senioryzc| | 2011-10-26 11:28 | 只看该作者
一般是:
CS有效,延迟>=0,RD/WR有效,延迟>=0,RD/WR失效(此时数据锁存),延迟>=0, CS失效

这个和你的cpu和memory chip都有关系,别人怎么可能知道呢,自己耐心的看datasheet,对时序了

使用特权

评论回复
20
mage心寒|  楼主 | 2011-10-26 13:10 | 只看该作者
我配置了寄存器BCFG,设置WST1和WST2的值为2,我的CCLK位4*11.0592M系统频率为22.6NS   TWC=TRC=55NS根据那个我算的。。可能其它一些地方有问题吧。。我这没有例子我有点无从下手的感觉

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

1019

帖子

13

粉丝