MSP430系列单片机资料-7册-46.3M-pdf.zip
源代码在线查看: flash.c
/****************************************************************************\
文件名:flash.c
编写者:czhang
描述:用于MSP430F149。
FLASH存储器读写、擦除。时钟源:MCLK 8MHz
版本:1.0 2005-2-19
\****************************************************************************/
#include
#include "flash.h"
/***************************************************************************
段擦除
adr:要擦除的段内的任一地址
***************************************************************************/
void FlashErase(unsigned int adr) @ "MYSET"
{
unsigned char *p0;
FCTL2=FWKEY+FSSEL_1+FN3+FN4;
FCTL3=FWKEY;
while(FlashBusy()==1) //等待FLASH存储器完成操作
;
FCTL1=FWKEY+ERASE;
p0=(unsigned char *)adr;
*p0=0; //向段内地址任意写,启动擦除操作
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
while(FlashBusy()==1) //等待FLASH存储器完成操作
;
}
/**************************************************************************
测试FLASH是否忙
返回值:1:忙 0:不忙
**************************************************************************/
unsigned char FlashBusy() @ "MYSET"
{
if((FCTL3&BUSY)==BUSY)
return 1;
else
return 0;
}
/**************************************************************************
字编程
Adr:要编程的地址,注意:不是指针类型,应当是偶地址
DataW:要编程的字
**************************************************************************/
void FlashWW(unsigned int Adr,unsigned int DataW) @ "MYSET"
{
FCTL1=FWKEY+WRT;
FCTL2=FWKEY+FSSEL_1+FN3+FN4;
FCTL3=FWKEY;
while(FlashBusy()==1) //等待FLASH存储器完成操作
;
*((unsigned int *)Adr)=DataW;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
while(FlashBusy()==1) //等待FLASH存储器完成操作
;
}
/**************************************************************************
字节编程
Adr:指向要编程的地址,注意:不是指针类型
DataB:要编程的字节
**************************************************************************/
void FlashWB(unsigned int Adr,unsigned char DataB) @ "MYSET"
{
FCTL1=FWKEY+WRT;
FCTL2=FWKEY+FSSEL_1+FN3+FN4;
FCTL3=FWKEY;
while(FlashBusy()==1) //等待FLASH存储器完成操作
;
*((unsigned char *)Adr)=DataB;
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
while(FlashBusy()==1) //等待FLASH存储器完成操作
;
}