📄 flash.c
字号:
/******************************************************************************
** 版权: 利尔达科技有限公司
** 文件名: main.c
** 版本: 1.0
** 工作环境: IAR 3.42
** 作者: lw
** 生成日期: 2008.04.17
** 程序功能:FLASH存储器读、写、擦除以及fLash块写操作
** 相关说明: 1。进行块写操作时,块写程序必须放在RAM里面的,否则将会出现错误
2。该程序数据保存在RAM中,在掉电情况下会丢失数据,
******************************************************************************/
#include <MSP430x44x.h>
void Flash_write()@"flash_data"; //块写入子程序
unsigned char Flash_Busy(); //判断FLASH是否为忙
unsigned char *FLASH_ptr; //FLASH指针
unsigned char value =0; //信息段的8位数值
unsigned char byte_num = 64; //写入信息段为64字节数
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
FCTL2 = FWKEY + FSSEL0 + FN0; //FLASH时钟为 MCLK/2,选择2分频
FLASH_ptr = (char*)0x1080; //初始化FLAH指针地址,强制转换成字符型
while(Flash_Busy()==1); //Busy判断是否忙
FCTL1 = FWKEY + ERASE; //允许擦除
FCTL3 = FWKEY; //解锁
*FLASH_ptr = 0; //空写,启动擦除
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK; //锁定
while(1)
{
Flash_write(value++); //块写入
}
}
/**************************************************************************
块写入子程序
**************************************************************************/
void Flash_write()@"flash_data"
{
char i;
FCTL3 = FWKEY; //解锁
while(Flash_Busy()==1); //判断是否忙
FCTL1 = FWKEY+WRT+BLKWRT; //设置块写入 WRT=1,BLKWRT=1
for(i=0; i<byte_num; i++) //循环
{
*FLASH_ptr++=value; //赋值
while((FCTL3&WAIT)==0); //等待 WAIT = 1
}
//FCTL1&=~BLKWRT; 这句错误!
FCTL1 = FWKEY +WRT; //BLKWRT复位
while(Flash_Busy()==1); //判断是否忙
FCTL1 = FWKEY; //WRT复位
FCTL3 = FWKEY + LOCK; //锁定
}
/**************************************************************************
判断FLASH是否忙
返回值:1:忙 0:不忙
**************************************************************************/
unsigned char Flash_Busy()
{
if((FCTL3&BUSY)==BUSY) //判断是否忙
return 1;
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -