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

求助:mc9s12dg128地址映射问题

求助:mc9s12dg128地址映射问题

mc9s12dg128单片机,上电后的缺省状态下,EEPROM被RAM覆盖掉了,现在要想利用EEPROM资源,要怎么配置呢?
我是在CODEWARRIOR中建立了用汇编编程的工程,里面有个mc9s12dg128.inc,其中有
RAMStart: equ $00002000
RAMEnd: equ $00003FFF

EEPROM_1800Start: equ $00001800
EEPROM_1800End: equ $00001FEF
是不是直接修改这个呢?
要改变RAM和EEPROM的地址,要做2件事:
1. 修改PRM文件,改变RAM的地址,并定义EEPROM的地址。这是告诉编译器生成正确的地址代码。
2. 在程序中设置INITRM和INITEE寄存器,这才是将RAM和EEPROM的物理地址映射到正确的地址上去。
海纳百川  有容乃大
可是在汇编的工程里,没有.prm的文件。prm文件夹里只有个.bbl的文件,如图
你在建project的时候,选Relocatable Assemble,不要选Absolute Assemble,就可以生成PRM文件了。
海纳百川  有容乃大
哦,谢谢了!试试
如果我想把eepram定义在800—0fff,把ram定义在2000——3fff中,我的程序中这样写行吗?
MOVB #$09,INITEE
NOP
MOVB #$21,INITRM
NOP
INITRM和INITEE寄存器只能写一次,是说上电复位后只能写一次么?
我按照你说的修改了PRM文件,并在程序中写入
MOVB #$09,INITEE
NOP
MOVB #$21,INITRM
NOP
但发现ram的地址似乎还是在0000——1fff中,这是为什么呢?
你为什么认为RAM的地址还是0000~1FFF呢?把整个project贴出来看看吧。
海纳百川  有容乃大

我是通过堆栈来看的,只有堆栈指针正确指向了ram地址,call后子程序才能正确返回。
但现在我更改了地址映射,堆栈指针指向$2200,子程序不能正确返回,但改成$1FFF后,就能正常返回了。这应该就是因为我$2200并不是ram吧
http://bbs.chinaecnet.com/uploadImages/TRY_ADDRESS1.rar

等待你的回复,谢谢!!

[此贴子已经被作者于2007-5-25 16:29:44编辑过]

可是我看到你的程序里写的是
MOVB #$01,INITRM
对吗?
海纳百川  有容乃大
我$01,$09,$21,都给过,都不行呀。
返回列表