Forum: Mikrocontroller und Digitale Elektronik PIC18F47K40 UserID memory schreiben


von funky (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

früher konnte man bei den PICs den UserID Bereich mit IDLOC Pragmas 
schreiben. Bei dem PCI18 geht das nicht mehr

Ich bin mit dem Datenblatt zu folgender Routine gekommen, welche aber 
leider nicht funktioniert.

WRTC ist auf off, so dass der Schreibschutz deaktiviert sein müßte

Wenn ich mir die enstprechenden Speicherstellen anschaue (siehe Bild) 
dann steht da auch mein letzter Wert mit 2 an Stelle 0x200003 drin.

Lese ich den Bereich aber wieder aus in MPLAX steht alles auf 0xFF
1
 void prog_user_id(uint32_t adr, uint8_t value){
2
    unsigned char irq_state = INTCONbits.GIE;
3
    NVMCON1bits.NVMREG = 0x01;  // select userid memory
4
    NVMCON1bits.WREN = 1;       // enable write access
5
    
6
    TBLPTRUbits.ACSS = 0x01;    // enable write
7
    TBLPTRUbits.TBLPTRU = (adr >> 16) & 0xFF;
8
    TBLPTRH = (adr >> 8) & 0xFF;
9
    TBLPTRL = adr & 0xFF;
10
    TABLAT = value;
11
    
12
    // nvm unlock sequence
13
    INTCONbits.GIE = 0;         // Disable interrupts
14
    NVMCON2 = 0x55;             // start nvm unlock sequence
15
    NVMCON2 = 0xAA;
16
    NVMCON1bits.WR = 1;
17
    while (NVMCON1bits.WR){}    // Wait for write to complete
18
    NVMCON1bits.WREN = 0;       // disable write access
19
    INTCONbits.GIE = irq_state; // restore interrupt enable
20
}
21
22
prog_user_id( 0x200000, 0);
23
prog_user_id( 0x200001, 1);
24
prog_user_id( 0x200002, 0);
25
prog_user_id( 0x200003, 2);

Hat jemand eine Idee was ich da falsch mache?

Gruß

von Teo D. (teoderix)


Lesenswert?

funky schrieb:
> prog_user_id( 0x200000, 0);
> prog_user_id( 0x200001, 1);
> prog_user_id( 0x200002, 0);
> prog_user_id( 0x200003, 2)

?

#pragma config IDLOC0 = 0
#pragma config IDLOC1 = 1
#pragma config IDLOC2 = 0
#pragma config IDLOC3 = 2

!

: Bearbeitet durch User
von funky (Gast)


Lesenswert?

hmm,

als ich mit der Portierung begonnen hab, konnte er mit diesen Pragmas 
nix anfangen.
Jetzt nochmal ausprobiert und es kompiliert ohne Probleme. Ich vermute 
ma ich hatte da noch einen anderen Fehler drin der mich verarscht hat.

Ich probiere es nochmal damit. Kann man denn irgendwie sehen was für asm 
aus diesen pragmas generiert wird? Im output listing sehe ich nur die 
Pragmas aber nicht den asm code.

von Teo D. (teoderix)


Lesenswert?

Meines Wissens nach taucht das nur im Hex-File auf.
Um da rum zu pfuschen, gibts ne App "HEXMATE" (sollte in der IDE 
integriert sein(?)). Hab ich aber selbst noch nie benutzt.

von Dieter W. (dds5)


Lesenswert?

funky schrieb:
> Im output listing sehe ich nur die Pragmas aber nicht den asm code.

Dazu gibt es keinen Code.
Das ist vergleichbar mit einem ORG auf die entsprechende Speicheradresse 
und dann DEFB 0,1,0,2.

Beitrag #6970478 wurde von einem Moderator gelöscht.
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
Noch kein Account? Hier anmelden.