【图文解说】基于飞思卡尔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时钟设置为1MHz
  FCNFG=0x00;                 //禁止中断
  while(FCLKDIV_FDIVLD==0);     //等待时钟设置成功,即FDIVLD为1时设置成功
}
这里补充一下对 FCLKDIV_FDIVLD 的说明

  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值