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)那复位后寄存器为0或FF是什么原因,是系统默认的吗?
可是我如果不映射EEPROM地址,复位是不会为0或FF的
我想确认下 如果想映射EEPROM地址是不是只要在MAIN函数里设置INITEE寄存器,在P&E_ICD_linker.prm文件里声明EEPROM映射的地址,其他还要设置什么寄存器或声明什么内容?
寄存器的值在复位后是有确定的值的。
重新映射EEPROM的地址,只要设置INITEE寄存器并修改PRM文件就可以了。
我记得INITEE在复位后只能初始化一次,在start.c会初始化,你在main中又初始化了一遍会不会有问题?我不确定,大家讨论下。
我想应该是这样,你第一次写程序时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窗口看到的内容可能不是预期的,但是读取写地址的内容是预想的情况。
欢迎大家讨论。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |