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. |