您的位置 首页 电子

MSP430F149的存储器结构及FLASH读写

1概述11FLASH特点写操作只能将1改写为0,不能将0改写成1。FLASH擦除后所有单元变为1,擦除操作只能针对整个段。FLASH在擦除前不能被

1 概述

1.1 FLASH特色

写操作只能将1改写为0,不能将0改写成1。FLASH擦除后一切单元变为1,擦除操作只能针对整个段。FLASH在擦除前不能被改写。

1.2 MSP430F149存储器编址办法

MSP430F149的ROM为60K+256B的FLASH,RAM为2K。MSP430存储器选用冯诺依曼结构,RAM和ROM合在一起编址。MSP430F149内部集成有FLASH控制器,能够简化对FLASH的操作。

64K的寻址空间分为RAM、FLASH。

RAM分两块:

1、寄存器(0000H-01FFH),寄存特别寄存器、设备寄存器、变量与仓库。

2、数据RAM(01FFH-),寄存各种变量、中心成果、仓库。

FLASH分两块:

1、主FLASH 一般用于寄存程序代码。

2、信息FLASH(InfoFlash)用作掉电后保存少数数据。分为InfoA(0X1080-0X10FF)和InfoB(0X1000-0X1080),每段各128B。

1.3 操作

三种操作:读取、擦除(只能针对段擦除)、写入(能够写入单个字节)。

2使用办法

2.1 程序架构

读取FLASH办法和读取RAM办法相同。写和擦除FLASH要进行如下装备:

装备寄存器

拟定指针地址

写数据/仿制数据

装备寄存器

2.2 参数装备

首要装备三个寄存器FCTL1,FCTL2,FCTL3。

1、装备FLASH控制器时钟。时钟要求控制在250-470Khz之间。

FCTL2 = FWKEY + FSSEL0 + FN0; //2分频

2、用指针指向地址Unsigned char *ptr= (unsigned char *) 0x1080;

3、进入写形式或擦除形式FCTL1=FWKEY+WRT;或FCTL1=FWKEY+ERASE

4、铲除锁定位 FCTL3=FWKEY;

5、写数据 *ptr=0x30;或擦除*ptr=0;

6、退出写状况,康复锁存

FCTL1=FWKEY;

FCTL3=FWKEY+LOCK;

2.3 阐明

上电FLASH默许状况是读。为避免错误操作,FLASH的三个寄存器FCTLX都选用了暗码核对机制FWKEY。

上电时FLASH的InfoFLASH区域值均为1,可直接进行写操作,但尔后的写操作必须先擦除才干正确写入。

MSP430系列单片机FLASH擦写典型次数是10万次,最低确保1万次。产品设计初期要规划好FLASH的寿数,尽量不让某些需求频频改动的数据保存在FLASH中,这些数据可保存在RAM中,在断电前才存入FLASH中。

3相关寄存器

1、FCTL2

FWKEY Bits

15-8

FCTLx password. Always read as 096h. Must be written as 0A5h or a PUC

will be generated.

FSSELx Bits

7−6

Flash controller clock source select

00 ACLK

01 MCLK

10 SMCLK

11 SMCLK

FNx Bits

5-0

Flash controller clock divider. These six bits select the divider for the flash

controller clock. The divisor value is FNx + 1. For example, when FNx=00h,

the divisor is 1. When FNx=03Fh the divisor is 64.

FCTL2 = FWKEY + FSSEL0 + FN0;

2、FCTL1

FWKEY

Bits

15-8

FCTLx password. Always read as 096h. Must be written as 0A5h or a PUC

will be generated.

MERAS

ERASE

Bit 2

Bit 1

Mass erase and erase. These bits are used together to select the erase mode.

MERAS and ERASE are automatically reset when EMEX is set.

MERAS ERASE Erase Cycle

0 0 No erase

0 1 Erase individual segment only

1 0 Erase all main memory segments

1 1 Erase all main and information memory segments

WRT Bit 6 Write. This bit is used to select any write mode. WRT is automatically reset

when EMEX is set.

0 Write mode is off

1 Write mode is on

3、FCTL3

FWKEYx Bits

15-8

FCTLx password. Always read as 096h. Must be written as 0A5h or a PUC

will be generated.

LOCK Bit 4 Lock. This bit unlocks the flash memory for writing or erasing. The LOCK bit

can be set anytime during a byte/word write or erase operation and the

operation will complete normally. In the block write mode if the LOCK bit is set

while BLKWRT=WAIT=1, then BLKWRT and WAIT are reset and the mode

ends normally.

0 Unlocked

1 Locked

4 实例

4.1 上电后向InfoFLASH某单元写入一个字节数据

1、装备FLASH控制器时钟。时钟要求控制在250-470Khz之间。

FCTL2 = FWKEY + FSSEL0 + FN0; //2分频

2、用指针指向地址Unsigned char *ptr= (unsigned char *) 0x1080;

3、进入写形式FCTL1=FWKEY+WRT;

4、铲除锁定位 FCTL3=FWKEY;

5、写数据 *ptr=0x30;

6、退出写状况,康复锁存

留意FLASH操作期间不答应中止,所以写FLASH时要对大局中止答应进行操作。

代码如下:

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

FCTL2 = FWKEY + FSSEL0 + FN0; // MCLK/2 for Flash Timing Generator

unsigned char *ptr=(unsigned char *)0x1080;

FCTL1=FWKEY+WRT;

FCTL3=FWKEY;

_DINT();

*ptr=0x30;

while(FCTL3&BUSY);

_EINT();

FCTL1=FWKEY;

FCTL3=FWKEY+LOCK;

4.2 向FLASH的InfoA中接连写入128B数据

阐明:经过FCTL1将FLASH设为段擦除形式后,只要向某个段内任何存储单元写入0即可进行擦除操作。

void write_SegA (char value)

{

char *Flash_ptr; // Flash pointer

unsigned int i;

Flash_ptr = (char *) 0x1080; // Initialize Flash pointer

FCTL1 = FWKEY + ERASE; // Set Erase bit

FCTL3 = FWKEY; // Clear Lock bit

*Flash_ptr = 0; // Dummy write to erase Flash segment

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

for (i=0; i<128; i++)

{

*Flash_ptr++ = value; // Write value to flash

}

FCTL1 = FWKEY; // Clear WRT bit

FCTL3 = FWKEY + LOCK; // Set LOCK bit

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/257275.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部