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
Was ist denn das Problem? Schon mal das TI-Beispiel angeschaut? Da steht doch alles drin.
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ß
Das hier klappt auf dem F1611 wunderbar:
1 | unsigned char WriteInfoMemA(unsigned int *Data, unsigned char NumWords) |
2 | {
|
3 | if(NumWords < 129) |
4 | {
|
5 | _DINT(); |
6 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer |
7 | FCTL2 = FWKEY + FSSEL_SMCLK + FN1 + FN3; // SMCLK/10 for Flash Timing Generator -> ~ 400Khz |
8 | unsigned int *FlashPtr; |
9 | unsigned char i; |
10 | FlashPtr = (unsigned int*)0x1080; |
11 | FCTL1 = FWKEY + ERASE; // Set Erase bit |
12 | FCTL3 = FWKEY; // Clear Lock bit |
13 | *FlashPtr = 0; // Dummy write to erase Flash segment |
14 | FCTL1 = FWKEY + WRT; // Set WRT bit for write operation |
15 | |
16 | for (i=0; i<NumWords; i++) |
17 | {
|
18 | *FlashPtr++ = *Data++; // Write value to flash |
19 | }
|
20 | |
21 | FCTL1 = FWKEY; // Clear WRT bit |
22 | FCTL3 = FWKEY + LOCK; // Set LOCK bit |
23 | _EINT(); |
24 | return i+1; |
25 | }
|
26 | else return 0; |
27 | }
|
Mein SMCLK läuft mit 4,096MHz.
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ß
Auch wenn auf dem ersten Blick die Takt Einstellungen auch OK scheinen, würde ich mal in der Richtung rumprobieren.
Vielleicht hast du in deinem Debugger eingestellt, er soll beim Flashen den Infomem mit löschen? Der Takt ist eigentlich recht weitläufig erlaubt...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.