历史上的今天
返回首页

历史上的今天

今天是:2025年01月19日(星期日)

正在发生

2020年01月19日 | 关于MSP430-Flash超过64K的读写操作方法

2020-01-19 来源:eefocus

下面例子是Qiaohaikun先生几年前一直用在MSP430FG4618...使用过的,一直都挺好使。希望在此分享出来能帮助到有需要的网友们。同样,希望各网友们如有精品程序例子的话同样可以发贴到微控论坛来。人人为我,我为人人! 


运行代码 

 

#include "msp430xG46x.h"  

void WriteFlashErrorNum(void);  

//----------------------------------------------------------------------  

//功能:从flash中读出数据,只需给出首地址和取出数据的数量  

//日期:2006.12.13  

//输入:waddr为flash的地址,length为数据长度  

//输出:无  

//----------------------------------------------------------------------  

void ReadFlash(unsigned long int waddr,unsigned int length)  

{  

  unsigned char i=0;  

  if(FlashMangleFlag==0)  

  {  

    while(FCTL3 & BUSY);  

    if(length>64) length=64;  

    while(length--)  

    {  

      Internal_flashdata[i++]=__data20_read_char(waddr++);  

    }  

  }  

}  

 

//----------------------------------------------------------------------  

//功能:段擦除;  

//日期:2006.12.13  

//输入:waddr为flash的地址,  

//输出:无  

//----------------------------------------------------------------------  

//void EraseFlashOneBlock(unsigned long int waddr)  

void EraseFlash(unsigned long int waddr)  

{  

  if(FlashMangleFlag==0)  

  {  

    if((waddr>=0x1f400) && (waddr<0x20000))  

    {  

      while(FCTL3 & BUSY);  

      _DINT();  

      FCTL2 = FWKEY + FSSEL1 + FN4;  

      FCTL3 = FWKEY;                            // Clear Lock bit  

      FCTL1 = FWKEY + ERASE;                    // Set Erase bit  

      __data20_write_char(waddr,0);             // Dummy write to erase Flash segment  

      while(FCTL3 & BUSY);  

      FCTL3 = FWKEY + LOCK;                     // Reset LOCK bit  

      _EINT();  

    }  

  }  

}  

 

//----------------------------------------------------------------------  

//功能:将数据写入flash;  

//日期:2006.12.13  

//输入:waddr为flash的地址,length为数据长度,*buf为指向数据的指针  

//输出:无  

//----------------------------------------------------------------------  

unsigned char  WriteFlash(unsigned long int waddr,unsigned char *buf,unsigned int length)  

{  

    unsigned int i;  

    unsigned char temp,ErrorFlag = 0;  

    if(FlashMangleFlag==0)  

    {  

      if((waddr>=0x1f400) && (waddr<0x20000))  

      {  

        while(FCTL3 & BUSY);  

        _DINT();  

        FCTL2 = FWKEY + FSSEL1 + FN4;  

        FCTL3 = FWKEY;                            // Clear Lock bit  

        FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation  

        for(i=0;i        {  

          __data20_write_char(waddr,*buf);     // Write value to flash    

          temp = __data20_read_char(waddr);    // Read one byte  

           

          if(temp!=(*buf))                     // 判断读出的数据和写入的数据是否相当  

          {    

            ErrorFlag = 1;                   //写入flash操作错误标志  

            ErrorFlashNum ++ ;  

          }    

           

          waddr++;buf++;  

        }  

          

        while(FCTL3 & BUSY);  

          

        FCTL1 = FWKEY;  

        FCTL3 = FWKEY + LOCK;                     // Reset LOCK bit  

        _EINT();  

        if(ErrorFlag == 1) WriteFlashErrorNum();  

      }  

    }  

    return ErrorFlag;  

}    


推荐阅读

史海拾趣

ADPOW公司的发展小趣事

在市场竞争日益激烈的背景下,ADPOW公司深知品质是生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司注重品牌建设,通过广告宣传、参加展会等方式提升品牌知名度和美誉度。这些举措有效提升了公司的市场竞争力。

南晶电子(DGNJDZ)公司的发展小趣事

随着市场竞争的加剧,南晶电子意识到技术创新是企业发展的核心动力。公司投入大量研发资金,与多所高校和科研机构建立合作关系,共同研发新型半导体器件。经过不懈努力,南晶电子成功推出了一系列具有自主知识产权的高性能产品,赢得了市场的广泛认可。

DAICO公司的发展小趣事

DAICO公司深知品质的重要性,因此在生产过程中严格遵循国际标准和规范。公司不仅建立了完善的质量管理体系,还通过了多项国际认证,如ISO 9001等。这些认证证明了DAICO在产品质量和管理水平方面的实力,进一步提升了其在国际市场上的竞争力。

华瓷(Chinocera)公司的发展小趣事

在追求经济效益的同时,华瓷始终注重环保和可持续发展。公司投入大量资金用于研发环保型陶瓷材料和生产工艺,致力于减少生产过程中的能源消耗和废弃物排放。同时,华瓷还积极参与社会公益事业,为保护环境、促进可持续发展贡献自己的力量。

Computer Conversions Corp公司的发展小趣事

Computer Conversions Corp非常重视人才的培养和团队建设。公司定期组织内部培训和技术交流活动,鼓励员工分享经验和创新想法。同时,公司还建立了完善的激励机制,为员工提供广阔的发展空间。这种以人为本的管理理念,不仅增强了团队的凝聚力和创新力,也为公司的持续发展注入了强大的动力。通过这些举措,Computer Conversions Corp打造出了一支高素质、高效率的技术团队,为公司的长远发展奠定了坚实的基础。

GradConn Ltd公司的发展小趣事

随着业务的不断扩展,GradConn意识到全球化布局的重要性。公司不仅在台湾设立总部,还在英国和美国建立了生产设施,并通过遍布160个国家的销售和分销网络,为客户提供全方位的支持。这种全球化布局不仅提升了GradConn的市场竞争力,还使其能够更好地服务全球客户,确保产品能够及时、准确地送达世界各地。

问答坊 | AI 解惑

LED数码管知识简介

replyreload += \',\' + 374455;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

Windows7与wince常用开发环境的兼容性问题

最近打算买台新电脑,想试试Windows7,不知道与wince的开发环境兼容性如何 我一般用到的软件有:PB5.0 EVC VS2005 VC++6.0 ADS1.2 Keil3…

查看全部问答>

关于TE2440-II 显示问题

TE2440-II的VGA是通过CH7026来把LCD信号转换成VGA信号的,我对比了下和阳初的BSP发现个问题,TE2440-II里找不到VGAinit,而且在KERNEL里的CFW.C文件中initdisplay函数中也没有关于VGA的初始化问题,请问TE2440-II的CH7026的控制程序在哪个地方啊(芯 ...…

查看全部问答>

求助

在微软的adocepbzip安装包的adocepb\\setup\\Data Access 3.1\\Program Files\\DataAccess31\\INCLUDE目录下,有这样两个文件adoce31.idl和adocec31.idl,在命令行中执行midl adoce31.idl和midl adocec31.idl即可生成.h文件. 为什么我的生不成啊 ...…

查看全部问答>

哪里有PowerPC开发培训

11月祥佑PowerPC嵌入式系统开发培训班 开始报名了 开课时间:2008年11月,为期三天。 上课地点:上海 课程教材:《PowerPC嵌入式开发系统实验教材》 收费标准: 4000元/人 注:本次开班7折优惠:2800元/人。(含讲义费,午餐费) 课程特点: ...…

查看全部问答>

力保产品质量 佛山发布LED筒灯联盟标准

 佛山本土的LED筒灯联盟标准近日在佛山市质监局发布。据悉,该标准由佛山市标准技术研究院、佛山市照明灯具协会、中山大学佛山研究院联合本土7家LED企业发起制定。   据悉,佛山是全国最大的筒灯生产基地,筒灯产量约占全国40%左右,目前已有120 ...…

查看全部问答>

Magafunction的用法

As design complexities increase, use of vendor-specific intellectual property (IP) blocks has become a common design methodology. Altera provides parameterizable megafunctions that are optimized for Altera device architectures. ...…

查看全部问答>

定时器0中断

本帖最后由 dontium 于 2015-1-23 13:29 编辑 我从EEWORLD网站上载了一些例子,学习2812。 没有电路板,只进行软件仿真。 其中一个定时器0中断,发现不进中断。 情况是这样的,观察定时器可以计数。 本来我定时器周期设为0XFFFFFFFF. 可是计 ...…

查看全部问答>

请教,在用IAR软件仿真单步运行程序时怎样才能使它不跳入中断?

请教,在用IAR软件单步运行程序时怎样才能使它不跳入中断?…

查看全部问答>

大家一起来讨论一哈16位计数器TAR的用法(针对169)

Q1:当Timer_A的捕获比较模块工作在捕获模式(即CAP = 1)时,TAR是里面的值表示什么含义?它是在对什么进行计数? Q2:TAR中的值写入CCRx后,TAR会自动清零吗?此时TAIFG的状态和TAR有关吗?…

查看全部问答>