www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F5438 Info Memory Flash Segment A Probleme


Autor: Rex Gildo jr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !
Ich versuche grade im Zuge meines Projektes den Flash Speicher, im 
einzelnen das 128 Byte große Flash Segment A im info Memory Bereich 
(0x1980 - 0x19FF) zu Beschreiben bzw. zu lesen.

Dazu release ich erstmal den gesamten Info speicher über low setzen des 
LOCKINFO Bits in FCTL4.
Als nächstes wird durch Togglen des LOCKA Bits im FCTL3 Register, das 
Lock Bit für das Segment A ausser Kraft gesetzt. Ein einfaches auf 0 
setzen des Bits im Register funktioniert laut Datenblatt nicht :

Datasheet:

>The state of the LOCKA bit is toggled when a 1 is written to it.
>Writing a 0 to LOCKA has no effect. This
>allows existing flash programming routines to be used unchanged.

Jedes Mal wenn ich jedoch in den Flash ab der Stelle 0x1980 schreiben 
will, bekomme ich ein Access violation interrupt flag :(
Bei den älteren MSP´s läuft meine flashroutine leicht abgeändert ganz 
passabel, ist auch glaub ich zusammengestrick aus TI Code schnipseln.
Jedoch finde ich d nix Zusammenhängendes auf der TI HP.

Vielleicht hat ja von euch jemand nen Tip was ich falsch mache :(




#include "flash.h"
#include <stdlib.h>

//* ====================================================================== */
//* Funktion um Flash zu beschreiben                                       */
//* ====================================================================== */

void write_SegA(char offset,char *buf, unsigned char length) {
  WDTCTL = WDTPW + WDTHOLD;
  _DINT();
  FCTL4  = FWKEY;
  FCTL3  = FWKEY + LOCKA;                         // Toggle(Clear) Lock bit
 
  unsigned short i;
  Flash_ptr = (char *) 0x1980;                    // Initialisierung Flash Pointer
  Flash_ptr = Flash_ptr + offset;                 // Offset
  
  FCTL1 = FWKEY + WRT;                            // Set WRT bit for write operation
  for(i=0; i < length; i++)  {
      *Flash_ptr++ = buf[i];                      // buffer kopieren
      _NOP();                                     // SET BREAKPOINT HERE (DEBUGGER)
  }                         

  FCTL1 = FWKEY;                                  // Clear WRT bit
  FCTL3 = FWKEY + LOCKA;                          // Toggle(Set) LOCK bit
  FCTL4 = FWKEY + LOCKINFO;                       // Set LOCK bit
  _EINT();
}

//* ====================================================================== */
//* Funktion um Flash zu lesen                                             */
//* ====================================================================== */
 
void read_SegA(char offset,char *buffer, unsigned short laenge) {

  unsigned short i=0;
  Flash_ptr = (char *) 0x1980;                    // Initialisierung Flash Pointer
  
  Flash_ptr = Flash_ptr + offset;                 // Offset
  while(i < laenge) {                             // Flash lesen
    buffer[i] = *Flash_ptr++;
    i++;
  }

}



Viele Grüße

Rex

Autor: Rex Gildo jr. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner eine Idee ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.