сделал так. не работает!
Код
__ramfunc void ComandWriteFl()
{
// Command to record pages
AT91C_BASE_MC->MC_FCR = AT91C_MC_KEY | AT91C_MC_PAGEN | AT91C_MC_FCMD_START_PROG;
// Waiting end operations.
while( !(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) );
}
bool write()
{
if( ( AT91C_BASE_MC->MC_FSR & (unsigned int)AT91C_MC_LOCKS15) )
{
// Unlock
// Removes protection from the field memory.
AT91C_BASE_MC->MC_FCR = AT91C_MC_KEY | AT91C_MC_PAGEN | AT91C_MC_FCMD_UNLOCK;
// Waiting end operations.
while( !(AT91C_BASE_MC->MC_FSR & AT91C_MC_FRDY) );
}
int iSizeSettingStruct = sizeof(sSetingsStruct);
if ( (iSizeSettingStruct % 4) || iSizeSettingStruct > AT91C_IFLASH_PAGE_SIZE )
return false;
unsigned int *puiPoint;
puiPoint = (unsigned int *) ADDR_SETTINGS_STRUCT; // last page
// Copy to buffer page.
memcpy( puiPoint, &sSetingsStruct, iSizeSettingStruct);
AT91C_BASE_MC->MC_FMR = (AT91C_BASE_MC->MC_FMR & ~AT91C_MC_FMCN) | FMCN_FLASH(BOARD_MCK);
ComandWriteFl();
}
первое прочитаное значение AT91C_BASE_MC->MC_FSR = 9, после команды на запись, почему не 0 ?
позней читается как 1...
Проблема была в ключе на запись
Сообщение отредактировал D1ma - May 19 2010, 16:05