IAR EW ARM: где задаются циклы ожидания (wait state) при работе с flash Печать
Добавил(а) microsin   

Количество циклов ожидания (wait state cycles) задаются в процедуре LowLevelInit, в самом начале (файл at91lib\board\board_lowlevel.c):

1
2
3
4
5
6
7
8
#if defined(at91sam7x512)
    AT91C_BASE_EFC0->EFC_FMR = AT91C_MC_FWS_1FWS;
    AT91C_BASE_EFC1->EFC_FMR = AT91C_MC_FWS_1FWS;
#elif defined(at91sam7x128) || defined(at91sam7x256)
    AT91C_BASE_MC->MC_FMR = AT91C_MC_FWS_1FWS;
#else
    #error "No chip definition?"
#endif

Если убрать wait state, то на высоких частотах (начиная с 48 МГц) при работе с flash процессор может начать глючить.

[Предельная тактовая частота для процессора AT91SAM7X]

Если код размещен в SRAM, то он может выполняться на предельной частоте, которую в состоянии дать узел PLL: согласно даташиту это 200 МГц. Но обычно код работает все же из памяти FLASH. В этом случае для надежной работы необходимо при обращении к FLASH добавлять циклы ожидания, если тактовая частота превышает 30 МГц, см. таблицу.

FWS Операция чтения Максимальная рабочая частота, МГц
0 1 цикл 30
1 2 цикла 55
2 3 цикла 55
3 4 цикла 55

[Ссылки]

1. Питание AT91SAM7X, режимы пониженного энергопотребления.
2. Power Management Controller микроконтроллера AT91SAM7X.