уже все перепробывал, что знаю. Не получаеться записать даже 1 сектор, точнее получаеться но потом все виснет. Может быть нужно понижать частоту периферии при работой с флэшкой как у LPC? Может у меня в функциях ошибки, хотя я их вроде из примеров взял. Помогите, а то уже голова квадратная :'(
void flash_init (void){
AT91PS_PMC pPMC;
unsigned long clkus;
clkus = (1074*(MCK >> 10)) >> 20; // Approximate (no Library Code)
// Set Flash Microsecond Cycle Number
// Set Flash Waite State to max. (Single Cycle Access at Up to 30 MHz)
AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN) & (clkus << 16)) | AT91C_MC_FWS_3FWS;
}
void flash_write(unsigned int *addr,unsigned int *flash_buff) {
unsigned int i;
unsigned long page = (((unsigned long) addr) & FLASH_ADDR_MASK) / FLASH_PAGE_SIZE;
__disable_interrupt()
while((*AT91C_MC_FSR & AT91C_MC_FRDY) != AT91C_MC_FRDY ); //Ready Flash
*AT91C_MC_FCR = (0x5A<<24) | (page<<8&AT91C_MC_PAGEN) | 4; //Unlock Region
while((*AT91C_MC_FSR & AT91C_MC_FRDY) != AT91C_MC_FRDY ); //Ready Flash
for(i=0; i < 32; i++)
{
addr[i] = flash_buff[i]; // Copy data from RAM to Flash
}
*AT91C_MC_FCR = AT91C_MC_CORRECT_KEY | (page< while(!(*AT91C_MC_FSR & AT91C_MC_FRDY))
//while((*AT91C_MC_FSR & AT91C_MC_FRDY) != AT91C_MC_FRDY );
__enable_interrupt();
}