Перейти к содержанию
    

Инициализация клоков vybird

День добрый.

 

Программирую проц под иаром, вроде все ок, но решил проверить, насколько быстр данный проц, и вот тут меня постигло недоумение...

 

Задал я простой тестик, счетчик, который прибавляется на 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)


}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда программа выполняется, DDR?

Кэш включен?

какой тип данных используете для счетчика, uint32_t? если одна итерация выполняется быстрее чем 0,23нс (с кешем вполне реально) возможно переполнение переменной.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда программа выполняется, DDR?

Кэш включен?

какой тип данных используете для счетчика, uint32_t? если одна итерация выполняется быстрее чем 0,23нс (с кешем вполне реально) возможно переполнение переменной.

 

Кэш, который L1 включен, в L2 смысла не вижу - прога выполняется в статической памяти. Переполнение 32х битной переменной?? Этож больше 2 миллиардов итераций должно быть!!! У этого проца если 400лимонов будет - уже праздник :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

День добрый.

 

Программирую проц под иаром, вроде все ок, но решил проверить, насколько быстр данный проц, и вот тут меня постигло недоумение...

 

Задал я простой тестик, счетчик, который прибавляется на 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).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

рекомендует использовать для 500 MHz PFD1, а не PFD3

 

Я в курсе, там и задан первый делитель, а не 3й, просто коммент не поправил. 3й для частоты 400мег.

 

В М4 были действительно выключены кэши, когда подключил, стало значительно быстрее, соизмеримо с стм407, НО только для частоты 132мег.

 

Затем я сменил делитель, на 1й, должно стать 500 на А5 и 166 на М4, однако скорость М4 осталась прежней, что с кэшем, что без,т.е или его частота не поменялась, что странно, т.к. частота шины с 66 возросла до 83мег. проверял по уарту принастройке скорости...

 

С А5 пока все так-же тоскливо, включение кэша дало прирост, но небольшой.

Единственное, в проце есть бутлоадер, который стартует первым, затем загружает в память и пускает прогу, т.е линукс, который во флешке. У меня же прогу загружает jlink, может тет дело, или скорость статики выбирать нужно, только где??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в курсе, там и задан первый делитель, а не 3й, просто коммент не поправил. 3й для частоты 400мег.

 

А чему у Вас равен PFD1_FRAC в ANADIG_PLL1_PFD?

 

Какой partnumber у Вашего проца?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чему у Вас равен PFD1_FRAC в ANADIG_PLL1_PFD?

 

Какой partnumber у Вашего проца?

 

Проц - MVF61NN151CMK50

 

Значение из регистра- 0x9CBB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значение из регистра- 0x9CBB

 

Здесь где-то ошибка. Если ANADIG_PLL1_PFD = 0x9CBB, то это значит PFD1_CLKGATE = 1, т.е. PFD1 отключен. Кроме того, чтобы получить PFD1 = 500 MHz, надо чтобы PFD1_FRAC = 0x13.

 

А чему у Вас равны ANADIG_PLL1_NUM и ANADIG_PLL1_DENOM?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здесь где-то ошибка. Если 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прочиталось -

PLL1_NUM = 0

PLL1_DENOM = 0x16

Это правильно.

Да фиг знает, перед инициализацией pll выполняется команда - ANADIG_PLL1_PFD =0x13;

Почему такой результат незнаю...

Видимо, кто-то портит содержимое этого регистра. Это Вам надо чинить.

И еще, пользуясь случаем, может подскажете, как залить бинарники во флешку на плате, я так понимаю, надо использовать

mfgtools, но надо делать конфиг... Может есть что по данному поводу?

Мы заливаем через Jlink. MFGtool пока не используем.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В смысле, во флешку? Каким образом?

Есть два варианта: через Jlink записываем uboot во внутреннюю SRAM проца. Запускаем uboot. Затем из uboota копируем через Ethernet имидж для внешней NAND Flash, который лежит на РС, собственно в NAND Flash. Второй вариант - записать через Jlink имидж для NAND Flash во внутреннюю SRAM проца (имидж включает uboot). Запускаем uboot. Затем из uboota записываем имидж для внешней NAND Flash из внутренней SRAM собственно в NAND Flash.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть два варианта:

 

Ммм да, я думал это как-то проще, и без убутов. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mantech, удалось нормально оценить производительность? Хотя бы относительно стм32f407?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mantech, удалось нормально оценить производительность? Хотя бы относительно стм32f407?

 

Пока только у М4 стала равна стм, с А5 пока все так же уныло...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...