首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:关于s12dj64芯片EEPROM地址映射的问题

求助:关于s12dj64芯片EEPROM地址映射的问题

dj64的片子的RAM缺省地址是0x0000-0x0fff,EEPROM的缺省地址是0x000-0x07ff,由于内部寄存器的地址是0x000-0x03ff,所以EEPROM的缺省地址是0x0400-0x07fff,我现在想把eeprom的地址映射以到0x1000为起始地址的空间中去,看了论坛里想关帖子,我在MAIN函数里设置了INITEE=0x11,后面加了条空操作,MISC=1;在PRM里的P&E_ICD_linker.prm文件加了EEPROM = READ_ONLY 0x1000 TO 0x13FF;这样一句话。在运行程序的时候可以写到0x1000里,但是一复位0x1000里的值就为0了,掉电后也保存不了,不知还需要设置什么寄存器或在其他文件修改什么值,请版主帮助解决下,谢谢!

EFT0zDUb.rar (322.9 KB)
芯片掉电后,如果用CodeWarrior重新连接,缺省的设置是擦除所有的FLASH和EEPROM。你可以设置不擦除EEPROM试试。论坛里应该有相应的帖子说明如何做。
海纳百川  有容乃大

那复位后寄存器为0或FF是什么原因,是系统默认的吗?

可是我如果不映射EEPROM地址,复位是不会为0或FF的

我想确认下 如果想映射EEPROM地址是不是只要在MAIN函数里设置INITEE寄存器,在P&E_ICD_linker.prm文件里声明EEPROM映射的地址,其他还要设置什么寄存器或声明什么内容?

寄存器的值在复位后是有确定的值的。

重新映射EEPROM的地址,只要设置INITEE寄存器并修改PRM文件就可以了。

海纳百川  有容乃大

我记得INITEE在复位后只能初始化一次,在start.c会初始化,你在main中又初始化了一遍会不会有问题?我不确定,大家讨论下。

在start.c中,缺省状态下并不初时化INITEE等寄存器。
海纳百川  有容乃大

我想应该是这样,你第一次写程序时prm中为编译器定义了eeprom地址,在主程序初始化时对INITEE进行了重映射,

此时你已经可以对eeprom进行预置地址的读和写操作了。(已经写入eeprom)

在你复位MCU后,所有寄存器被复位,INITEE重新把EEPROM映射到0x0000-0x07ff。此时在调试环境下的0x1000- 0x13FF认为没有定义状态。所以你看到的都是0000。当程序运行完IEEE初始化后,此段内容变为FFFF。说明eeprom已经被映射到此。 (eeprom的内容是FFFF,即擦除状态)

为什么上次写的数据没有了,正如斑竹说的,cw在缺省状态下载程序时会擦除所有eeprom,和flash。

[此贴子已经被作者于2008-7-23 10:02:06编辑过]

我现在遇到的问题我想的是:在默认地址情况下,RAM和EEPROM重叠,写EEPROM可以直接写入,不用先擦除,但是映射过以后,必须先擦除你要写入数据的地址中的内容,然后才能写入数据。

我想情况应该是7楼说的那样,在memory窗口看到的内容可能不是预期的,但是读取写地址的内容是预想的情况。

欢迎大家讨论。

当RAM与EEPROM地址重叠时,由于RAM级别比EEPROM高,因此对这个地址操作时,实际上是对RAM进行操作,EEPROM完全被屏蔽掉了。当真正对EEPROM进行操作时,在写入之前是一定是要先擦除的。
海纳百川  有容乃大
返回列表