ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
5 июля
150830
Programmer (16.03.2009 08:58, просмотров: 3682)
Кто-нибудь сталкивался с тем что из программы не стирается внутреняя флеш С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);
}