|
Инициализация клоков vybird, Работает как черепаха... |
|
|
|
Sep 19 2014, 18:54
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
День добрый. Программирую проц под иаром, вроде все ок, но решил проверить, насколько быстр данный проц, и вот тут меня постигло недоумение... Задал я простой тестик, счетчик, который прибавляется на 1 пока идет 1 сек, без оптимизации и т.п. Итого, на А5, на который идет тактировка 500!!! МГц, счетчик насчитал около 2000000. В отладке посмотрел, на прибавление 1 и выполнения while с условием, выполняется 10 асмовских команд. Итого получаем черепашью скорость, если так мягко выразиться Для примера запустил тоже самое на стм32f407 на 160МГц результат был в 6 раз больше... Может у кого есть светлые мысли, или там еще каких-нить делителей понапичкали... Вот код инициализации Код void SystemInit(void) { CCM->CLPCR &= ~CCM_CLPCR_FXOSC_PWRDWN_MASK;
while(!(CCM_CSR_FXOSC_RDY_MASK & CCM->CSR));
CCM->CCSR |= CCM_CCSR_FAST_CLK_SEL_MASK;
// using PLL1 PFD3 //Enable CCM, SRC, and more CCM->CCGR4 |= CCM_CCGR4_CG10(1); // WKPU ungate CCM->CCGR4 |= CCM_CCGR4_CG11(1); // CCM ungate CCM->CCGR4 |= CCM_CCGR4_CG12(1); // GPC ungate CCM->CCGR4 |= CCM_CCGR4_CG14(1); // SRC ungate CCM->CCGR3 |= CCM_CCGR3_CG0(1); // ANADIG ungate
//Enable IOMUX CCM->CCGR2 |= CCM_CCGR2_CG8(1); // IOMUX Controller ungate CCM->CCGR2 |= CCM_CCGR2_CG9(1); // Port A Controller ungate CCM->CCGR2 |= CCM_CCGR2_CG10(1); // Port B Controller ungate CCM->CCGR2 |= CCM_CCGR2_CG11(1); // Port C Controller ungate CCM->CCGR2 |= CCM_CCGR2_CG12(1); // Port D Controller ungate CCM->CCGR2 |= CCM_CCGR2_CG13(1); // Port E Controller ungate
/* enable PLLs in Anadig */ ANADIG->PLL1_CTRL=0x00002001; while(!(ANADIG_PLL1_CTRL_LOCK_MASK & ANADIG->PLL1_CTRL));//wait until lock
ANADIG->PLL2_CTRL=0x00002001; while(!(ANADIG_PLL2_CTRL_LOCK_MASK & ANADIG->PLL2_CTRL));//wait until lock ANADIG->PLL4_CTRL=0x00002031; //PLL4 while(!(ANADIG_PLL4_CTRL_LOCK_MASK & ANADIG->PLL4_CTRL));//wait until lock ANADIG->PLL5_CTRL=0x00002001; //PLL5 while(!(ANADIG_PLL5_CTRL_LOCK_MASK & ANADIG->PLL5_CTRL));//wait until lock ANADIG->PLL6_CTRL=0x00002028; //PLL6 while(!(ANADIG_PLL6_CTRL_LOCK_MASK & ANADIG->PLL6_CTRL));//wait until lock
//Use 500MHz CA5, 400 MHz DDR(async), 166MHz CM4, and 83MHz bus (PFD1=500MHz) //CCM->CCSR=0x0001FF24; //PLL1 uses PLL1_PFD3, enable all PLL1 and PLL2, select Fast Clock, and sys_clock_sel use PLL1 CCM->CCSR=0x0001FF24; //PLL1 uses PLL1_PFD3, enable all PLL1 and PLL2, select Fast Clock, and sys_clock_sel use PLL1 CCM->CACRR=0x00000810; //ARM_DIV=0 (div by 1), BUS_DIV=2 (div by 3), ipg_div value is 1 (div by 2)
}
|
|
|
|
|
Sep 23 2014, 14:09
|

Местный
  
Группа: Свой
Сообщений: 204
Регистрация: 14-10-05
Из: г. Москва
Пользователь №: 9 641

|
Цитата(mantech @ Sep 19 2014, 22:54)  День добрый.
Программирую проц под иаром, вроде все ок, но решил проверить, насколько быстр данный проц, и вот тут меня постигло недоумение...
Задал я простой тестик, счетчик, который прибавляется на 1 пока идет 1 сек, без оптимизации и т.п. Итого, на А5, на который идет тактировка 500!!! МГц, счетчик насчитал около 2000000. В отладке посмотрел, на прибавление 1 и выполнения while с условием, выполняется 10 асмовских команд. Итого получаем черепашью скорость, если так мягко выразиться
Для примера запустил тоже самое на стм32f407 на 160МГц результат был в 6 раз больше...
Может у кого есть светлые мысли, или там еще каких-нить делителей понапичкали... Надо бы ещё записать MFD = 0x12 в ANADIG_PLL1_DENOM и PFD3 = 0x13 в ANADIG_PLL1_PFD. Ещё обратите внимание, что Freescale рекомендует использовать для 500 MHz PFD1, а не PFD3 (см. раздел 9.6.1.1 в Rev.5 мануала на Vybrid).
|
|
|
|
|
Sep 23 2014, 18:14
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Zwerg_nase @ Sep 23 2014, 17:09)  рекомендует использовать для 500 MHz PFD1, а не PFD3 Я в курсе, там и задан первый делитель, а не 3й, просто коммент не поправил. 3й для частоты 400мег. В М4 были действительно выключены кэши, когда подключил, стало значительно быстрее, соизмеримо с стм407, НО только для частоты 132мег. Затем я сменил делитель, на 1й, должно стать 500 на А5 и 166 на М4, однако скорость М4 осталась прежней, что с кэшем, что без,т.е или его частота не поменялась, что странно, т.к. частота шины с 66 возросла до 83мег. проверял по уарту принастройке скорости... С А5 пока все так-же тоскливо, включение кэша дало прирост, но небольшой. Единственное, в проце есть бутлоадер, который стартует первым, затем загружает в память и пускает прогу, т.е линукс, который во флешке. У меня же прогу загружает jlink, может тет дело, или скорость статики выбирать нужно, только где??
|
|
|
|
|
Sep 24 2014, 11:34
|

Местный
  
Группа: Свой
Сообщений: 204
Регистрация: 14-10-05
Из: г. Москва
Пользователь №: 9 641

|
Цитата(mantech @ Sep 23 2014, 22:14)  Я в курсе, там и задан первый делитель, а не 3й, просто коммент не поправил. 3й для частоты 400мег. А чему у Вас равен PFD1_FRAC в ANADIG_PLL1_PFD? Какой partnumber у Вашего проца?
|
|
|
|
|
Sep 24 2014, 14:24
|

Местный
  
Группа: Свой
Сообщений: 204
Регистрация: 14-10-05
Из: г. Москва
Пользователь №: 9 641

|
Цитата(mantech @ Sep 24 2014, 18:04)  Значение из регистра- 0x9CBB Здесь где-то ошибка. Если ANADIG_PLL1_PFD = 0x9CBB, то это значит PFD1_CLKGATE = 1, т.е. PFD1 отключен. Кроме того, чтобы получить PFD1 = 500 MHz, надо чтобы PFD1_FRAC = 0x13. А чему у Вас равны ANADIG_PLL1_NUM и ANADIG_PLL1_DENOM?
|
|
|
|
|
Sep 24 2014, 15:01
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Zwerg_nase @ Sep 24 2014, 17:24)  Здесь где-то ошибка. Если ANADIG_PLL1_PFD = 0x9CBB, то это значит PFD1_CLKGATE = 1, т.е. PFD1 отключен. Кроме того, чтобы получить PFD1 = 500 MHz, надо чтобы PFD1_FRAC = 0x13.
А чему у Вас равны ANADIG_PLL1_NUM и ANADIG_PLL1_DENOM? прочиталось - PLL1_NUM = 0 PLL1_DENOM = 0x16 Здесь где-то ошибка. Если ANADIG_PLL1_PFD = 0x9CBB, Да фиг знает, перед инициализацией pll выполняется команда - ANADIG_PLL1_PFD =0x13; Почему такой результат незнаю... И еще, пользуясь случаем, может подскажете, как залить бинарники во флешку на плате, я так понимаю, надо использовать mfgtools, но надо делать конфиг... Может есть что по данному поводу? ЗЫ. Не знаю поможет это в моем вопросе или нет, решил посмотреть, сколь насчитает мне global timer за 1 сек, вообщем результат 1 177 600 000. Последние цифры "прыгают", но как-то так. Вопрос - какой частотой он тактируется, по прикидкам - частота pll1 *2
Сообщение отредактировал mantech - Sep 24 2014, 18:58
|
|
|
|
|
Sep 25 2014, 11:38
|

Местный
  
Группа: Свой
Сообщений: 204
Регистрация: 14-10-05
Из: г. Москва
Пользователь №: 9 641

|
Цитата(mantech @ Sep 24 2014, 19:01)  прочиталось - PLL1_NUM = 0 PLL1_DENOM = 0x16 Это правильно. Цитата Да фиг знает, перед инициализацией pll выполняется команда - ANADIG_PLL1_PFD =0x13; Почему такой результат незнаю... Видимо, кто-то портит содержимое этого регистра. Это Вам надо чинить. Цитата И еще, пользуясь случаем, может подскажете, как залить бинарники во флешку на плате, я так понимаю, надо использовать mfgtools, но надо делать конфиг... Может есть что по данному поводу? Мы заливаем через Jlink. MFGtool пока не используем.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|