Jump to content

    

Минимальная частота.

Я хочу понизить тактовую частоту.

В pll_init() я вижу следующие ограничения

// Check PLL divider settings are within spec.
  if ((prdiv_val < 1) || (prdiv_val > 8)) {return 0x41;}
  if ((vdiv_val < 16) || (vdiv_val > 47)) {return 0x42;}

  // Check PLL reference clock frequency is within spec.
  ref_freq = crystal_val / prdiv_val;
  if ((ref_freq < 8000000) || (ref_freq > 32000000)) {return 0x43;}

// Check PLL output frequency is within spec.
  pll_freq = (crystal_val / prdiv_val) * vdiv_val;
  if ((pll_freq < 180000000) || (pll_freq > 360000000)) {return 0x45;}

Но последнее ограничение пртиворечит другим. Или я что то не понимаю? Какую минимальную частоту я могу задать?

Edited by Jenya7

Share this post


Link to post
Share on other sites

Не знаю, что за чип, но, судя по коду, частота на выходе PLL должна быть в пределах 180...360 МГц.

Если нужно меньше, должен быть способ поделить эту частоту после PLL. Опять же, не знаю, что за чип, и есть ли там такая возможность.

Share this post


Link to post
Share on other sites
Не знаю, что за чип, но, судя по коду, частота на выходе PLL должна быть в пределах 180...360 МГц.

Если нужно меньше, должен быть способ поделить эту частоту после PLL. Опять же, не знаю, что за чип, и есть ли там такая возможность.

формула такая

PLL out = (((CLKIN/PRDIV) x VDIV) / 2)

но почему 180000000? максимальная частота камня 120000000

 

чтобы получить 120 мега я делаю

#define CLKIN 50000000

#define PRDIV 5

#define VDIV 24

 

но если я хочу уменьшить наполовину я влетаю в ограничения.

 

то есть исходя из if ((pll_freq < 180000000) || (pll_freq > 360000000)) {return 0x45;} минимальный PLL out будет 180000000/2=90000000 так что ли ?

Edited by Jenya7

Share this post


Link to post
Share on other sites
PLL out = (((CLKIN/PRDIV) x VDIV) / 2)

Надо отключить PLL и переключиться на HSE, тогда будете только делить частоту

если PRDIV максимум 8, тогда минимальная частота:

F out = CLKIN/16

Share this post


Link to post
Share on other sites
Надо отключить PLL и переключиться на HSE, тогда будете только делить частоту

если PRDIV максимум 8, тогда минимальная частота:

F out = CLKIN/16

внешний осцилятор в системе будет 20 Мега это маловато. На демо плате это наверное было бы самое то, там 50 Мега.

 

как это F out = CLKIN/16? а где x VDIV часть?

Edited by Jenya7

Share this post


Link to post
Share on other sites
как это F out = CLKIN/16? а где x VDIV часть?

Раз частота умножается на VDIV, подозреваю что это умножитель PLL, который отключен.

Share this post


Link to post
Share on other sites
формула такая

PLL out = (((CLKIN/PRDIV) x VDIV) / 2)

но почему 180000000? максимальная частота камня 120000000

 

Вы путаете диапазон частот, допустимых для PLL, и максимальную частоту, с которой может работать собственно процессор. Частоты PLL существенно выше, и рабочая частота получается делением частоты PLL.

Share this post


Link to post
Share on other sites
внешний осцилятор в системе будет 20 Мега это маловато. На демо плате это наверное было бы самое то, там 50 Мега.

 

как это F out = CLKIN/16? а где x VDIV часть?

Посмотрите на диаграмму тактирования из мануала:

post-19695-1498773100_thumb.png

Как видно, для клока ядра существует делитель OUTDIV1, работающий в диапазоне от 1 до 16.

К примеру, с PLL вы получили 360 МГц, делите эту частоту на 3 - получаете 120 МГц системный клок.

Share this post


Link to post
Share on other sites

Разобрался. Минимальная частота PLL - 180Mhz. На выходе я могу получить 180/2 = 90Mhz.

Всем спасибо за помощь.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this