Цитата(Axel @ Feb 24 2011, 10:18)

Может чего в коде неаккуратно...
Спасибо за инфо. Если можно, гляньте код. Он мне достался по наследству, что-то я правил, но в чем-то физически не мог разобраться, решал другие проблемы.
А завтра заколачивание ящиков для отправки заказчику.
Код
unsigned char EraseFlash( void)
{
#ifdef FLASH_32
unsigned char * ers_addr=(unsigned char *)BEGIN_32;
#endif
#ifdef FLASH_64
unsigned char * ers_addr=(unsigned char *)BEGIN_64;
#endif
unsigned char erase_result;
__disable_interrupt();
fmr0 = 0x01; // flash control register set
asm(" "); // Description for preventing the abbreviation by optimization
fmr0 = 0x03; // CPU rewrite enable
fmr1 = 0x80;
asm(" "); // Description for preventing the abbreviation by optimization
fmr1 = 0x82; // EW1 mode
fmr02 = 0; // Lock bit disable select bit
fmr02 = 1; // Must write a 0 then a 1 in succession to SET
fmr15 = 1;
fmr15 = 0; // block0 enable bit
*ers_addr = 0x50; // Clear status register
*ers_addr = 0x20; // Block erase command write
*ers_addr = 0xd0; // Block erase command write
while( fmr00 != 1 ); // Ready check
// Erase status check
if( fmr07 == 1 )
{ *ers_addr = 0x50; // Clear status register
erase_result = IAP_ERASE_ERR;
}
else
{ erase_result = IAP_COMPLETE;
}
// flash control register reset
fmr0 = 0x00; // CPU rewrite disable
return erase_result;
}
Код
unsigned char WriteFlash( unsigned char *write_addr_,
unsigned char *write_data_,
unsigned int size )
{ unsigned char program_result = IAP_COMPLETE;
int ii;
unsigned char * fp=write_addr_;
unsigned char * dp=write_data_;
/* flash control register set */
fmr0 = 0x01;
asm(" "); /* Description for preventing the abbreviation by optimization */
fmr0 = 0x03; /* CPU rewrite enable */
fmr1 = 0x80;
asm(" "); /* Description for preventing the abbreviation by optimization */
fmr1 = 0x82; /* EW1 mode */
fmr02 = 0; // Lock bit disable select bit
fmr02 = 1; // Must write a 0 then a 1 in succession to SET
fmr15 = 1;
fmr15 = 0; // block0 enable bit
for( ii = 0; ii < size; ii++ )
{ *fp = 0x50; // Clear status register
*fp = 0x40;
*fp = *dp;
while( fmr00 != 1 ); // Ready check
// Program status check
if( fmr06 == 1 )
{ // Program error
*fp = 0x50; // Clear status register
program_result = IAP_PROGRAM_ERR;
break;
}
fp++; dp++;
}
// flash control register reset
fmr0 = 0x00;//0x01; // CPU rewrite disable
return program_result;
}