Hallo zusammen. Ich will Daten in den Programmspeicher eines dsPic30F2020 schreiben. Dabei nutze ich MPLABX, zum Debuggen den ICD3. Die Daten möchte ich auf die letzte Adresse im Programmspeicher (0x001FF8) schreiben, leider tut sie es nicht. Hat jemand eine Idee was ich falsch mache? Besten Dank für eure Bemühungen
1 | void WriteFlash(void) |
2 | {
|
3 | |
4 | int i = 0; |
5 | char Data[]={"A"}; |
6 | |
7 | /* 1 Zeile im Flash Programmspeicher löschen */
|
8 | |
9 | NVMCON = 0x4041; // Flash Row Erase Code |
10 | |
11 | // Letzte Adresse im User Programm Flash Memory: 0x001FF8
|
12 | NVMADR = 0x1FF8; // Unteren 16 Bits der Zieladresse schreiben |
13 | NVMADRU = 0x00; // Oberen 8 Bits der Zieladresse schreiben |
14 | |
15 | disInt(); // Interrupts deaktivieren |
16 | |
17 | NVMKEY = 0x55; // Code zum aktivieren des Löschvorgangs |
18 | NVMKEY = 0xAA; |
19 | NVMCONbits.WR = 1; |
20 | |
21 | enaInt(); // Interrupts aktivieren |
22 | |
23 | |
24 | |
25 | /* 1 Zeile im Flash Programmspeicher schreiben */
|
26 | |
27 | NVMCON = 0x4001; // Flash Row Programm Code |
28 | |
29 | TBLPAG = NVMADR; // Letzte Adresse im User Programm Flash Memory: 0x001FF8 |
30 | // an TBLPAG übergeben
|
31 | |
32 | for (i=0; i < 32; i++) // Daten schreiben |
33 | {
|
34 | int Offset = 4; |
35 | __builtin_tblwtl(Offset, Data[0]); |
36 | __builtin_tblwth(Offset, Data[0]); |
37 | |
38 | }
|
39 | |
40 | disInt(); // Interrupts deaktivieren |
41 | |
42 | NVMKEY = 0x55; // Code zum aktivieren des Löschvorgangs |
43 | NVMKEY = 0xAA; |
44 | NVMCONbits.WR = 1; |
45 | |
46 | enaInt(); // Interrupts aktivieren |
47 | |
48 | }
|