【图文解说】基于飞思卡尔MC9S12XS的Flash擦除和写入操作
关于Flash的擦除和写入,真的是让我最费力的一部分,网上的相关资料很少,好不容易找到了一点相关代码,却发现程序不能正常的运行,而且更令人无解的是程序本身怎么检查都检查不出错误。好啦,一点一点的说说我的辛酸史。
至于擦除和写入的原理是什么,这个不是我们关心的,我也不去赘述,我主要说明一下相关的具体操作。
我们主要是对飞思卡尔Flash中的PFlash即存放程序段的Flash进行操作。如图:
步骤大概分为:
1、设置Flash分频寄存器:
Flash的操作对频率有一定的要求,过低擦除不成功,过高会损毁Flash,如图为:
MC9S12XS128的FCLKDIV寄存器,所有位都是可读的但是只有7位可写入。至于应该如何设置分频数,有一张表格可以参考:
如表格说明,分频数是根据外部时钟来定的,MC9S12XS128的外部时钟是16MHz,所以我选择了0x10作为分频数。
给出一一些具体的代码:
/***********************************************************
** 名 称:void PFlash_Init(void)
** 功 能:PFlash初始化
** 入口参数:无
** 出口参数:无
** 使用说明:无
************************************************************/
void PFlash_Init(void)
{while(FSTAT_CCIF==0); //等待正在处理的Flash操作,即CCIF=1时,操作完成FCLKDIV=0x10; //外部晶振为16MHz,Flash时钟设置为1MHzFCNFG=0x00; //禁止中断while(FCLKDIV_FDIVLD==0); //等待时钟设置成功,即FDIVLD为1时设置成功
}
这里补充一下对
FCLKDIV_FDIVLD
的说明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
