微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 写MSP430片内flash

写MSP430片内flash

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

0x15000+0x200->

OSTCBCur->

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

}
// 写入地址 *pc_byte 写入数据:*pc_byte

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

同时在编程中注意灵活使用数组和指针,以及指向数组的指针等,可以达到灵活编程的目的,不过本文中给出的几个程序段,基本上能够实现对Msp430 Flash的擦除、写入等操作。这是我最近3天所作的一些努力,整理一下与大家分享。

本文参考了TI的《MSP430x1xx Family Users Guide》及TI网上提供的关于Flash操作的实例代码,并在网络上收集了一些资料,在此不一一列出,不过本文应该算本人原创,转载请注明。谢谢

MSP430X14X Flash 读写操作总结

开发平台:IAR Embedded Workbench、MSP430F149开发板

作者:谭贝贝

Flash操作注意事项

在读写的过程中电压不能小于2.7V否则擦除和读写的结果将不可预测。Flash的可操作时钟频率为~257KHZ---~476KHZ。如果频率不符合要求,则结果不可预测。

在擦除先需要关闭中断和看门狗,在擦除的过程中如果产生了中断,则会在重新使能中断后产生一个中断请求。Flash只能从1写为0,不能从从0写为1,所以需要擦除。

可以被擦除的最小模块是片段,tAll Erase = tMass Erase = 5297/fFTG, tSeg Erase = 4819/fFTG。

Flash ERASE

MSP430X14X的擦除模式可以从Flash或者RAM中进行。

从Flash中擦除

从Flash中擦除的过程中所有的定时都会被Flash控制,CPU被挂起。擦除完成后需要一个假写入CPU才能复位。从Flash擦除时有可能把后面CPU需要执行的代码擦除。如果发生这样的情况,在擦除后CPU的执行状况将不可预测。

Flash中擦除流程图

图片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html

从RAM中擦除

从RAM中擦除时CPU不会被挂起,可以继续执行代码。必须检测BUSY位以判断擦除是否结束,如果在擦除的过程中(即BUSY=1时)访问Flash,这是一个违规的访问,ACCVIFG会置位,而擦除的结果也将不可预测。

RAM中擦除流程图

图片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b.html

Flash Write

MSP430X14X有两种写入模式,分为段写入(byte/word write),和块写入(Block Write),块写入要快得多,但是操作麻烦,在擦除的过程中不能有一个Flash word(low + high byte),则会发生损坏。CPU不能在BUSY=1时访问Flash,否则ACCFIG将置位写入将不可预测。

1.Byte/Word write

Byte/Word 写入可以从Flash或者RAM初始化,当从Flash中初始化时,所有的定时都会被Flash控制,CPU被挂起。写完后CPU将继续执行后面的代码。

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

网站地图

Top