MSP430F5529 内部flash模块-使用笔记

原谅我做的很简单,偷了一下懒,只是将一个一位int型数据存入flash,关机又上电后重新读出,并没有做什么深入的尝试。
111

void Erase_SegC(void);
void write_SegC(int value);
int Read_SegC(void);

void write_SegC(int value)
{


  int * Flash_ptr;                         // Initialize Flash pointer
  Flash_ptr = (int *) 0x1880;
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY+ERASE;                      // Set Erase bit
  *Flash_ptr = 0;                           // Dummy write to erase Flash seg
  FCTL1 = FWKEY+WRT;                        // Set WRT bit for write operation


  *Flash_ptr++ = value;                   // Write value to flash

  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY+LOCK;                       // Set LOCK bit

}


void Erase_SegC(void)
{
  int *Flash_ptrC = (int *)0x1880;        // Initialize Flash pointer
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY+MERAS;                      // Set Bank Erase bit
  *Flash_ptrC = 0;                           // Dummy erase byte
  FCTL3 = FWKEY+LOCK;                       // Set LOCK bit
}
int Read_SegC(void)
{

  int tmp;
  int *Flash_ptrC;


  Flash_ptrC = (int *) 0x1880;             // Initialize Flash segment C ptr


  __disable_interrupt();                    // 5xx Workaround: Disable global
                                            // interrupt while erasing. Re-Enable
                                            // GIE if needed
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY+ERASE;                      // Set Erase bit

  FCTL1 = FWKEY+WRT;                        // Set WRT bit for write operation

  tmp=*Flash_ptrC;          // copy value segment C to seg D


  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY+LOCK;                       // Set LOCK bit
  return tmp;
}
分享到:更多 ()