对于MSP430单片机,MSP430F149有2段的信息存储器(A和B,每段为128字节),而249则为4段的信息存储器(A、B、C、D,每段64字节),信息flash地址为0x1000~0x10FF,对其操作的程序如下:
void erase(unsigned int addr) //段擦除子程序
{
char * seg_ptr;
seg_ptr=(char *)addr; // 指向段地址
FCTL3=FWKEY; // 复位LOCK
FCTL1=FWKEY+ERASE; // 段擦除使能
*seg_ptr=0; // 空写启动
FCTL3=FWKEY+LOCK; // 置位LOCK
}
void write_A(unsigned char number,unsigned char value)
{
unsigned char *Flash_ptr; // Flash 指针
Flash_ptr = (unsigned char *) ASEG_START; // 指向段地址
FCTL3 = FWKEY; // 复位LOCK
FCTL1 = FWKEY + WRT; // 写使能,编程
Flash_ptr = Flash_ptr + number;
*Flash_ptr = value; // 把value写入FLASH
FCTL1 = FWKEY; // 清写使能 ???
FCTL3 = FWKEY + LOCK; // 置位LOCK
}
unsigned char read_A(unsigned char number)
{
unsigned char *Flash_ptr; // A段指针
unsigned char i;
Flash_ptr = (unsigned char *) ASEG_START; // 初始化A段指针
FCTL3 = FWKEY; // 复位LOCK
FCTL1 = FWKEY + WRT; // 写使能
Flash_ptr = Flash_ptr + number;
i = *Flash_ptr; //
FCTL1 = FWKEY; // 清写使能
FCTL3 = FWKEY + LOCK; // 置位LOCK
return i;
}
void write_B(unsigned char number,unsigned char value)
{
unsigned char *Flash_ptr; // Flash 指针
Flash_ptr = (unsigned char *) BSEG_START; // 指向段地址
FCTL3 = FWKEY; // 复位LOCK
FCTL1 = FWKEY + WRT; // 写使能
Flash_ptr = Flash_ptr + number;
*Flash_ptr = value; // 把value写入FLASH
FCTL1 = FWKEY; // 清写使能
FCTL3 = FWKEY + LOCK; // 置位LOCK
}
unsigned char read_B(unsigned char number)
{
unsigned char *Flash_ptr; // A段指针
unsigned char i;
Flash_ptr = (unsigned char *) BSEG_START; // 初始化A段指针
FCTL3 = FWKEY; // 复位LOCK
FCTL1 = FWKEY + WRT; // 写使能
Flash_ptr = Flash_ptr + number;
i = *Flash_ptr; // 把A段的值复制到B段
FCTL1 = FWKEY; // 清写使能
FCTL3 = FWKEY + LOCK; // 置位LOCK
return i;
}
在信息存储区的数据读写操作,均可调用上述函数完成,各位大虾看后又补充的以及MSP430其他类型的单片机的信息flash 的资料,请补充,谢谢! |