#include<msp430x14x.h>
#include<in430.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar value , x , Flash_add , xs , s_add , xd , d_add;
uchar DataBuffer;
/***********************************************************
函数名称:Flash_Write_SegX
功 能:在flash信息存储段X(0-A,1-B)中的Flash_add(0-127)地址
写入value值,按字节一次写
入口参数:(uchar value , uchar x , uchar Flash_add)
value ->待写入值(0-255)
x ->写入段名(0->A 1->B)
Flash_add ->写入地址(0-127)
出口参数:void
说 明:
***********************************************************/
void Flash_Write_SegX(uchar value , uchar x , uchar Flash_add)
{
uchar *Flash_ptr;//flash的地址
if(x==0)
{
Flash_ptr = (uchar *)(0x1080+Flash_add);//A段首地址
}
else
Flash_ptr = (uchar *)(0x1000+Flash_add);//B段首地址
FCTL1 = FWKEY + ERASE;//擦出方式01 只擦出一段
//擦出使能//独立段
//密码
FCTL3 = FWKEY;//覆盖 清除lock位
*Flash_ptr = 0;//假写入,只是启动擦出程序 让cpu停止
FCTL1 = FWKEY + WRT;//单字节写模式
*Flash_ptr = value;//将A段内全部写value
FCTL1 = FWKEY;//恢复保护 清除WRT位 不能再写
FCTL3 = FWKEY + LOCK;
}
/***********************************************************
函数名称:Flash_copy_s2d
功 能:将源信息段xs的s_add内容写入xd的d_add中
入口参数:(uchar xs , uchar s_add , uchar xd , uchar d_add)
xs->源段代号(0->A 1->B)
s_add->源地址(0-127)
xd->目的段代号(0->A 1->B)
d_add->目的段地址(0-127)
出口参数:void
说 明:利用指针来进行读写操作
***********************************************************/
void Flash_copy_s2d (uchar xs , uchar s_add , uchar xd , uchar d_add)
{
uchar *Flash_ptrs;
uchar *Flash_ptrd;
if(xs==0)
{
Flash_ptrs = (uchar *)( 0x1080 + s_add);
Flash_ptrd = (uchar *)( 0x1000 + d_add);
}
else
{
Flash_ptrd = (uchar *)( 0x1080 + s_add);
Flash_ptrs = (uchar *)( 0x1000 + d_add);
}
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*Flash_ptrd = 0;
FCTL1 = FWKEY + WRT;//设置为写
DataBuffer = *Flash_ptrs;//
*Flash_ptrd = DataBuffer;//
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;//打开保护
}