关于Msp430 Flash型单片机内部Flash的操作

发布者:科技革新者最新更新时间:2020-05-06 来源: eefocus关键字:Msp430  Flash型  单片机  内部Flash 手机看文章 扫描二维码
随时随地手机看文章

1 Msp430Flash型单片机内部Flash存储器介绍

MSP430的Flash存储器是可位、字节、字寻址和编程的存储器。该模块由一个集成控制器来控制编程和擦除的操作。控制器包括三个寄存器,一个时序发生器及一个提供编程、擦除电压的电压发生器。


Msp430的Flash存储器的特点有:

1)产生内部编程电压

2)可位、字节、字编程,可以单个操作,也可以连续多个操作

3)超低功耗操作

4)支持段擦除和多段模块擦除


2 Flash存储器的分割

Msp430 Flash存储器分成多个段。可对其进行单个字节、字的写入,也可以进行连续多个字、字节的写入操作,但是最小的擦除单位是段。


Flash 存储器被分割成两部分:主存储器和信息存储器,两者在操作上没有什么区别。两部分的区别在于段的大小和物理地址的不同。


以Msp430F149为例,信息存储器有两个128字节的段,即segmentA和segmentB,主存储器有多个512字节的段。Msp430F149内部Flash的地址为0x1000H~0xFFFFH,计60K。信息段SegA的起始地址为0x1080H,信息段SegB的起始地址为0x1000H。


3 Flash存储器的操作

在默认状态下,处于读操作模式。在读操作模式中,Flash存储器不能被擦除和写入,时序发生器和电压发生被关闭,存储器操作指向ROM区。


Msp430 Flash存储器在系统编程ISP(in-system programmable)不需要额外的外部电压。CPU能够对Flash直接编程。Flash存储器的写入/擦除通过BLKWRT、WRT、MERAS、ERASE等位确定。


3.1 擦除

Flash存储器各位的缺省值为1,每一位都可以单独编程为0,但只有擦除操作才能将其恢复为1。擦除操作的最小单位是段。通过erase和meras位设置可选择3种擦除模式。

MERAS

ERASE

擦除模式

0

1

段擦除

1

0

多段擦除(所有主存储器的段)

1

1

整体擦除(LOCKA=0时,擦除所有主存储器和信息存储器的段;主存储器的段只有当LOCKA=0时可以擦除)

擦除操作开始于对擦除的地址范围内的任意位置执行一次空写入。空写入的目的是启动时序发生器和擦除操作。在空写入操作之后,BUSY位自动置位,并保持到擦除周期结束。BUSY、MERAS、ERASE在擦除周期结束后自动复位。


3.2 写入

写入模式由WRT和BLKWRT位进行设置。

BLKWRT(块写入模式选择)

WRT(写模式选择位)

写入模式

0

1

单字节、单字写入

1

1

块写入

所有的写入模式使用一系列特有的写入命令,采用块写入的速度大约是单个写入的2倍,因为电压发生器在块写入完成器件均能保持。对于这两种写入模式,任何能修改目的操作数的指令均能用于修改地址。一个Flash字不能再擦除器件进行两次以上的写入。


当启动写入操作时,BUSY置位,写入结束时复位。


4 操作编程

4.1 Flash擦除

对Flash要写入数据,必须先擦除相应的段,且对Flash存储器的擦除必须是整段进行的,可以一段一段擦,也可以多段一起擦除。擦除操作的顺序如下:

1)选择适当的时钟源和分频因子;

2)清除LOCK位

3)判断BUSY位,只有当BUSY=0时才可以执行下一步

4)使能段操作,设置ERASE、MERAS位等(如果是擦除一段,则ERASE=1,如果擦除多段,则MERAS=1,如果擦除整个Flash,则ERASE=1,MERAS=1)

5)对擦除的地址范围内的任意位置作一次空写入,以启动擦除操作

6)在擦除周期内,时钟源始终有效,不修改分频因子

7)操作完成后,置位LOCK


根据上述操作顺序,编写程序代码如下:

void FlashErase(unsigned int adr)

{

  uchar *p0;

  FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//选择时钟源,分频

  FCTL3 = FWKEY;//清除LOCK

  while(FCTL3 & BUSY);//如果出于忙,则等待

  FCTL1 = FWKEY + ERASE;//使能段操作

  p0 = (unsigned char *)adr;//数值强制转换成指针

  *p0 = 0;            //向段内任意地址写0,即空写入,启动擦除操作

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 & BUSY);

}


4.2 写入

对Flash的写入数据可以是单字、单字节,也可以是连续多个字或字节(即块操作)。编程写入操作的顺序如下:

1)选择适当的时钟源和分频因子;

2)清除LOCK位

3)判断BUSY位,只有当BUSY=0时才可以执行下一步操作

4)使能写入功能,设置WRT、BLKWRT(如果写入单字或单字节则WRT=1,如果是块写入,或者是多字、多字节连续写入则WRT=1,BLKWRT=1);

5)判断BUSY位,只有当BUSY=0时才可以执行下一步操作

6)写入数据

7)判忙,完了之后清除WRT,置位LOCK


根据上述操作顺序,编写程序代码如下:

//write single byte

//Adr 为要编程的地址,没有奇偶地址要求、DataB为要编程的字节数据

void FlashWB(unsigned char Adr,unsigned char DataB)

{

  FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK  16*FN4 + 8*FN3

  FCTL3 = FWKEY;

  FCTL1 = FWKEY + WRT; 

  while(FCTL3 & BUSY);

  *((unsigned int *)Adr)=DataB;//数值强制转换成指针,指向地址数据Adr所表示的内存单元

                               //将数据字DataW赋值给内存单元

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 & BUSY); 

}

//write single word

//Adr 为要编程的地址,应该是偶地址、DataW为要编程的字数据

void FlashWW(unsigned int Adr,unsigned int DataW)

{

  FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK  16*FN4 + 8*FN3

  FCTL3 = FWKEY;

  FCTL1 = FWKEY + WRT; 

  while(FCTL3 & BUSY);

  *((unsigned int *)Adr)=DataW;//数值强制转换成指针,指向地址数据Adr所表示的内存单元

                               //将数据字DataW赋值给内存单元

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 & BUSY);

}

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

//向FLASH信息区写入指定数量的字节数据

//unsigned char *pc_byte 信息区数据指针

//unsigned char *Datain :读出数据存放数据数组,8位长

//unsigned char count :读操的数量,范围0-127

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

void FlashWrite(uchar *pc_byte,uchar *Datain,uint count)

{

  FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK  16*FN4 + 8*FN3

  FCTL3 = FWKEY;

  FCTL1 = FWKEY + WRT; 

  while(FCTL3 & BUSY);                //如果处于忙状态,则等待

 

  while(count--)

  {

    while(FCTL3 & BUSY);

    *pc_byte++ = *Datain++;

  }

 

  FCTL1 = FWKEY;

  FCTL3 = FWKEY + LOCK;

  while(FCTL3 & BUSY); 

}


注意:在对字写入和字节写入的时候,用于指向信息区数据指针类型的区别,字写入时候为*((unsigned int *)Adr),字节写入时候为*((unsigned char *)Adr)。


4.3 读取

根据查看的书籍资料和网络资料得出,内部Flash的读取操作没有顺序的要求,一般Flash默认的操作方式即为读模式。读取Flash的程序代码如下:

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

//向FLASH信息区读出指定数量的字节数据

//unsigned char *pc_byte 信息区数据指针

//unsigned char *Dataout :读出数据存放数据数组,8位长

//unsigned char count :读操的数量,范围0-127

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

void FlashRead(uchar *pc_byte,uchar *Dataout,uint count)

{

  while(count--)

  {

    *Dataout = *pc_byte;

    Dataout++;

    pc_byte++;

  }

}


在网上查找资料的时候,好像看到过有位网友的博客说,内部Flash的地址是自动加1的,按照他的理解,函数中pc_byte++语句就没有用处了,可是事实不然,我在调试过程中,发现并不能自动加1,pc_byte++语句还是有必要的。调用上述函数,可以通过这样的方式FlashRead((uchar *)0x1000,a,4);即从0x1080地址处开始,连续读取4个字节的数据,送给数组a。


5 小结

对Msp430 片内Flash的操作是通过对3个控制字中的相应位来完成的,只有控制位的正确组合,才能实现相应的功能。


同时在编程中注意灵活使用数组和指针,以及指向数组的指针等,可以达到灵活编程的目的,不过本文中给出的几个程序段,基本上能够实现对Msp430 Flash的擦除、写入等操作。

关键字:Msp430  Flash型  单片机  内部Flash 引用地址:关于Msp430 Flash型单片机内部Flash的操作

上一篇:MSP430的JTAG接口和BSW接口
下一篇:MSP430 FLASH读写

推荐阅读最新更新时间:2024-11-04 13:35

基于MSP430心肺听诊技能训练系统的设计
摘要:基于MSP430心肺听诊技能训练系统针对现代医学模拟教学的发展,改变过去用射频和特制听诊器来模仿心肺听诊过程,在操作上更逼真临床真实环境。以低功耗的MSP430为核心,并在模型人上安装27个专用设备来模拟人体的共118种心肺听诊的疾病声音。另外还可以用遥控器设置模型人的疾病类型,通过听诊器来识别模型人位置点发出的声音来辨别疾病。再现临床医学的工作场景,为学习者提供一个无风险的学习临床知识和技能的条件与环境。此外还添加了上位机教学系统,上住机根据收到的位置信号来控制上位机软件界面的显示,可以显示听诊的位置、声音特点、与呼吸的关系以及声音的波形信息,还可以外接扬声器放大播放所听到的心肺声音,达到医学教学的目的。 关键词:MS
[工业控制]
基于<font color='red'>MSP430</font>心肺听诊技能训练系统的设计
基于ATmgea8单片机设计的加热控制系统
1 引言 温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。文中介绍的文化测量及加热控制系统以 ATmega8型AVR系列单片机为核心部件,通过对系统软件和硬件设计的合理规划,发挥单片机自身集成众多系统级功能单元的优势,在不减少功能的前提下有效降低了硬件成本,系统操控简便。实验证明该温控系统具有很高的可靠性和稳定性。 2 系统结构及控制算法 2.1系统总体结构 温度测量及加热系统控制的总体结构如图1所示。系统主要包括现场温度采集、实时温度显示、加热控制参数设置、加热电路控制输出、与上位机串行通信和系统核心ATmega8型单片机等。 温度采集电路以模拟电压形式将现
[单片机]
基于ATmgea8<font color='red'>单片机</font>设计的加热控制系统
单片机键盘扫描程序(汇编)
;这个相对起来比较难,如果理解不了的话,可以(返回日志目录,或者是本日志的右上角,你也可以看到)看上篇(课程设计:矩阵键盘,相对来说,非常简单了) ;键盘扫描程序;此程序比较复杂,不过如果你坚持的理解下去的话,还是能够理解的,比较经典 ;最终是按键的值输出到数码管中(接在P2口) ORG 0000H START: MOV R0,#00H ;初始化程序,开始的延时是为了使硬件能够准备好 DJNZ R0,$ LOOP: MOV SP,#60H CALL KEY DISPLAY: MOV A,R4 MOV DPTR,#TABLE ;定义字形表的起始地址
[单片机]
51单片机独立键盘原理
我这按键是机械弹性按键,所以具有弹性,按键在按下和松开的瞬间均伴随有一连串的抖动,键抖动会引起一次按键被误读多次,然后为了保证cpu对键的一次闭合仅作一次处理,所以我们必须去除抖动。去除抖动有2种,硬件消抖和软件消抖。 其中一软件消抖最方便。所以我就以软件消抖为例。 独立按键的原理图和led的原理图如上,8个led的阳极都接了vcc(vcc认为是电源正极,gnd认为是电源负极),所以只需要led的阴极接的p2i(i取值0到7)口输入低电平(即0v)对应的led就可以发亮了. 接下来看看独立按键的原理图,首先K1是和rxd管脚相连的,然后rxd管脚又是和P3^1口连接的,所以可以P3^1口是和k1开关连接的,可以
[单片机]
51<font color='red'>单片机</font>独立键盘原理
基于MCU的温控器产品创新设计研究
随着全球经济一体化,各国产品竞争越来越激烈,谁掌握了市场主动权,谁就能够立于不败之地,这就要求相关企业对市场需求快速响应进行产品创新。   产品创新基于潜在的市场需求,表现在设计阶段对已有产品所涉及的功能、原理、总体布局、具体结构等方面的创新,只有很少的设计是全新设计。因此可以说,产品设计的核心是创新,设计的过程就是一个创新的过程。而产品设计的目的是使用,只有更方便于人们使用的产品才能产生利润,并在一定领域造福于人类。   基于人们对小家电越来越广泛的需求以及国内外激烈的市场竞争 ,本文对小家电中的重要零部件温控器进行了创新设计,并成功地用于电热水壶中,满足了市场对电热水壶多样化的需求。 1 电热水壶及温控器市场现状   在全球电
[单片机]
基于<font color='red'>MCU</font>的温控器产品创新设计研究
基于单片机与SPWM控制应急电源逆变电路设计
  逆变器是应急电源的重要组成部分。为了实现应急电源中逆变器输出交流电压的适时调节,减小输出电压谐波达到逆变电路数字化控制目的,三相逆变电路采用了正弦脉宽调制( SPWM )控制方法,以C8051F020 单片机 和 SA4828 为核心,完成对 SPWM 波的产生及系统的控制。利用 单片机 特有的端口连接完成外围控制功能,这样就减少了应急电源对波形产生的处理时间,保证波形具有较高精度,而且电路硬件连接简单。   引言   随着社会发展,越是信息化、现代化,就越依赖于电力,突然断电会给人们正常的生活秩序和学习带来影响,尤其对于生产、生活中特别重要的负荷,一旦中断供电,将会造成重大的经济损失。应急电源产品已成
[电源管理]
基于<font color='red'>单片机</font>与SPWM控制应急电源逆变电路设计
瑞萨退出8位元MCU 凌通喜迎转单商机
日本半导体大厂瑞萨电子(Renesas)持续聚焦高阶MCU市场,业界传出,瑞萨近来已对下游客户发出通知,将全面退出应用于遥控器的8位元MCU产品,预计不久之后即停止出货,国内MCU业者中以凌通(4952)受惠转单效应最高,盛群(6202)也将考虑重新卡位,不放过此机会。 继南韩三星电子退出8位元MCU(MicrocontrollerUnit,微控制器)市场后,全球MCU龙头厂瑞萨因持续进行业务整顿,聚焦获利事业,决定退出应用于遥控器的8位元MCU产品,瑞萨在该领域市占率超过50%,几乎处独霸地位,靠着IDM(IntegratedDeviceManufacturer,整合元件制造厂)营运模式,打出低价策略,击退不少台系厂商
[单片机]
基于SPCE061A单片机的髋作用力测试仪设计
  摘要:介绍了基于SPCE061A单片机的髋作用力测试仪的系统结构及部分软件编写流程,着重分析了测试仪的测力方法以及使用光电编码器进行测速和鉴相的原理。测试仪以SPCE061A单片机为控制核心,配有串行通信口,具备上位机实时监控、数据保存和复现、测试数据离线分析等功能。实验证明,该测试仪具有测量准确、稳定性高及操控界面友好等优点。 1 引言   随着体育训练科学化水平的不断提高,人体专项力量训练的必要性日益受到重视。通过对大量实际运动测试数据的总体分析发现,所有从事跑、跳运动项目和以跑、跳为基础运动项目的运动员,其向后蹬伸力量均明显小于向下或向前蹬伸力量。而向后蹬伸力量恰恰是跑、跳运动产生动力所必需的专项力量。因此,设计开发
[医疗电子]
基于SPCE061A<font color='red'>单片机</font>的髋作用力测试仪设计
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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