Работа с INFO-D флеш сегментом.
Задача - в заполненном иноформацией INFO-D поверх незаписанных байт по фиксированным адресам (содержащим == 0xFF )
прописать несколько байт данных. (не стирая данные по остальным адресам сегмента)
Примеры Ti представлены все со стиранием сегмента.
(?) При выполнении этой ф-ии тестовые байты пишутся, но и сегмент при этом стирается.
Допустим ли в принципе такой режим (не в формате ERASE+WRITE, а только WRITE) ?
Ф-ия выполняется из флеш-памяти.
Код
#define FLASH_BUSY 0x0001
#define FLASH_LOCK 0x0010
void INF_Lock( void )
{
Flash_ptr = (char *) 0x1800; // INFO-D
__disable_interrupt();
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + WRT; // Enable byte/word write mode
//while ( (FCTL3 & FLASH_BUSY ) != 0 ); // test busy - для RAM
*Flash_ptr = 0xAB;
Flash_ptr++;
//while ( (FCTL3 & FLASH_BUSY ) != 0 ); // test busy
*Flash_ptr = 0xCD;
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + FLASH_LOCK; // Set LOCK bit
__enable_interrupt();
return;
}
#define FLASH_LOCK 0x0010
void INF_Lock( void )
{
Flash_ptr = (char *) 0x1800; // INFO-D
__disable_interrupt();
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + WRT; // Enable byte/word write mode
//while ( (FCTL3 & FLASH_BUSY ) != 0 ); // test busy - для RAM
*Flash_ptr = 0xAB;
Flash_ptr++;
//while ( (FCTL3 & FLASH_BUSY ) != 0 ); // test busy
*Flash_ptr = 0xCD;
FCTL1 = FWKEY; // Clear WRT bit
FCTL3 = FWKEY + FLASH_LOCK; // Set LOCK bit
__enable_interrupt();
return;
}