MSP430 Flash编程程序

发布者:数字舞者最新更新时间:2016-08-16 来源: eefocus关键字:MSP430  Flash  编程程序 手机看文章 扫描二维码
随时随地手机看文章
//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
#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;
关键字:MSP430  Flash  编程程序 引用地址:MSP430 Flash编程程序

上一篇:微型温差电池的无线传感器节点自供电系统设计
下一篇:MSP430和实时时钟HT1381的接口程序

推荐阅读最新更新时间:2024-03-16 15:05

基于MSP430智能小车的设计
智能小车涉及到高级计算机控制、电子机械、自动化等诸多学科,随着科技的不断进步,智能电子产品发展步骤不断加快,各种应用层次的机器人等大量出现,目前应用在智能小车或机器人的微控制器主要是8/16单片机或ARM和数字信号处理器DSP等。本设计采用TI公司生产的功耗低运行速度快且价格便宜的MSP430F2274为核心,避障检测采用测距精准的超声波传感器,该传感器采集小车周围的环境信息并传递给MSP430进行程序判断处理,从而达到控制小车自动避障的目的。 1 系统的总体结构框图 该系统主要由MSP430控制器,超声波避障模块,电机驱动,测速,语音模块,温度模块,小车的机械运动部分采用四轮差速转向式结构,前2个轮是驱动轮,分别由电机控制
[单片机]
基于<font color='red'>MSP430</font>智能小车的设计
02-JZ2440裸机学习之NAND FLASH
没有了地址线 多了控制引脚,同构控制引脚与数据线的结合 实现数据的操作,有命令时序,查手册,实现读写 1首先还要思考2440上电后会自动拷贝NAND 前4K到SRAM中执行。 2 nand与2440的接线: 3地址空间 (1) Nand flash只有数据总线 没有地址总线 (2) SDRAM DM9000 地址总线与2440地址总线相接 因此俩种设备寻址方式不一样 (1)片内内存 (2)SDRAM (3)网卡 (4)寄存器地址 等都有独立的地址,他们是由CPU统一编址,地址不会重复 Nand 的0地址与其他0地址不同 指自身的0地址。 4、NAND FLASH结构 查看
[单片机]
02-JZ2440裸机学习之NAND <font color='red'>FLASH</font>
基于MSP430F12x2的SPI数据存储器扩展分析
1 引 言 如今随着信息产业的飞速发展,以微处理器为核心的嵌入式系统正在智能化仪表、实时控制系统等方面发挥着巨大的作用。在许多实际应用中经常面临的问题是需要支持大容量的数据存储功能。 但是采用常规扩展外部数据存储器的方法,需要大量的地址总线和数据总线引脚,因而在访问外部数据存储器时,其容量受到微处理器地址总线和数据总线数量的极大限制。由于单片机的引脚数都相对较少,没有足够多的引脚用作外部数据存储器的地址总线,为了解决这一矛盾,本文以MSP430F12X2 单片机和AT45DB081 芯片为例,介绍了一种利用串行外设接口(SPI)扩展大容量数据存储器的方法。并给出初始化以及数据读写操作子程序 2 硬件简介 M
[单片机]
MSP430--ADC程序
1.ADC和P6是复用的。所以要设置P6.0为AD功能,要确保P6DIR=0X00,即为输入。 其次P6SEL |= 0X01;设置需要的A0端口PIN为AD功能。 2.ADC时钟问题,通过ADCSSEL选择进入的时钟源默认为ADC12OSC,经过分频之后才是ADC12CLK. 当SHP=1时,t_sample是由采样定时器来决定的,整个采样周期的长度是4n倍的ADC12CLK,n由SHT决定。 WDTCTL = WDTPW + WDTHOLD; // Stop WDT ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样保持的时间为8倍的ADC时钟,Set s
[单片机]
msp430f149通过蓝牙HC-05与手机通讯
前面一篇实现蓝牙HC-05、06与单片机的连接及与手机通信的总结中详细介绍了蓝牙与STC系列MCU的连接与配置,这次将msp430f149通过UART1与蓝牙HC-05连接,并实现与手机通信作简单总结。 通信效果:发送一段字码,蓝牙接收到后自动返回。 msp430f149是一款比较常用的16位单片机,拥有两个串口模块,UART0(RXD:P11,TXD:P22)和UART1(RXD:P37,TXD:P36)。通常UART0较为常用,可用作BSL下载,或用作串口(蓝牙)通信。最近试了下UART1,觉得将他用于蓝牙通信非常合适。 1、端口连接 端口连接依然是差分连接,如下图: 2、HC-05基本配置 这里不详细说明,
[单片机]
<font color='red'>msp430</font>f149通过蓝牙HC-05与手机通讯
兆易创新业界超小尺寸FO-USON8封装128Mb SPI NOR Flash面世!
更小、更薄、更轻!兆易创新业界超小尺寸3mm×3mm×0.4mm FO-USON8封装128Mb SPI NOR Flash面世! 中国北京(2023年5月16日) —— 业界领先的半导体器件供应商兆易创新GigaDevice(股票代码 603986)今日宣布,率先推出采用3mm×3mm×0.4mm FO-USON8封装的SPI NOR Flash——GD25LE128EXH ,其最大厚度仅为0.4mm,容量高达128Mb,是目前业界在此容量上能实现的最小塑封封装产品,可在应对大容量代码存储需求的同时,提供极大限度的紧凑型设计自由。 近年来,随着物联网、可穿戴、健康监护、网通等应用的快速发展,市场需求变化多样,不仅要
[嵌入式]
兆易创新业界超小尺寸FO-USON8封装128Mb SPI NOR <font color='red'>Flash</font>面世!
【STM32F4】读取芯片ID和芯片Flash Size
首先声明,手册上给出的FlashSize地址是错误的,正确的应该是0x1FFF7A20,取高16位。确切说应该是(0x1FFF7A23,0x1FFF7A22两个字节), 芯片的这96位ID是产品唯一身份标识。可以从特定的寄存器中读出来。FlashSize表示内部flash的大小,也是固化在芯片内部的。 手册上讲的ChipID的基地址是0x1FFF7A10,ChipSize的基地址也是0x1FFF7A10。肯定是不对的 谷歌了半天才发现真正的ChipSize地址0x1FFF7A20。知道了地址,直接读取地址中的数据就OK了。操作相当简单 读取FlashSize uint16_t cpuGetFlashSize(void) { r
[单片机]
【STM32F4】读取芯片ID和芯片<font color='red'>Flash</font> Size
MSP430和CC1100构成的无线传感器网络
无线传感器网络是由大量微型传感器节点通过无线自组织方式构成的网络。它集成了传感器、微机电和无线通信三大技术,能够实时地感知、采集和处理网络覆盖范围内的对象信息,并发送给观察者;具有覆盖区域广、可远程监控、监测精度高、布网快速和成本低等优点,在军事、环保、医疗保健、空间探索、工业监控、精细农业等领域均有非常良好的应用前景。 1 无线传感器网络结构 如图1所示,无线传感器网络系统通常包括若干传感器终端节点、一个Sink节点和一套后台监控软件。其中,传感器终端节点具有本地数据采集传输和转发邻节点数据的双重功能,可以在后台管理软件和Sink节点的控制下采集数据,并将数据经过多跳路由传输到Sink节点;Sink汇聚节点是网络的中心,具
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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