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

Cortex-M4F. Переключение тактирования "на лету"

Всем привет.

Пишу программку для одного устройства с МК Cortex-M4F, в котором в определенные моменты времени для снижения потребления хочу переключаться с PLL на генератор 8 Мгц и обратно.

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

Вопрос: если время, за которое исполняется команда, не критично, можно ли продолжить исполнение программы, не дожидаясь завершения смены источника тактирования?

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


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

Можно. В противном случае вы ведь все равно будете исполнять команды (опроса флага завершения перехода).

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


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

Переключаться можно, не дожидаясь. Внутренняя логика переключения гарантирует безглючный переход. Упс. Не для любых МК, конечно же.

Все эти ожидания делают для чувствительной периферии, такой как USB или даже банально UART-ов, печатающих что-то в консоль или куда-то еще.

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


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

Во-первых - о каком МК речь?

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

9 минут назад, Zuse сказал:

Вопрос: если время, за которое исполняется команда, не критично, можно ли продолжить исполнение программы, не дожидаясь завершения смены источника тактирования?

Если критична работоспособность программы - нельзя.

 

И для снижения потребления недостаточно переключиться на RC-генератор. Нужно ещё и выключить PLL и выключить внешний генератор (если переключаетесь на внутренний).

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

 

PS: Вообще - читайте раздел "clocking" мануала на ваш МК, а не примеры изучайте. Примеры - только для прояснения неясных моментов документации.

2 минуты назад, Arlleex сказал:

Переключаться можно, не дожидаясь.

Слишком безоглядное заявление, не зная какой МК у ТСа.... Вы все мануалы на все в мире Cortex-M4F изучили?  :wink:

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


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

Только что, jcxz сказал:

Слишком безоглядное заявление, не зная какой МК у ТСа....

Согласен, поправил выше.

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


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

А какой микроконтроллер то? 
Обычно ожидается флаг готовности выбранного источника тактирования.

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


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

9 minutes ago, jcxz said:

Во-первых - о каком МК речь?

1921ВК035

11 minutes ago, jcxz said:

Во-вторых - не "ожидание совершения перехода", а "ожидание стабилизации PLL после его включения, до переключения тактирования на него". До которого нужно ещё включить внешний генератор (если он включаемый), и дождаться его стабилизации.:wink:

Нет, после того, как PLL стабилизировалась, идет смена источника тактирования и в цикле проверяется, что в статусном регистре установился номер нужного источника 

К моему МК производителем прилагается такой код:

//switch sysclk
 RCU->SYSCLKCFG = (sysclk_source << RCU_SYSCLKCFG_SYSSEL_Pos);
// Wait switching done
timeout_counter = 0;
while ((RCU->SYSCLKSTAT_bit.SYSSTAT != RCU->SYSCLKCFG_bit.SYSSEL) && (timeout_counter < SYSCLK_SWITCH_TIMEOUT))
timeout_counter++;
if (timeout_counter == SYSCLK_SWITCH_TIMEOUT) //SYSCLK failed to switch
while (1) {};

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


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

2 минуты назад, Zuse сказал:

1921ВК035

Нет, после того, как PLL стабилизировалась, идет смена источника тактирования и в цикле проверяется, что в статусном регистре установился номер нужного источника 

Что "нет"? Переключение тактирования всей системы (в которую входит и ядро и периферия) на стабилизировавшийся PLL, происходит после тех шагов, которые я писал. Но те шаги всё равно обычно нужны. С вашим МК не знаком, но сильно сомневаюсь, что у него PLL стартует и стабилируется мгновенно, без необходимости ожидания. Само переключение тактирования системы тоже может быть не мгновенным и тоже может требовать ожидания. Но скорей всего - это самая малая часть общего ожидания.

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


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

26 minutes ago, Сергей Борщ said:

В противном случае вы ведь все равно будете исполнять команды (опроса флага завершения перехода).

Я это понимаю, но спросил из соображений "как бы чего не вышло"

Изменено пользователем Zuse

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


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

42 minutes ago, Zuse said:

Вопрос: если время, за которое исполняется команда, не критично, можно ли продолжить исполнение программы, не дожидаясь завершения смены источника тактирования?

смена источника тактирования проиходит крайне быстро - это по сути переключение мультиплексора источника тактовой с одного входа на другой,

ничего не мешает заранее  настроить и завести PLL, не дожидаясь его стабилизации, и паралельно работать дальше на встроеннм RC генераторе,

а переключится потом можно в любое время и очень быстро

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


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

On 7/9/2024 at 3:42 PM, Forger said:

смена источника тактирования проиходит крайне быстро - это по сути переключение мультиплексора источника тактовой с одного входа на другой,

ничего не мешает заранее  настроить и завести PLL, не дожидаясь его стабилизации, и паралельно работать дальше на встроеннм RC генераторе,

а переключится потом можно в любое время и очень быстро

Ну, так ведь можно еще немножко кружануть потребления, если выключать PLL.

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


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

11 minutes ago, dimka76 said:

Ну, так ведь можно еще немножко кружануть потребления, если выключать PLL.

Разумеется в батарейных включать PLL надо когда надо, а не когда воткнули батарейку ))

Тут вопрос бы про ожидание пока PLL застабилизируется, так пока он стабилизируется проц работает на внутреннем RC генератора, который стартует всегда первым без вариантов. Поэтому ничего не мешает коду выполнятся, пока ждем готовности PLL

 

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


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

4 minutes ago, Forger said:

Тут вопрос бы про ожидание пока PLL застабилизируется

Нет. Вопрос был про ожидание смены источника тактирования в статусном регистре. Еще раз привожу код производителя:

//switch sysclk
 RCU->SYSCLKCFG = (sysclk_source << RCU_SYSCLKCFG_SYSSEL_Pos);
// Wait switching done
timeout_counter = 0;
while ((RCU->SYSCLKSTAT_bit.SYSSTAT != RCU->SYSCLKCFG_bit.SYSSEL) && (timeout_counter < SYSCLK_SWITCH_TIMEOUT))
timeout_counter++;
if (timeout_counter == SYSCLK_SWITCH_TIMEOUT) //SYSCLK failed to switch
while (1) {};

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


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

5 minutes ago, Zuse said:

Вопрос был про ожидание смены источника тактирования в статусном регистре.

Вот не поленитесь и посчитайте в тактах, сколько времени требуется на переключения мультиплексора тактовой? А то окажется что там не наберется и микросекунды ))

 

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


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

6 minutes ago, Forger said:

Вот не поленитесь и посчитайте в тактах, сколько времени требуется на переключения мультиплексора тактовой? А то окажется что там не наберется и микросекунды ))

 

Я думаю, что время небольшое, но его не посчитать - тут речь про микроархитектурную реализацию переключения. Как он происходит, мы не знаем.

Но меня не задержка волнует, а цикл ожидания. Для чего он? Для детерминированности выполнения программы?

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


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

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

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

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

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

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

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

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

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

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