Gast
#2632996
Hi,
ich habe ein Problem beim speichern einiger Programmdaten im Flash. Ich
möchte verschiedene Programmdaten im Flash meines Controllers speichern
um diese auch nach einem Spannungsausfall noch auslesen zu können.
Hierfür habe ich eine Funktion in der die Daten in den Flash gespeichert
werden sollen. Der Speichervorgang läuft durch das beschreiben der
entsprechenden Register.
Hier meine Funktion zum schreiben der Register:
#define FlASH_FMC_WRKEY 0xA4420000
#define FLASH_FMC_WRITE 0x00000001
#define HWREG(x)
(*((volatile unsigned long *)(x)))
void BLInternalFlashProgram(unsigned long ulDstAddr, unsigned char
*pucSrcData, unsigned long ulLength)
{
unsigned long ulLoop;
for(ulLoop = 0; ulLoop < ulLength; ulLoop += 4)
{
// FMA enthält die Adresse in die geschrieben werden soll
// FMD die Daten und
// FMC die Freigabe fürs schreiben
HWREG(FLASH_FMA) = ulDstAddr + ulLoop;
HWREG(FLASH_FMD) = *(unsigned long *)(pucSrcData + ulLoop);
HWREG(FLASH_FMC) = FLASH_FMC_WRKEY | FLASH_FMC_WRITE;
while(HWREG(FLASH_FMC) & FLASH_FMC_WRITE)
{
}
}
}
Leider funktioniert das schreiben der Register nur bei 2 von 3'en. Das
Flash Memory Control lässt sich leider nicht schreiben und ich habe
keine Ahnung warum.
Vielleicht kann mir ja jemand sagen was ich falsch mache oder ob ich zum
schreiben des FMC noch irgendwelche Bedingungen erfüllen muss.
MFG
Seb