MSP430 FLASH beschreiben Problem

Gast #3927857
Lesenswert?

Hallo zusammen,

ich möchte eine bestimmte Variable im Falle eines Spannungsverlustes im 
Flash Speicher ablegen und Sie beim nächstern power on wieder auslesen, 
als Sicherung sozusagen.

Zunächst habe ich versucht überhaupt mal irgendeinen Wert zur Laufzeit 
im Flash abzulegen. Beim ersten Mal schreiben wird der Wert der Variable 
(Wert = 60) noch richtig abgespeichert. Beim nächsten Programmdurchlauf 
nur noch Blödsinn, Wert = 16, Wert = 0. Danach wird nur noch 0 
geschrieben.

Jemand eine Idee was hier schief läuft?
1
void write_memory (unsigned int value)
2
{
3
  unsigned int *Flash_ptr;               // Flash pointer
4

5
  Flash_ptr = (unsigned int *) 0xFF00;              
6
  FCTL2 = FWKEY + FSSEL0 + FN1;
7
  FCTL3 = FWKEY;                         // Clear Lock bit
8
  *Flash_ptr = 0;                  
9
  FCTL1 = FWKEY + WRT;                   // Set WRT bit for write operation
10

11
  *Flash_ptr = value;                   // Write value to flash
12

13
  FCTL1 = FWKEY;                         // Clear WRT bit
14
  FCTL3 = FWKEY + LOCK;                  // Set LOCK bit
15
}


Viele Grüße
Gast #3928344
Lesenswert?

Super, danke!

Jetzt funktioniert es. Das Beispiel von TI ist da sehr hilfreich:
1
void write_SegC (char value)
2
{
3
  char *Flash_ptr;                          // Flash pointer
4
  unsigned int i;
5

6
  Flash_ptr = (char *) 0x1040;              // Initialize Flash pointer
7
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
8
  FCTL3 = FWKEY;                            // Clear Lock bit
9
  *Flash_ptr = 0;                           // Dummy write to erase Flash segment
10

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

13
  for (i=0; i<64; i++)
14
  {
15
    *Flash_ptr++ = value;                   // Write value to flash
16
  }
17

18
  FCTL1 = FWKEY;                            // Clear WRT bit
19
  FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
20
}

Beste Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren