最近过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编辑过] |