新聞中心

        MSP430 Flash編程程序

        作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
        //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;


        關(guān)鍵詞: MSP430Flash編程程

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阳信县| 赤水市| 田林县| 吴堡县| 亚东县| 平潭县| 彰化市| 盐城市| 丽江市| 荣昌县| 永宁县| 汽车| 丰镇市| 葫芦岛市| 九龙坡区| 壤塘县| 蒲江县| 玉环县| 文成县| 正镶白旗| 昌吉市| 延津县| 定州市| 巴中市| 宜兴市| 噶尔县| 彰武县| 伽师县| 铜山县| 沙湾县| 浦江县| 当雄县| 平陆县| 靖安县| 德格县| 富源县| 江川县| 贡觉县| 沙坪坝区| 永仁县| 慈利县|