Подскажите, пожалуйста, какая реальная производительность у процессоров STR912FAW42-47! Взял готовый пример, и сходу получилось очень маленькое быстродействие, посмотрел примеры инициализации и описание ST как следует обеспечить максимальную производительность, вроде все сделал, как советуют, но реальная производительность получилась в 5 раз меньше, очень похоже на медленную работу Flash! Так что же делаю не так?
Мой пример инициализации:
SCU_MCLKSourceConfig(SCU_MCLK_OSC);
SCU_PLLFactorsConfig(192,25,2); /* PLL = 96 MHz */
SCU_PLLCmd(ENABLE); /* PLL Enabled */
SCU_MCLKSourceConfig(SCU_MCLK_PLL); /* MCLK = PLL-96Mhz, OSC-25 Mhz, RTC-32768 */
SCU_PHYCLKConfig(ENABLE); // включаю для контроля тактового генератора
SCU_PCLKDivisorConfig(SCU_PCLK_Div2); // Set the PCLK Clock to MCLK/2
SCU_RCLKDivisorConfig(SCU_RCLK_Div1);
SCU_HCLKDivisorConfig(SCU_HCLK_Div1);
SCU_FMICLKDivisorConfig(SCU_FMICLK_Div1);
сама программа вычисления производительности:
for(i=0;i<800000;i++);//на IAR без оптимизации выполняется за 8 800 015 тактов (где то 12 команд 1 цикл)
GPIO_Write(GPIO6,0x00); //гашу светодиод
for(i=0;i<800000;i++); //в отладчике обычный цикл приращения I (3-х байт в SRAM)
GPIO_Write(GPIO6,0x80);//зажигаю светодиод
На выходе получаю меандр, частота которого при 96 Мгц должна быть 10 Гц а реально 2 Гц!!!
IAR и по умолчанию в примерах, как написано все инициализирует! Где же тут собак зарыт то? -

Процессор STR912FAW42, кварц 25 МГц, пишу на IAR (пробовал и на Raisonanse было еще хуже -

, но важен именно IAR!
Буду крайне благодарен за любой совет

А может это нормально, сам туплю?
P.S. Копеечный, но прирост дает включение FPQBC!
SCU_AHBPeriphClockConfig(__FPQBC,ENABLE);
SCU_AHBPeriphReset(__FPQBC,DISABLE);
и ничего не меняется если добавлять или убирать ещё и это)))
FMI_Config(FMI_READ_WAIT_STATE_2, FMI_WRITE_WAIT_STATE_0, FMI_PWD_ENABLE,\
FMI_LVD_ENABLE, FMI_FREQ_HIGH); // FMI Waite States
//Enable FMI clock
SCU_AHBPeriphClockConfig(__FMI,ENABLE);
SCU_AHBPeriphReset(__FMI,DISABLE);
//Enable SRAM clock
SCU_AHBPeriphClockConfig(__SRAM,ENABLE);
SCU_AHBPeriphReset(__SRAM,DISABLE);
//Enable SRAM ARBITER clock
SCU_AHBPeriphClockConfig(__SRAM_ARBITER,ENABLE);
SCU_AHBPeriphReset(__SRAM_ARBITER,DISABLE);
Сообщение отредактировал leon_n - May 30 2010, 17:07