POV (10.09.2011 13:41, просмотров: 2364)
Долго я приходил к мысли что с C8051F506 у меня проблемы при работе с flash. Сейчас ими занялся и.. решить не могу... Прога при запуске из флешки читает настройки и если контрольная сумма нехорошая, то восстанавливаются параметры по дефолту и записываются во флешь. На 125 и 410 процах (которые я до сих пор преимущественно и использовал - всё Ок).
А вот с 506 траблы начались.. по ошибке записи во флешь (точнее при ее стирании, PSEE = 1) происходит сброс МК. Причём если идти пошагово, то всё нормально.
Я тактовую понижал, и с регистром FLSCL баловался - ничего не помогает. На ряде плат всё работает (но прям вот так чётко утверждать не могу, пока в эксплуатации ни одной платы нет), а сейчас вот началось. В errata никаких фантазий на этот счёт нет.
Алгоритм работы соответствует DS да и вообще взят с сайта производителя:
void FLASH_PageErase (WORD addr)
{
bit EA_SAVE = EA; // Preserve EA
char xdata * data pwrite; // FLASH write pointer
EA = 0; // Disable interrupts
VDM0CN = 0xA0; // Enable VDD monitor and high threshold
RSTSRC = 0x02; // Enable VDD monitor as a reset source
pwrite = (char xdata *) addr;
FLKEY = 0xA5; // Key Sequence 1
FLKEY = 0xF1; // Key Sequence 2
PSCTL |= 0x03; // PSWE = 1; PSEE = 1
VDM0CN = 0xA0; // Enable VDD monitor and high threshold
RSTSRC = 0x02; // Enable VDD monitor as a reset source
*pwrite = 0; // Initiate page erase
PSCTL &= ~0x03; // PSWE = 0; PSEE = 0
EA = EA_SAVE; // Restore interrupts
}