В F5xx таких ограничений не увидел, тем не менее код, по сути дела скопированный из примеров, ничего во флеш не записывает.
Частота 8 мгц (уменьшение до 1 не помогло), питание 3.3V.
Код
void BurnEeprom(void)
{
char *Flash_ptrC;
Flash_ptrC = (char *) 0x1880; // Initialize info segment C ptr
__disable_interrupt(); // 5xx Workaround: Disable global
FCTL3 = FWKEY; // unlock info
FCTL1 = FWKEY+ERASE; // Set Erase bit
*Flash_ptrC = 0; // Dummy write to erase info seg С
// на всякий случай - 32ms
for (volatile int i=0; i<10000; i++)
{
__no_operation();
__no_operation();
__no_operation();
}
FCTL1 = FWKEY+WRT; // Byte write
for (int i=0; i<27; i++) *Flash_ptrC++ = EEPROM.RegMap[i];
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY+LOCK; // lock info
__enable_interrupt(); // 5xx Workaround
}
{
char *Flash_ptrC;
Flash_ptrC = (char *) 0x1880; // Initialize info segment C ptr
__disable_interrupt(); // 5xx Workaround: Disable global
FCTL3 = FWKEY; // unlock info
FCTL1 = FWKEY+ERASE; // Set Erase bit
*Flash_ptrC = 0; // Dummy write to erase info seg С
// на всякий случай - 32ms
for (volatile int i=0; i<10000; i++)
{
__no_operation();
__no_operation();
__no_operation();
}
FCTL1 = FWKEY+WRT; // Byte write
for (int i=0; i<27; i++) *Flash_ptrC++ = EEPROM.RegMap[i];
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY+LOCK; // lock info
__enable_interrupt(); // 5xx Workaround
}
Где опять собака могла порыться?