Board logo

标题: 【求助】MC9S12DP512扩展外部RAM能写不能读 [打印本页]

作者: Hunter.Cheung    时间: 2010-5-4 19:41     标题: 【求助】MC9S12DP512扩展外部RAM能写不能读

建工程时设的memory model是Banked。

.prm文件添加两行:
    ……
    Addr_CPLD = READ_WRITE 0x008000 TO 0x0080C0;
    ……
    EX_CPLD INTO Addr_CPLD;
    ……
compiler for HC12设置中添加了:-CpPPAGE=RUNTIME

主程序:
#pragma DATA_SEG __PPAGE_SEG EX_CPLD
unsigned int test[8];

#pragma DATA_SEG DEFAULT
unsigned int *p;
unsigned int q;

void MMC_Init(void)
{
  MODE = 0xA8;          /* Normal expanded mode,IVIS=1 */
  EBICTL = 0x01;        /* the E clock behaves as a bus control signal */
  MISC = 0x0f;          /* Stretch=1 cycle */
  PEAR = 0x04;          /* NECLK=0,RDWE=1 */
}

void main(void) {
  MMC_Init();
  EnableInterrupts;
  for(;;)
  {
     int i;
     _FEED_COP(); /* feeds the dog */
     test[0] = 0xA5;
      p = &test;
      q = *p;
    for(i = 0; i < 1000; i++){}    /*延时*/

  } /* loop forever */
  /* please make sure that you never leave main */
}

我用示波器看读写时序,为什么只看到有写时序的波形,没有读时序的波形呢?
作者: Hunter.Cheung    时间: 2010-5-7 10:08

自己顶起啊
作者: strongchen    时间: 2010-5-10 11:23

这样试试:
unsigned int __far *p;

可以单步走一下,看看读数时PPAGE寄存器是否改变。
作者: Hunter.Cheung    时间: 2010-5-10 18:47

本帖最后由 Hunter.Cheung 于 2010-5-10 20:23 编辑
这样试试:
unsigned int __far *p;

可以单步走一下,看看读数时PPAGE寄存器是否改变。
strongchen 发表于 2010-5-10 11:23
感谢版主的指点。按照您的办法我试了一下,发现PPAGE始终是0x20不变化,仍然没有读周期的波形。然后我猜想会不会是memory model有问题,就改成了Large,发现PPAGE可变了,在0和0x20两个值之间切换,读周期波形也出来了,而且compiler for HC12里面也不用设置-CpPPAGE=RUNTIME了。这是为什么呢?

另外经试验发现,在Large模式下,在CW4.5中,变量声明为“__far ”有写周期,否则没有;而在CW5.0中“__far ”可有可无,好奇怪。
作者: strongchen    时间: 2010-5-17 10:29

你把memory mode改为Large后,编译器自动把所有的地址变量都当作__far地址来处理了。
作者: Hunter.Cheung    时间: 2010-5-17 16:54

哦,明白了,多谢版主!不过我在Banked模式下始终没有测到读周期,很困惑呀。好在现在Large模式下可以,就这么用了,呵呵。
作者: strongchen    时间: 2010-5-19 10:12

BANKED MODE和LARGE MODE的区别在于,在LARGE MODE下,所有的地址都自动采用__far类型,即包含了PPAGE寄存器的处理;而在BANKED MODE下,地址是否采用__far类型,要根据用户的定义和声明来判断。




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