CODE
#include "msp430x54x.h"
#define Memstart 0x10000 // Адрес с которого начну запись в FLASH
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned long g = Memstart;
do
{
while(FCTL3 & BUSY)
{}
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
__data20_write_char(g, 0x15);
g += 0x0001;
}
while(g <= 0x45BFF);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}
#define Memstart 0x10000 // Адрес с которого начну запись в FLASH
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned long g = Memstart;
do
{
while(FCTL3 & BUSY)
{}
FCTL3 = FWKEY;
FCTL1 = FWKEY + WRT;
__data20_write_char(g, 0x15);
g += 0x0001;
}
while(g <= 0x45BFF);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}
Такой код работает нормально. Записывает в память все отлично.
Теперь попробую очистить FLASH. После цикла, указанного выше пишу такой код:
CODE
do
{
while(FCTL3 & BUSY)
{}
FCTL3 = FWKEY;
FCTL1 = FWKEY + ERASE;
__data20_write_char(g, 0x0F);
g += 0x0200;
}
while(g <= 0x10FF0);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
{
while(FCTL3 & BUSY)
{}
FCTL3 = FWKEY;
FCTL1 = FWKEY + ERASE;
__data20_write_char(g, 0x0F);
g += 0x0200;
}
while(g <= 0x10FF0);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
Компилирую. Ошибок никаких, но теперь и память не записывается, и не стирается. Хотя может наоборот стирается.)))) Прошу заметить что данные я записываю с адреса 0x10000 до 0x45BFF. А стирать пытаюсь с адреса 0x10000 до 0x10FF0. Получается что часть памяти я должен очистить, а часть забить своими данными, но ничего подобного не наблюдаю.
Данные во FlASH-памяти смотрю с помощью отладчика в IAR, в окне "Memory". Подскажите, может я что-то забыл. Какой-нибудь разрешающий/запрещающий бит не установил или наоборот не очистил. Или еще что-то.Заранее спасибо.