Board logo

标题: 请教s12单片机外扩ram问题 [打印本页]

作者: jianxue    时间: 2007-11-16 14:16     标题: 请教s12单片机外扩ram问题

型号是mc9s12dj64,需要外接一块总线通讯器spc3,其实就是一块双口ram,选择的是窄扩展模式,地址暂定为0x1000~0x15ff。目前的问题是通过仿真器无法将程序烧写到flash中,后来将模式改为单芯片模式 就可以正常烧写了,通过阅读版上的帖子,怀疑可能是开发环境没设置好,比如prm文件中还要定义外部ram的地址,
后来在ram.prm中修改如下:
SEGMENTS
MY_RAM = READ_WRITE 0x0400 TO 0x0BFF; /* 2K */
MY_PSEUDO_ROM = READ_ONLY 0x0C00 TO 0x0FFF; /* 1K */
SPC3_RAM =READ_WRITE 0X1000 TO 0X15FF
END
PLACEMENT
_PRESTART, STARTUP,
ROM_VAR, STRINGS,
NON_BANKED,DEFAULT_ROM,
COPY INTO MY_PSEUDO_ROM;
DEFAULT_RAM INTO MY_RAM;
EXT_RAM INTO SPC3_RAM
/* EEPROM_DATA INTO EEPROM; */
END


然后在main.c中

#pragma DATA_SEG EXT_RAM
SPC3 spc3;// SPC3是一个结构体,定义了器件的内部结构
#pragma DATA_SEG DEFAULT

还是烧不进去

请问是什么原因阿,是不是我还遗漏了某些寄存器设置?

同时还有一些问题要请教:
1、外部ram级别最低,如何保证它不被flash重叠呢?是不是设置romhm?
2、0x1000~0x15ff这个地址可用马?

3x
作者: strongchen    时间: 2007-11-19 14:59

外部地址最好选用内部空间没有占用的地址,这样就不会发生冲突。另外,如果要用BDM进行编程或调试,MCU的管脚电平就配置成正常单片模式即可。当程序运行后再写寄存器,使MCU进入扩展模式。
作者: jianxue    时间: 2007-11-19 21:37

哇强陈 终于给我回复了 等的好心急阿
你的意思是我调试的时候把MODA MODB配置成single chip 模式?
等调完了 程序定型了再改回扩展模式?那样调试和最终运行的结果会不会有偏差?


作者: strongchen    时间: 2007-11-20 11:54

不会有什么偏差的。
作者: jianxue    时间: 2007-11-21 22:13

强陈,我用单片模式已经可以仿真了。但是我怀疑是否真的写入到外部ram,因为有些值写进去后读出来是对的,但有些是有问题的。会不会单片机把它划到了一块内部ram中呢?我是按照顶楼的格式定义的外部ram,应该没问题吧?

还有一个问题,我想把e_clock展宽,怎么做?单片模式下是无效的

非常谢谢 期待您的回复
作者: strongchen    时间: 2007-11-22 10:28

MCU的管脚配置为单片模式,上电复位后MCU先进入单片模式。但必须通过改写寄存器的内容,使MCU进入扩展模式,这样才能对外部空间进行访问。
作者: jianxue    时间: 2007-11-22 10:57

热心的强陈!!回复好快
请问改那个寄存器阿?看了半天资料没找到阿
我刚才拔了锁存器374,data1里边外ram的值仍然有,可见写外ram没成功,很可能是s12划了一块内部ram
作者: strongchen    时间: 2007-11-22 11:39

修改MODE寄存器。参看文档《S12MEBIV3.pdf》。
作者: jianxue    时间: 2007-11-22 19:48

强陈 搞不定阿 改了mode 还是不行
没有锁存器 照样能读出ram的值
你能传一份应用窄扩展模式的工程例子马 参考一下
作者: bmbmi    时间: 2007-11-23 10:40

下面的代码在就是上电后更改工作模式为EXPEND NARROW,我已经调通。另外,你可以通过查看MAP文件你的外部RAM是否在指定空间。
void Initial(void)
{
REFDV=0x01;
SYNR=0x02; //SYSTEM CLOCK 24MHZ
PLLCTL_PLLON=1;
PLLCTL_AUTO=1;
wait(5);
CLKSEL_PLLSEL=1;
///expended ram init///////////////////////////////////////
PEAR=0x04;
EBICTL_ESTR=1;//0:free run
MISC=0x0d;
MODE=0xb3;//normal expended narrow
}
作者: jianxue    时间: 2007-11-23 23:20

太感谢了 我调着试试
论坛上热心肠好多阿
作者: jianxue    时间: 2007-11-27 17:20

还是有一点问题,如果直接用wizard建一个工程 空内容 ,晶振24m,eclk输出12m,可按bmbmi的方法,eclk直接输出高电平了,没有脉冲阿。那没有时钟,数据怎么能写入外ram呢?
头大了!!
斑竹能帮我看一下工程吗?到底我的程序能访问外ram吗?

作者: strongchen    时间: 2007-11-27 17:24

把你的project打包贴出来吧。
作者: jianxue    时间: 2007-11-27 17:40

http://bbs.chinaecnet.com/uploadImages/jianxue.rar
参考bmbmi 只有几句话,eclk一直为高
作者: jianxue    时间: 2007-11-27 17:44

我的cpu是mc9s12dj64 cw4.6教学版,p&e的bdm
作者: jianxue    时间: 2007-11-28 10:26

今天突然想到扩展模式的初始化是不是应该放在start12.c中?
作者: strongchen    时间: 2007-11-28 10:36

你的程序中ESTR设置为1,同时又没有对外部空间的操作,ECLK是一直保持不变,但应该为低。
作者: jianxue    时间: 2007-11-28 10:49

您的意思是ECLK只有进行读写操作时才会有输出?
可是我用wizard建的空工程运行后ECLK一直有脉冲阿
作者: strongchen    时间: 2007-11-28 11:05

与ESTR的设置有关。
作者: jianxue    时间: 2007-11-29 08:56

恩,也就是说ESTR设置为自由时钟ECLK一直有输出,否则读写时才有。
还有一个问题想麻烦一下您,扩展模式下bdm调试窗口中,data1也就是全局变量的值准确吗? 对外ram读写时,寄存器少的话读出来的值还是对的,多了的话就不对了
作者: strongchen    时间: 2007-11-29 10:07

寄存器?你是说变量数吗?多少才是“少”和“多”?具体数量是什么,试过没有?
作者: jianxue    时间: 2007-11-29 11:37

刚才调了一下,是程序有问题
呵呵 不好意思





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