最近过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; //设置页寄存器 程序走到这里就飞了
}
}
[此贴子已经被作者于2008-9-25 19:27:20编辑过]
这个程序也是<<嵌入式系统--使用HCS12微控制器的设计与应用>>中的例子~~
强烈推荐这本书哦~!
当 FCNFG |= 0x01选择块1的时候,PPAGE的值就在0X38-OX3B中选的.如果不是这样的话那我应该怎么选择块和设置相应的PPAGE呢?
谢谢strongchen~!
strongchen 康 需要你们的班助!!!来看看吧?
当你写PPAGE寄存器的时候,程序指针PC就直接跳到相应的页了!!因为在那个FLASH页里是么都没有,所以程序跑飞回不来了!!
关注楼主的进度ing。。。。
[em07][em07]大家好,最近遇到些事情.好长时间没来和大家学习了.
上面的问题已经解决了.只在把要操作的PPAGE的那段程序自己定义到一个固定的地址就OK了.如#pragma CODE_SEG NON_BANKED.当然也可以自己定义一段地址来放.
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |