51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > MSP430单片机 > 详细内容
MSP430 Flash编程程序
发布时间:2009/7/31  阅读次数:1091  字体大小: 【】 【】【
//flash.c文件
#define   __FLASH__
#define   __HW_v_2_1__
#include "flash.h"
/*************************************************************************************************
*       This section contains all FLASH memory relevant functions:                                                      *
*           writeByte                                                                                                                                    *
*           writeWord                                                                                                                                    *
*           eraseFLASH                                                                                                                                   *
*           saveInfoFlash                                                                                                                              *
*           changeInfo                                                                                                                                   *
*           updateInfo                                                                                                                                   *
*                                                                                                                                                               *
*************************************************************************************************/
/*************************************************************************************************
Function :            flash_writeFLASH
Parameter :           *dst   :   address within the FLASH page
                             value :   BYTE that has to be written to FLASH
Date :                   08.09.2001 / 17.11.2002 / 22.11.2002
Description :       this function writes a byte to an address in FLASH memory
                             warning: in FLASH only zeros can be written. if a bit value needs to be set to
                             one from zero, the whole page has to be erased, thus setting all bits to one.
                             then the value can be written correctly. this function does not perform the
                             necessary FLASH page erase.
*************************************************************************************************/
void flash_writeByte(BYTE *dst, BYTE value)
{
   FCTL2 = FWKEY | FSSEL0 | 20;            //clock source is MCLK, divisor is 20
   do
   {
      _NOP();
   } while(FCTL3 & 0x0001);                   // wait for BUSY to reset
   FCTL3 = FWKEY;                                    // reset the LOCK bit to enable program/erase
   FCTL1 = FWKEY | WRT;                          // set WRT for single acces


*dst = value;                                     // do the write as a byte

return;
}


/*************************************************************************************************
Function :            flash_writeWord
Parameter :           *dst   :   address within the FLASH page
                             value :   BYTE that has to be written to FLASH
Date :                   22.11.2002
Description :       this function writes a word to an address in FLASH memory
                             warning: in FLASH only zeros can be written. if a bit value needs to be set to
                             one from zero, the whole page has to be erased, thus setting all bits to one.
                             then the value can be written correctly. this function does not perform the
                             necessary FLASH page erase.
*************************************************************************************************/
void flash_writeWord(WORD *dst, WORD value)
{
   FCTL2 = FWKEY | FSSEL0 | 20;            //clock source is MCLK, divisor is 20
   do
   {
      _NOP();
   } while(FCTL3 & 0x0001);                   // wait for BUSY to reset
   FCTL3 = FWKEY;                                    // reset the LOCK bit to enable program/erase
   FCTL1 = FWKEY | WRT;                          // set WRT for single acces


*dst = value;                                     // do the write as a word

return;
}


/*************************************************************************************************
Function :            flash_eraseFLASH
Parameter :           *seg   :   any address within the FLASH page that is to be erased
Date :                   08.09.2001 / 19.11.2002
Description :       this function erases a FLASH page
*************************************************************************************************/
void flash_eraseFLASH(BYTE *seg)
{
   FCTL2 = FWKEY | FSSEL0 | 20;            //clock source is MCLK, divisor is 20
   do
   {
      _NOP();
   } while(FCTL3 & 0x0001);                   // wait for BUSY to reset
   FCTL3 = FWKEY;                                    // reset the LOCK bit to enable program/erase
   FCTL1 = FWKEY | ERASE;                      // set single segment erase function


*seg = 0xFF;                                       // do a dummy write to start erase

FCTL3 = FWKEY | LOCK;                        // lock the flash again

return;
}


/*************************************************************************************************
Function :            flash_saveInfoFlash
Parameter :           *container : pointer to updated copy of data in RAM
                             *flashPageBase : pointer to start of destination flash segment
Date :                   11.09.2002 / 26.11.2002
Description :       saves info flash page 0 to RAM (!!! works only for INFO flash access !!!)
*************************************************************************************************/
void flash_saveInfoFlash(BYTE *container, BYTE *flashPageBase)
{
   BYTE i;


flashPageBase = (BYTE*)((WORD)(flashPageBase) & 0xFF80);    // wrap around for flash page base address

for(i=0;i<128;i++)
   {
      container = *flashPage++;
   }
}


/*************************************************************************************************
Function :            flash_changeInfo
Parameter :           *container : pointer to updated copy of data in RAM
                             *pointer    : original pointer to variable that has to be updated
                             value         : new value for variable
Date :                   11.09.2002 / 26.11.2002
Description :       chages a word in the info flash 0 data (in RAM)
*************************************************************************************************/
void flash_changeInfo(BYTE* containerBase, BYTE *pointer, BYTE value)
{
   // pointer points into flash page to variable that is supposed to be changed
   // subtract flash page offset (0x1000) and add scratch pad offset
   pointer = (BYTE*)(((WORD)(pointer) & 0x7F) + (WORD)(containerBase));
   *pointer = value;
}


/*************************************************************************************************
Function :            flash_update
Parameter :           *container : pointer to updated copy of data in RAM
                             *flashPageBase : pointer to start of destination flash segment
Date :                   11.09.2002 / 26.11.2002
Description :       erases the flash page and writes the values from the RAM save area to flash
                             (!!! works only in INFO flash !!!)
*************************************************************************************************/
void flash_updateInfo(BYTE *container, BYTE *flashPageBase)
{
   // assumes prior saving and changing of flash data
   BYTE i;


flashPageBase = (BYTE*)((WORD)(flashPageBase) & 0xFF80);    // wrap around for flash page base address

_DINT();
   flash_eraseFLASH(flashPageBase);


for(i=0;i<128;i++)
   {
      flash_writeByte(flashPageBase++,*(container++));
   }
   _EINT();
}


/*flash.h文件
+-------------------------------------------------------------------------------+
:      copyright (c) Jean Randhahn         :
+-------------------------------------------------------------------------------+
: Project              : CANeye - Uni Rostock                                                                  :
: Compiler            : IAR workbench GUI 2.31E / target descriptor v1.26A/WIN         :
+-------------------------------------------------------------------------------+
:                                                                                                                                   :
: class      : flash                                                                                           :
: File name           : flash.h                                                                                       :
: Target hardware : MSP430F148/9                                                                               :
:                                                                                                                                   :
: File Editor       : J. Randhahn                                                                                 :
: Created              : 06.08.2002                                                                                  :
:                                                                                                                                   :
: Description       :                                                                                                     :
:                                                                                                                            :
:                                                                                                                               :
:                                                                                                             :
:                                                                                                                                   :
+-------------------------------------------------------------------------------+
:                                                                                                                                   :
: Modification history:                                                                                              :
:                                                                                                                                   :
:                                                                                                                                   :
+-------------------------------------------------------------------------------+
*/
#ifndef __FLASH_H__
#define __FLASH_H__


#ifdef   __FLASH__
/*::::::::::::::::::::::::: START OF LOCAL PART ::::::::::::::::::::::::::::::::*/
/*----------------------- LOCAL INCLUDES ---------------------------------------*/
#include <msp430x14x.h>
#include "type.h"


/*----------------------- LOCAL DEFINITIONS ------------------------------------*/

/*----------------------- LOCAL FUNCTION DECLARATIONS --------------------------*/
           void                flash_eraseFLASH(BYTE *seg);
           void                flash_writeWord(WORD *dst, WORD value);
           void                flash_writeByte(BYTE *dst, BYTE value);
           void                flash_saveInfoFlash(BYTE *container, BYTE *flashPage);
           void                flash_changeInfo(BYTE* containerBase, BYTE *pointer, BYTE value);
           void                flash_updateInfo(BYTE *container, BYTE *flashPageBase);


/*----------------------- LOCAL CONSTANTS AND VARIABLES ------------------------*/

/*----------------------- PUBLIC VARIABLES WITH INITIALISATION -----------------*/


/*::::::::::::::::::::::::: END OF LOCAL PART ::::::::::::::::::::::::::::::::::*/

#else
/*----------------------- PUBLIC VARIBALES INITIALIZED LOCALLY -----------------*/
#endif


/*-------------------- PUBLIC DEFINITIONS --------------------------------------*/

/*-------------------- PUBLIC CONSTANTS AND VARIABLES --------------------------*/

/*-------------------- PUBLIC FUNCTION DECLARATIONS ----------------------------*/
extern void                flash_eraseFLASH(BYTE *seg);
extern void                flash_writeWord(WORD *dst, WORD value);
extern void                flash_writeByte(BYTE *dst, BYTE value);
extern void                flash_saveInfoFlash(BYTE *container, BYTE *flashPage);
extern void                flash_changeInfo(BYTE* containerBase, BYTE *pointer, BYTE value);
extern void                flash_updateInfo(BYTE *container, BYTE *flashPageBase);
#endif


//type.h文件
/* START type definitions for convinience with microcontrollers ****************************/
typedef unsigned char      BYTE;                   /* 8 bits */
typedef unsigned short    WORD;                 /* 16 bits */
typedef unsigned long      LONGWORD;           /* 32 bits */


/* for dividing a WORD into two BYTEs */
typedef   union    _WORD_BYTE
                { WORD    w;
                   BYTE    b[2];
                } WORD_BYTE;

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号