【图文解说】基于飞思卡尔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 的说明


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部