Кто-нибудь сталкивался с тем что из программы не стирается внутреняя флеш С8051F343, причём тот-же код на 320 нормально работает...
#include "C8051F340.h"
char data RSTSRC_TST;
extern void Init_Device();
unsigned char xdata *pwrite;
unsigned char code at 0x4000 FLASH_START_ADR[]={"TEST FLASH ERASE",0};
void Sleep(int counMs)
{
while(counMs)
{
TMR3H = 0xA2;
TMR3L = 0x40;
TMR3CN|=0x04;
while(!(TMR3CN&0x80));
TMR3CN &= ~0x84;
counMs--;
}
}
void EraseFalsh()
{
pwrite = (unsigned char xdata *) FLASH_START_ADR;
FLKEY = 0; // FLASH lock and key sequence 1
FLKEY = 0; // FLASH lock and key sequence 1
FLKEY = 0xA5; // FLASH lock and key sequence 1
FLKEY = 0xF1; // FLASH lock and key sequence 2
PSCTL = 0x02; // MOVX writes erase FLASH page
PSCTL |= 0x01; // MOVX writes erase FLASH page
PSCTL |= 0x01; // MOVX writes erase FLASH page
// на этой команде происходит сброс по ошибке флеш памяти 0x40 !!!!!!!!!!!!!!
*pwrite = 0; // initiate page erase
PSCTL &= ~0x01; // MOVX writes target XRAM
PSCTL &= ~0x02; // MOVX writes target XRAM
Sleep(200);
}
void main()
{
RSTSRC_TST = RSTSRC;
// монитор питания включен watchdog запрещён ....
Init_Device();
Sleep(100);
EraseFalsh();
// сюда уже не попадает...
Sleep(100);
while(1);
}