Board logo

标题: 已经快1个月,访问外部RAM的问题仍未解决。[求助] [打印本页]

作者: 小龚0005    时间: 2006-3-18 10:25     标题: 已经快1个月,访问外部RAM的问题仍未解决。[求助]

 摸索了快1个月,我还是不懂如何访问片外RAM地址。
  上次发贴请教时,记得strongchen 版主说过访问片外RAM与访问片内RAM方式是一样的,于是我先弄懂访问片内RAM地址的办法,编写程序访问片内RAM 0x2000-0x2005地址如下:


unsigned int *ramaddr;
unsigned int  a,b,c, x,y,z;


void main(void)
{
  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
 
  /*** End of Processor Expert internal initialization.                    ***/


  /* Write your code here */
  for(;;)
  {
    a=10;
    b=20;
    c=30;
    ramaddr=(volatile unsigned int*)(0x3000);

    *ramaddr=a;
    *ramaddr++;


    *ramaddr=b;
    *ramaddr++;


    *ramaddr=c;
    

    z=*ramaddr;
    *ramaddr--;
   
    y=*ramaddr;
    *ramaddr--;
   
    x=*ramaddr;


  }
  /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  for(;;){}
  /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/


该程序执行后x=10,y=20,z=30,成功!



接着我修改程序让它访问外部RAM:
把  ramaddr=(volatile unsigned int*)(0x3000)
改成ramaddr=(volatile unsigned int*)(0x108000)
理所当然地想这下可以访问0x10页的0x8000-0x8005了,但是执行结果失败了!


我又试着改成这个样子:
PPAGE=0x10;
ramaddr=(volatile unsigned int*)(0x8000);
单步执行时候程序跳进Start12.c中死了!


另外我还试过许许多多的其他办法,仍然失败,我实在没主意了,请各位大侠帮帮小弟我!


作者: 小龚0005    时间: 2006-3-20 08:58

没人肯帮我吗?可能大家都觉得这是个菜鸟问题不屑于回答,可我找不到例程就是跨不过去,我不是那种不经自己思考就发问的人。求大家帮帮忙,给我几句C例程。
作者: strongchen    时间: 2006-3-20 10:42

请参考AN2408中的源程序。
作者: 小龚0005    时间: 2006-3-20 15:38

AN2408我看过了,是V2.1最新版本,里面没有C例程,只在文档的最末附有一段虚拟总线时序的程序。

[此贴子已经被作者于2006-3-20 15:38:49编辑过]


作者: 小龚0005    时间: 2006-3-20 16:16

strongchen 版主,帮帮我……
作者: 小龚0005    时间: 2006-3-20 16:21

我若这样:
ramaddr=(volatile unsigned int*)(0x108000);
ramaddr是不是就能指向片外RAM的0x108000地址了?
可是对*ramaddr赋值时,用示波器观测NE64片子的扩展地址线引脚,根本没有任何动作。
作者: strongchen    时间: 2006-3-21 12:03

还有一些有关扩展总线的控制寄存器的设置必须正确。还是要仔细看一下AN2408里的设置。
作者: 小龚0005    时间: 2006-3-21 16:51

所有的寄存器我用Code Warrior3.1中的处理器专家(Processor Expert)来设置的,应该不会有错。
能不能给个例程让我尽快把问题解决?我好几天没吃肉了……
作者: denghaibo    时间: 2011-10-24 21:37

1# 小龚0005 ramaddr=(volatile unsigned int*)(0x108000);
改成ramaddr=(volatile unsigned int*)(0x800010);试试




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0