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

关于Flash擦写问题——S12

关于Flash擦写问题——S12

问题1:Flash擦写是不是有两种方式:
(1)把Flash擦写代码Copy到RAM,然后跳到RAM的擦写代码首地址执行;
(2)把Flash擦写代码存放到非分页区0x4000-0x7FFF或0xC000-0xFEFF去擦写分页区0x8000-0xBFFF的Flash

问题2:读取非分页地址内容很简单,但怎样读取分页地址的内容如PAGE_30 0x308000-0x30BFFF;是不是先设置PPAGE 再读取0x8000-0xBFFF???
问题1:你说的基本上是对的。一般来说,S12的FLASH分成几个块(称为BLOCK或BANK),程序可以在一个块中执行,对另外的块进行擦写操作。当然,如果程序在RAM中执行的话,就可以对任意FLASH地址进行擦写操作了。可以参看此贴:
http://bbs.eccn.com/dispbbs.asp?boardid=3&rootid=124387&id=124387&star=
海纳百川  有容乃大
问题2:对于汇编编程来说是这样,读分页地址时,必须先设置PPAGE寄存器然后读0x8000~0xBFFF区的地址。但对于C编程来说,用户只要设定数据地址为分页地址,那么编译器会自动加上对PPAGE的操作,无需用户另外加对PPAGE操作的指令。
海纳百川  有容乃大
在CW调试中,memory窗口的0x8000~0xBFFF区的数据是会根据PPAGE的切换而切换的吗?
如果成功在PAGE_30 0x308000~0x30BFFF擦写Flash,memory窗口的0x8000~0xBFFF区和0x308000~0x30BFFF区都会更改吧

如果PAGE_30 0x308000地址数值为 0x55
i=*((volatile unsigned char*)(0x8000));不能读到0x55,是不是只能汇编先设置PPAGE寄存器然后才能读0x8000
memory窗口的显示与当前PPAGE寄存器的值有关。
可以直接用PPAGE=0x30来对PPAGE寄存器赋值,不一定要用汇编指令。但对PPAGE寄存器的操作一定要小心,因为程序代码的获取和执行也与之有关。最好由编译器自动对PPAGE进行操作。
海纳百川  有容乃大
感谢!!!
返回列表