Hallo uC_ler, Ich programmiere gerade einen C8051F120 von Silabs. Im Moment weiß ich noch nicht wie ich mit der Silabs IDE Daten ins Flash an eine definierte Adresse schreiben und bei Bedarf wieder auslegen kann. Hat das jemand schon gemacht? Vielen Dank
Bei Nutzung des Flash als EEPROM muss immer eine ganze Page gelöscht
werden, einzlne Bytes gehen nicht. Geschrieben werden können Sie schon.
Denke das hilft!
/***********************************************************************
***
ucFlashRead
************************************************************************
**/
unsigned char ucFlashRead (unsigned int addr)
{
bit EA_SAVE = EA; // Preserve EA
char code * data pread; // FLASH read pointer
unsigned char byte;
WDT_RESET;
EA = 0; // Disable interrupts
pread = (char code *) addr;
byte = *pread; // Read the byte
EA = EA_SAVE; // Restore interrupts
return byte;
}
/***********************************************************************
***
vFlashWrite
************************************************************************
**/
void vFlashWrite (unsigned int addr, char byte)
{
bit EA_SAVE = EA; // Preserve EA
char xdata * data pwrite; // FLASH write pointer
WDT_RESET;
EA = 0; // Disable interrupts
VDM0CN = 0xA0; // Enable VDD monitor and high
threshold
RSTSRC = 0x02; // Enable VDD monitor as a reset
source
pwrite = (char xdata *) addr;
FLKEY = 0xA5; // Key Sequence 1
FLKEY = 0xF1; // Key Sequence 2
PSCTL |= 0x01; // PSWE = 1 which enables writes
VDM0CN = 0xA0; // Enable VDD monitor and high
threshold
RSTSRC = 0x02; // Enable VDD monitor as a reset
source
*pwrite = byte; // Write the byte
PSCTL &= ~0x01; // PSWE = 0 which disable writes
EA = EA_SAVE; // Restore interrupts
}
/***********************************************************************
***
vFlashPageErase
************************************************************************
**/
void vFlashPageErase (unsigned int addr)
{
bit EA_SAVE = EA; // Preserve EA
char xdata * data pwrite; // FLASH write pointer
WDT_RESET;
EA = 0; // Disable interrupts
VDM0CN = 0xA0; // Enable VDD monitor and high
threshold
RSTSRC = 0x02; // Enable VDD monitor as a reset
source
pwrite = (char xdata *) addr;
FLKEY = 0xA5; // Key Sequence 1
FLKEY = 0xF1; // Key Sequence 2
PSCTL |= 0x03; // PSWE = 1; PSEE = 1
VDM0CN = 0xA0; // Enable VDD monitor and high
threshold
RSTSRC = 0x02; // Enable VDD monitor as a reset
source
*pwrite = 0; // Initiate page erase
PSCTL &= ~0x03; // PSWE = 0; PSEE = 0
EA = EA_SAVE; // Restore interrupts
}
Das wäre auch meine Antwort gewesen :-) aber >> weiß ich noch nicht wie ich mit der Silabs IDE Daten ins Flash an eine >> definierte Adresse schreiben... Mh, mit der Silabs IDE ?
Was du brauchst ist das Handbuch-Kapitel über die Vergabe fester Adressen von Variablen für deinen Compiler =) Ralf
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.