飞思卡尔MC9S12X Flash驱动

发布者:温柔浪漫最新更新时间:2021-07-08 来源: eefocus关键字:飞思卡尔  Flash驱动 手机看文章 扫描二维码
随时随地手机看文章

在现今的经济社会,比拼的“快”不仅仅是速度快,更是效率高。身处社会分工细致的今天,让自己更快效率更高是有方法的。 


每一家MCU产商都会提供他们生产的MCU型号的datasheet,Reference Manual等各种说明手册。这对于从事电子软件开发的人员来说,这是他们的第一手资料,也是他们最重要的参考资料,他们所有的软件设计工作都是参考手册上的内容,比如,硬件工程师可能比较在乎芯片的电气特性;MCU应用工程师关注外设,编程器时序开发人员则比较注重去理解Flash Module,在工作中他们要仔细并反复阅读他们所关注的部分。 


飞思卡尔Flash 相关驱动 官网资料不是很多,都是一些零零散散的,今天就详细的带着大家学习下飞思卡尔FLASH驱动,


想学习flash 首先需要看懂下面的这个流程图,从时钟配置、读取状态位、写入命令、写入地址、写入数据等等。

下面大家一起来看下寄存器


/*********************************************************** ** 


名 称: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的说明


}


说明很简答,配合着程序注释一看就懂。


2、FSTAT状态寄存器


在上面的代码中出现了一行“while(FSTAT_CCIF==0);”,这就涉及到一个很重要的寄存器,就是Flash操作的状态寄存器,就像是Flash操作步骤中的“红绿灯”一样,告诉程序什么时候可以执行什么操作,什么时候必须要等待一下。如图:



数据手册如图,强烈建议还是自己读一下原文,很有好处。


再给出一些具体的代码:


CCIF的操作代码:


FSTAT_CCIF=1;           //启动执行命令,即launch指令

while (FSTAT_CCIF==0);    //等待执行完成


ACCERR和FPVIOL的操作代码:


if (FSTAT_ACCERR)           //判断并清除标志位; 

       FSTAT_ACCERR=1;    //将标志位清零

if (FSTAT_FPVIOL)           //判断并清除标志位; 

       FSTAT_FPVIOL=1;      //将标志位清零



注意点:说实话,当时我自己写程序的时候,就对标志位清零操作感到非常的疑惑,说好的清零操作呢,为什么是令标志位为等于1?后来才想明白,对于标志位,写0等效于没有操作,写1代表清零。原因主要有两点:


1)标志位为1一般表示有什么事情发生啦,对于标志位什么时候为1,应该是单片机根据具体的情况作出自己的判断,是根据实际情况来置1的,而不应该是人为的置1。


2) 如果某次操作我们只想对状态寄存器中的某一位或某几位进行操作,那么对其余位就必须没有任何的影响,如果规定写0时等效于无操作。



3、执行具体的指令


将分频和状态寄存器弄好后,就可以开开心心的执行具体的指令啦。指令具体的指令主要涉及到FCCOBIX寄存器和FCCOB寄存器:


FCCOBIX寄存器和FCCOB寄存器必须要配合使用。FCCOBIX进行选择,然后往FCCOB中写入具体的指令、地址和数据。Flash操作命令表如图:


/*********************************************************** ** 名 称:void PFlash_Erase(word ADDR16) ** 功 能:擦除P-FLASH的一个分区 ** 入口参数:无 ** 出口参数:无 ** 使用说明:无 ************************************************************/ void PFlash_Erase(word ADDR16) { while(FSTAT_CCIF==0); if(FSTAT_ACCERR) //判断并清除标志位; FSTAT_ACCERR=1; if(FSTAT_FPVIOL) //判断并清除标志位; FSTAT_FPVIOL=1; FCCOBIX_CCOBIX=0x00; FCCOB=0x0A7E; //写入擦除命令和高位地址,0A是指令,7E是高地址位 FCCOBIX_CCOBIX=0x01; FCCOB=ADDR16; //写入低16位的地址 FSTAT_CCIF=1; //启动执行命令 while(FSTAT_CCIF==0); //等待执行完成 }


P-Flash的写入操作:写入操作和擦除操作是差不多的:


/*********************************************************** ** 


名 称:void PFlash_Write(uint16 ADDR16) ** 


功 能:向PFLASH写入数据 ** 


入口参数:无 ** 


出口参数:无 ** 


使用说明:无 


************************************************************/ 


void PFlash_Write(word ADDR16) 



byte i,j; //i为Buffer的下标,j为string的下标 


for (i=0,j=0;i<4;i++,j++) 



Buffer[i]=0x0000; 


Buffer[i]=Buffer[i]|(string[j]<<8);


 j++;


 Buffer[i]=Buffer[i]|string[j];


 } 


while(FSTAT_CCIF==0); 


if(FSTAT_ACCERR) //判断并清除标志位;


 FSTAT_ACCERR=1; 


if(FSTAT_FPVIOL) //判断并清除标志位; 


FSTAT_FPVIOL=1; F


CCOBIX_CCOBIX=0x00; 


FCCOB=0x067E; //写入命令和高位地址(06是对P-Flash进行固化的指令) 


FCCOBIX_CCOBIX=0x01; //地址后16位 FCCOB=ADDR16; //写入低16位地址 


FCCOBIX_CCOBIX=0x02; //写入第一个数据 FCCOB=Buffer[0]; 


FCCOBIX_CCOBIX=0x03; //写入第二个数据 


FCCOB=Buffer[1]; FCCOBIX_CCOBIX=0x04; //写入第三个数据 


FCCOB=Buffer[2]; FCCOBIX_CCOBIX=0x05; //写入第四个数据 


FCCOB=Buffer[3]; FSTAT_CCIF=1; //写入执行命令


 while(FSTAT_CCIF==0); //等待执行完毕 } 这段程序理解起来应该没有问题吧。



4、最后一步:


还有注意一点  MC9S12X  flash驱动一定要放在ram中。


 

Flash不能对本身就行操作,也就是说在Flash中的代码不能对Flash进行操作,必须转移到RAM中才可以上面图片所示是一种方法。


还可以是使用的是#pragma关键字,再配合上codewarrior的.prm文件。


#pragma CODE_SEGFLASH_RAM //在.prm文件中将FLASH_RAM定义在RAM区中


// 对flash进行操作的代码


#pragma CODE_SEG DEFAULF


关于#pragma和.prm怎么用,注意需要利用利用RELOCATE_TO。

关键字:飞思卡尔  Flash驱动 引用地址:飞思卡尔MC9S12X Flash驱动

上一篇:飞思卡尔MC9S12X PIT模块
下一篇:飞思卡尔MC9S12X SCI驱动

推荐阅读最新更新时间:2024-11-12 07:51

蓝宙电子:八岁的小朋友可以这样编程控制小汽车
商场里的玩具五花八门,小汽车总是放在一个比较显眼的位置,它不仅吸引小朋友的目光,很多家长也非常喜欢,有时候买回去家长比孩子还玩得多。随着年龄的增长,小孩子越来越有自己的思想,很多小朋友想让玩具汽车按照自己的想法动起来。而现在市面上的大部分玩具汽车程序已经固化,无法更改,所以很难满足这一要求,今年的CITE2015上,蓝宙电子也带来自己新款智能汽车,满足八岁的小朋友编程控制汽车表演特技。   关于这款小车的性能,蓝宙电子副总经理廉德富告诉与非网记者,“八岁的小朋友会操作电脑就可以编程控制这辆小车,可以完成五大特技表演:极速漂移、自动避障、直道超车、蛇形绕弯和倒车入库。而且我们的编程采用卡片式编程,手机就可以实现控制,直接将功能模块
[嵌入式]
飞思卡尔采用先进的汽车雷达技术帮助提升乘客安全
飞思卡尔半导体和Continental基于长期合作,日前宣布计划将飞思卡尔的新一代77 GHz雷达技术集成在Continental的新一代短程和中程汽车雷达模块上。这一举措表明Continental综合高级驾驶员辅助系统(ADAS)雷达解决方案的新进展,有助于汽车制造商遵守安全法规并将ADAS安全优势应用到更多车辆。   飞思卡尔的新一代雷达芯片组,从一开始定义和开发就符合ISO 26262标准,集成了一个完整的雷达系统,全面覆盖整个车辆的各种应用,如紧急制动、盲点检测、车道保持辅助和行人检测。该系统为处理能力、通道数目、视野以及至关重要的安全性提供了可扩展性,使用多个雷达模块为车辆提供全方位雷达感应。借助芯片数量的显著减少,可
[嵌入式]
飞思卡尔推出面向软件工程师的汽车微控制器产品线S32K MCU
采用ARM Cortex 技术的新汽车架构实现了软件和硬件可扩展性,通过面向未来的特性和最佳的软件复用加快开发 2015年6月23日,德克萨斯州奥斯汀(2015年飞思卡尔技术论坛)讯-随着新汽车中芯片内容和复杂性的不断增加,未来的汽车发展对软件愈发依赖。新汽车通常集成了超过1亿行内置代码,比大多数民用客机的代码数量还要多。虽然软件带来了令人兴奋的创新机会,但同时也增加了复杂性,催生了大量的代码维护和上市速度挑战。因此,汽车电子供应商现在投入到软件领域的开发资源超过了在硬件方面的开发资源。 为了应对这些挑战,飞思卡尔半导体推出了首个旨在大大加快和简化软件开发的汽车微控制器产品线S32K。S32K基于广泛采用的
[单片机]
Freescale MC9S08AW60汇编学习笔记(一)
  MC9S08AW60是HCS08系列的MCU,它是8位的MCU,由HCS08核加上存储器和外围模块构成。HCS08系列的MCU除了MC9S08AW系列之外还有MC9S08GB系列、MC9S08GT系列、MC9S08AC系列等。不同型号的MCU应用领域的侧重点不同。   HCS08系列的MCU就只有5个寄存器:A、H:X、SP、PC、CCR。分别是8位、16位、16位、16位、8位。具体功能要在使用中掌握。MC9S08AW60的主频为4MHz,一个总线周期为T=0.25us。MC9S08AW60存放数据的方式是大端方式:低地址存放最高有效字节,此外需要知道的是存储器中RAM地址:$0070~$086F,FLASH地址:$08
[单片机]
飞思卡尔推出新一代汽车全景系统芯片
    “先进驾驶辅助系统”这一名词已经被越来越多人所熟知,依靠传感器和摄像头实现的一系列碰撞预警或补救功能令其颇受青睐。根据ABI Research研究,2020年,全球汽车先进驾驶辅助系统的市场将达到2,610亿美元。     为了应对如此快速的增长的市场,飞思卡尔半导体与博通公司近日共同开发出一款Qorivva MPC5606E芯片。据悉,这是业界首款全集成360°全景摄像头系统MCU。     驾驶辅助系统中的绝大部分功能都要依靠车外安装的摄像头,而随着技术进步,车企不仅仅对功能性有要求,对外观也有了更高的标准,它们希望摄像头能够变得更小,更不引人注目,从而不会破坏车辆的美观。小型摄像头能够更轻松地安装在
[汽车电子]
飞思卡尔与中芯国际打造基于其40nm工艺技术的i.MX应用处理器
实现 中国设计,中国制造 ,服务中国市场 飞思卡尔半导体(NYSE: FSL)与中芯国际( SMIC ;NYSE: SMI;SEHK: 981)日前宣布,双方将采用40nm低功耗(LL)工艺技术和晶圆生产工艺合作生产i.MX应用处理器。中芯国际是世界领先的半导体晶圆代工企业之一,也是中国内地规模最大、技术最先进的半导体晶圆代工企业。中芯国际的40nm LL逻辑工艺以极为先进的技术实现了低功耗、高性能和成本优化。 凭借双方合作,飞思卡尔能够推出为中国量身定制的产品,从而更好地服务中国市场;而中芯国际则可以加快在工业控制和汽车应用市场的扩展。这是飞思卡尔首次与中国本土的半导体晶圆代工企业合作设计和制造应用处理
[半导体设计/制造]
飞思卡尔计划采用ARM® Cortex®-M7内核
业界最广泛的基于ARM Cortex-M内核的可兼容且可扩展的MCU组合,将随着Cortex-M7内核的采用得到进一步扩展。 2014年9月24日 ,德克萨斯州奥斯汀讯-飞思卡尔半导体 日前宣布为最近发布的ARM Cortex-M7内核提供全面支持,飞思卡尔计划利用该内核使即将推出的嵌入式SoC的性能和功效达到新水平。飞思卡尔是ARM领先的合作伙伴和多种ARM产品的早期采用者,并且率先在市场推出了基于Cortex-M4内核和Cortex-M0+内核的MCU。 飞思卡尔拥有业界最广泛的基于ARM Cortex-M内核的可兼容且可扩展的MCU产品组合,可跨六个独特的Kinetis系列实现软件和硬件兼容,同时可选择提供通
[嵌入式]
飞思卡尔16位单片机(八)——PWM模块测试
一、PWM模块介绍 PWM在工业领域应用很广,是实现D/A转换和精确脉冲序列输出的有效手段。许多单片机都设置了PWM输出功能。XEP100单片机的PWM模块具有如下特点: (1)XEP100单片机具有8个可编程的PWM通道,与单片机的PP0—PP7管脚复用。每个通道的周期和占空比是可以独立控制的,8个通道都是8位精度的。通过设置寄存器PWMCTL可以将相邻的两个通道连接成一个16位精度的PWM通道,因此一个XEP100单片机可以提供4个16位精度的PWM通道; (2)每个PWM通道都有独立的计数器; (3)每个通道都可以设置为使能或禁能状态; (4)每个通道占空比的极性是可以通过软件选择的,通过设置寄存器PWMPOL实
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved