Jump to content

    
Sign in to follow this  
jenya7

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

Recommended Posts

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

В 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
формула такая

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this