⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.c

📁 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 + -