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

📄 flash.c

📁 参考设计:为USB430和斜度计两个实例的源程序和编译后的文件 “实验程序”子文件夹内容:为本光盘所配书的实验的源程序和编译后的文件。其中C源程序文件可以用记事本程序打开
💻 C
字号:
/**************************************************************
*  文件名:
*         flash.c  
*  文件说明:
*      对MSP430自带Flash进行操作
***************************************************************/

#define FLASH_C 0

#ifndef MSP430F449_H
#include <msp430x44x.h>
#endif 

/**************************************************************
*  初始化 Flash
**************************************************************/
void init_Flash(void)
{
    FCTL2 = FWKEY + FSSEL0 + FN0;               // 设置时钟频率为ACLK 
}
/**************************************************************
*   读Flash
*    输入参数说明:   
*           addr:     读地址
*           length:   要读取的字节数
*           readBuf:  用以存储读取内容的缓存区地址
***************************************************************/ 
void read_Flash(char* addr,char * rbuf,int len)
{
    unsigned int cnt;
    
    while((FCTL3 & 0x01) == 0x0001);            // 等待flash空闲
    for(cnt=0;cnt<len;cnt++)
    {
        *(rbuf+ cnt) = *(addr + cnt);           // 读数据
    }
    FCTL3  = FWKEY + LOCK;                      // Lock       
}
/**************************************************************
*
*  函数功能:写数据到Flash
*  输入参数:
*             addr:    地址
*             buf:     要写数据的首地址
*             len:     写入的字节数
***************************************************************/

void write_Flash(char*addr,char*buf,int len)
{
    unsigned int cnt;
    
    while((FCTL3 & 0x01) == 0x0001);            // 等待Flash空闲
    FCTL3  = FWKEY;                             // 清除“LOCK”标识
    FCTL1  = FWKEY + WRT;                       // 准备写                      
    for(cnt=0;cnt<len;cnt++)
    {
        *(addr+cnt) = *(buf + cnt);             // 写数据
    }
    FCTL3  = FWKEY + LOCK;                      // Lock         
      
}
/**************************************************************
*
*   Erase Flash
*   intput:
*          add: address that sepecify a Segment
*
**************************************************************/
void erase_Flash(char* add)
{
    while((FCTL3 & 0x01) == 0x0001);            // 等待空闲
    FCTL3  = FWKEY;                             // 清除 "Lock" 
    FCTL1  = FWKEY + ERASE;                     // 准备擦除              
    *add   = 2;                                 // 擦除,写任意数均可
    FCTL3  = FWKEY + LOCK;                      // 置“LOCK”           
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -