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

请教FLASH读写操作及程序下载问题~!

请教FLASH读写操作及程序下载问题~!

最近过FLASH读写操作进行数据的整体擦除和读写操作时,遇到了不能对非直接页进行整体擦除各写入的问题.想了很多办法都还没能解决.主要因为在进行PPAGE操作时程序就跑飞了.以下是FLASH读写的公共操作. 我把整体程序传上来

大家看看吧.
void Erase_Write_Pretreat(INT8U page)
{
INT8U i,j;
//1 判断是否设置时钟分频,若无分频,则先分频
if ((FCLKDIV&0x80) == 0) FCLKDIV |= 0x60;
//2 清保护错误和访问错误标志位
FCNFG |= 0x01; //FCNFG的第0位置1,选择BLOCK1
FSTAT |= 0x30; //清保护错误和访问错误标志位
FCNFG &= 0xFE; //FCNFG的第0位置0,选择BLOCK0
FSTAT |= 0x30; //清保护错误和访问错误标志位
//3 查表、选择块号,如果页号不为0就设置页寄存器
if (page != 0)
{
for (i = 0;i < 2;i++)
{
for (j = 0;j < 4;j++)
{
if (page == pagetable[j])
break;
}
if (j < 4)
break;
}
if (i == 0) FCNFG &= 0xFE; //页号3C~3F,选择BLOCK0
if (i == 1) FCNFG |= 0x01; //页号38~3B,选择BLOCK1
PPAGE = page; //设置页寄存器 程序走到这里就飞了


}


}

fPxMAxwo.rar (384.19 KB)

[此贴子已经被作者于2008-9-25 19:27:20编辑过]

这个程序也是<<嵌入式系统--使用HCS12微控制器的设计与应用>>中的例子~~

强烈推荐这本书哦~!

那PPAGE的值肯定有问题。
海纳百川  有容乃大

当 FCNFG |= 0x01选择块1的时候,PPAGE的值就在0X38-OX3B中选的.如果不是这样的话那我应该怎么选择块和设置相应的PPAGE呢?

谢谢strongchen~!

strongchen 康 需要你们的班助!!!来看看吧?

当你写PPAGE寄存器的时候,程序指针PC就直接跳到相应的页了!!因为在那个FLASH页里是么都没有,所以程序跑飞回不来了!!

关注楼主的进度ing。。。。

[em07][em07]

大家好,最近遇到些事情.好长时间没来和大家学习了.

上面的问题已经解决了.只在把要操作的PPAGE的那段程序自己定义到一个固定的地址就OK了.如#pragma CODE_SEG NON_BANKED.当然也可以自己定义一段地址来放.

返回列表