www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F149 Flashwrite


Autor: Gerd K. (struuve)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

weiß jemand wie ich in das Infosegment A einen Wert schreiben kann? 
Folgenes Listing zeigt wie ichs machen will, sieht jemand den Fehler?
  Flash_ptr = (char *) 0x1080;        // Initialize Flash pointer
  while(FCTL3 & BUSY);
  FCTL2 = FWKEY + FSSEL_1 + FN0;      // MCLK/2 for Flash Timing 
Generator
  FCTL3 = FWKEY;                      // Clear Lock bit
  FCTL1 = FWKEY + WRT;                // Set WRT bit for write operation
  P5OUT |=0x01;
  *Flash_ptr = 0x33;                  // Write value to flash
  while(FCTL3 & BUSY);
  P5OUT &=~0x01;
  FCTL1 = FWKEY;                      // Clear WRT bit
  FCTL3 = FWKEY + LOCK;               // Set LOCK bit

Am Port5.4 messe ich einen MCLK von 714kHz

Gruß
Gerhard

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn das Problem? Schon mal das TI-Beispiel angeschaut? Da steht 
doch alles drin.

Autor: Gerd K. (struuve)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,
das Problem ist, dass am Ende nichts im Flash-Speichersegment steht, 
alles FF. Natürlich habe ich das Beispiel von TI probiert, läuft auf 
meinem Eval.-Board auch nicht. Selbst der User-Guide hat mir nicht 
wesentlich weitergeholfen.

Gruß

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier klappt auf dem F1611 wunderbar:
unsigned char WriteInfoMemA(unsigned int *Data, unsigned char NumWords)
{
  if(NumWords < 129)
  {
    _DINT();
    WDTCTL = WDTPW + WDTHOLD;                       // Stop watchdog timer
      FCTL2 = FWKEY + FSSEL_SMCLK + FN1 + FN3;      // SMCLK/10 for Flash Timing Generator -> ~ 400Khz
    unsigned int *FlashPtr;
    unsigned char i;
    FlashPtr = (unsigned int*)0x1080;
    FCTL1 = FWKEY + ERASE;                    // Set Erase bit
      FCTL3 = FWKEY;                            // Clear Lock bit
      *FlashPtr = 0;                           // Dummy write to erase Flash segment
    FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation
    
    for (i=0; i<NumWords; i++)
      {
        *FlashPtr++ = *Data++;                   // Write value to flash
      }
  
      FCTL1 = FWKEY;                            // Clear WRT bit
      FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
    _EINT();
    return i+1;
  }
  else return 0;
}
Mein SMCLK läuft mit 4,096MHz.

Autor: Gerd K. (struuve)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

vielen Dank, ich habe dein Listing angepasst und ausprobiert, aber auch 
damit sehe ich keine Änderung im Flashsegment. Ich bin etwas ratlos, ich 
gehe jetzt erstmal eine Runde laufen.

Gruß

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn auf dem ersten Blick die Takt Einstellungen auch OK scheinen, 
würde ich mal in der Richtung rumprobieren.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hast du in deinem Debugger eingestellt, er soll beim Flashen 
den Infomem mit löschen? Der Takt ist eigentlich recht weitläufig 
erlaubt...

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.