微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Msp430Flash型单片机内部Flash存储器介绍

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

时间:11-26 来源:互联网 点击:

//将数据字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);

}

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的程序代码如下:

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个控制字中的相应位来完成的,只有控制位的正确组合,才能实现相应的功能。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top