【求助】MC9S12DP512扩展外部RAM能写不能读
- UID
- 157947
- 性别
- 男
|
【求助】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 */
}
我用示波器看读写时序,为什么只看到有写时序的波形,没有读时序的波形呢? |
|
|
|
|
|
- UID
- 157947
- 性别
- 男
|
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
这样试试:
unsigned int __far *p;
可以单步走一下,看看读数时PPAGE寄存器是否改变。 |
|
|
|
|
|
- UID
- 157947
- 性别
- 男
|
本帖最后由 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 ”可有可无,好奇怪。 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
你把memory mode改为Large后,编译器自动把所有的地址变量都当作__far地址来处理了。 |
|
|
|
|
|
- UID
- 157947
- 性别
- 男
|
哦,明白了,多谢版主!不过我在Banked模式下始终没有测到读周期,很困惑呀。好在现在Large模式下可以,就这么用了,呵呵。 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
BANKED MODE和LARGE MODE的区别在于,在LARGE MODE下,所有的地址都自动采用__far类型,即包含了PPAGE寄存器的处理;而在BANKED MODE下,地址是否采用__far类型,要根据用户的定义和声明来判断。 |
|
|
|
|
|