写MSP430片内flash
void FlashWW(unsigned int Adr,unsigned int DataW)
{
}
// 写入地址 *pc_byte
void FlashWrite(uchar *pc_byte,uchar *Datain,uint count)
{
}
注意:在对字写入和字节写入的时候,用于指向信息区数据指针类型的区别,字写入时候为*((unsigned int *)Adr),字节写入时候为*((unsigned char *)Adr)。
4.3 读取
根据查看的书籍资料和网络资料得出,内部Flash的读取操作没有顺序的要求,一般Flash默认的操作方式即为读模式。读取Flash的程序代码如下:
void FlashRead(uchar *pc_byte,uchar *Dataout,uint count)
{
}
在网上查找资料的时候,好像看到过有位网友的博客说,内部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操作注意事项
在擦除先需要关闭中断和看门狗,在擦除的过程中如果产生了中断,则会在重新使能中断后产生一个中断请求。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将继续执行后面的代码。
当从RAM中初始化时,BUSY必须在CPU访问Flash前置0.否则ACCFIG将被置位,写入的结果将不可预测。
在Byte/Word 写模式下写入总时间不能超过4ms,如果超过了,当再想这块任何地址写入数据时必须先擦除。
Byte/Word 写入流程图
从RAM中执行Byte/Word 写入
块写入
块写入时没一小块不能超过t_cpt=4ms,块写入只能从RAM中进行,在块写入的过程中WAIT位要置0,当想Flash中写入数据时,需要先检查WAIT位是否为1.当前块写完后BLKWRT要清0.
流程图
图片地址:http://wenku.baidu.com/view/b82c0b1a52d380eb62946d4b .html
在擦除或者写入的过程中访问Flash,见下表
Flash的寄存器
FCTL1,选择擦除和写入模式的寄存器
FRKEY/FWKEY 高八位为密码读的密码为96h,写的密码为A5h。
BLKWRT
WRT
MERASE和ERASE,擦除模式选择位
FCTL2时钟选择寄存器
FWKEYx密码位
FSSELx时钟选择位
FNx分频比 分频值等于FN+1
两个例子
#include #include "BoardConfig.h" void Write_A(uchar value); void Copy_A2B(void); void main( void ) { } void Write_A(uchar value) { } //Copy data from B to A void Copy_A2B(void) { }
评论