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

📄 flash.c

📁 msp430x44x系列单片机写程序FLASH
💻 C
字号:
#include  <msp430x44x.h>

#include "../main/parameter.h"

#include "msp430x44x_hard.h"
#include "flash.h"


/****************************************************************************************************************
 Function: unsigned char FlashBusy()
 Description: 测试flash是否忙 1:忙   0:不忙
 Calls:
 Calls By:
 Table Accessed:
 Table Updated:
 Input:
 Output:
 Return:
 Others:    
****************************************************************************************************************/
unsigned char FlashBusy()
{
   if((FCTL3 & BUSY) == BUSY)
      return 1;
   else
      return 0;
}


/****************************************************************************************************************
 Function: void FlashInit(void)
 Description: 设置adc12通道,及通道参考电压,触发中断等
 Calls:
 Calls By:
 Table Accessed:
 Table Updated:
 Input:
 Output:
 Return:
 Others:    
****************************************************************************************************************/
void FlashInit(void)
{
   //DCOCTL = DCO0 + DCO0;
   //BCSCTL1 = DCO_470KHZ + ACLK_DIV_1 + XT2OFF;
   //BCSCTL2 = DCO_ON + SMCLK_DIV_1 + SMCLK_DCOCLK + MCLK_DIV_1 + MCLK_DCOCLK;
    
   FCTL2 = FWKEY + FSSEL_1 + (FREQ/400000 - 1);        // FN3 + FN4;       //mclk  
   FCTL3 = FWKEY;
   while(FlashBusy() == 1);                            // 等待FLASH存储器完成操作
}  


/****************************************************************************************************************
 Function: void FlashErase(unsigned int flashAdr)
 Description: 设置adc12通道,及通道参考电压,触发中断等
 Calls:
 Calls By:
 Table Accessed:
 Table Updated:
 Input:
 Output:
 Return:
 Others:    
****************************************************************************************************************/
void FlashErase(unsigned int flashAdr)
{
   unsigned char *pointer;
   
   if (flashAdr > 0xfdff) return;
   if (flashAdr < CALI_DATA_ADDR)return;   
   clear_WDT();
        
   FCTL3 = FWKEY;
   FCTL1 = FWKEY + ERASE;
   pointer = (unsigned char *)flashAdr;
   *pointer = 0;			               // 向段内地址任意写,启动擦除操作
   FCTL1 = FWKEY;
   FCTL3 = FWKEY+LOCK;
   while(FlashBusy() == 1);                            // 等待FLASH存储器完成操作
}


/****************************************************************************************************************
 Function: void FlashWW(unsigned int Adr,unsigned int DataW)
 Description: 字编程
 Calls:
 Calls By:
 Table Accessed:
 Table Updated:
 Input:   Adr:要编程的地址,注意:不是指针类型,应当是偶地址
          DataW:要编程的字   
 Output:
 Return:
 Others:    
****************************************************************************************************************/
void FlashWW(unsigned int Adr, unsigned int DataW)
{
   FCTL1=FWKEY+WRT;
   FCTL3 = FWKEY;
   *((unsigned int *)Adr) = DataW;
   FCTL1 = FWKEY;
   FCTL3 = FWKEY+LOCK;
   while(FlashBusy() == 1);	                       // 等待FLASH存储器完成操作
}


/****************************************************************************************************************
 Function: void FlashWB(unsigned int Adr,unsigned char DataB)
 Description: 字节编程
 Calls:
 Calls By:
 Table Accessed:
 Table Updated:
 Input:   Adr:指向要编程的地址,注意:不是指针类型
          DataB:要编程的字节
 Output:
 Return:
 Others:    
****************************************************************************************************************/
void FlashWB(unsigned int Adr,unsigned char DataB)
{
   FCTL1 = FWKEY+WRT;
   FCTL3 = FWKEY;
   *((unsigned char *)Adr) = DataB;
   FCTL1 = FWKEY;
   FCTL3 = FWKEY+LOCK;
   while(FlashBusy() == 1);	                       // 等待FLASH存储器完成操作
}


/****************************************************************************************************************
 Function: void FlashWSegment(unsigned int SegmentAdr, unsigned char *p, unsigned char SegmentSize)
 Description: 字节编程
 Calls:
 Calls By:
 Table Accessed:
 Table Updated:
 Input:   SegmentAdr:指向要编程的地址,注意:不是指针类型
          *p        : 指向带写入数据的数组,指针类型
          SegmentSize:要编程的段的大小
 Output:
 Return:
 Others:    
****************************************************************************************************************/
void FlashWSegment(unsigned int SegmentAdr, unsigned char *p, unsigned char SegmentSize)
{
   unsigned int i;
  
   FCTL1 = FWKEY+WRT;
   FCTL3 = FWKEY;
   
   for (i = 0; i < SegmentSize; i++)
   {
      *((unsigned char *)SegmentAdr) = *p;
      SegmentAdr++;
      p++;
   }
   
   FCTL1 = FWKEY;
   FCTL3 = FWKEY+LOCK;
   while(FlashBusy() == 1);	                       // 等待FLASH存储器完成操作
}

⌨️ 快捷键说明

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