|
STM32F4, Динамическое изменение частоты ядра, Можно ли так делать? |
|
|
|
Jan 19 2015, 17:56
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
А вот и нельзя, так делать никогда. На мелких простеньких процах сойдёт но не с F4xx. Не стоит наступать на понятные грабли. Дожидаться завершения всех транзакций передачи данных (I2C, SPI, DMA и тд) и перенастраивать переферию с учетом новых клоков не детерминировано. А та облась памяти озу в F4xx, которая не доступна, что с ней? и еще кучка. Давно есть другой способ, нечего делать процу, остановили его и ждем. Тактовая нуль, жёр почти нуль, чёт дёрнулось, и мы уже на коне, не надо никого перенастраивать, искать и добавлять туда глюков ну и тд.
|
|
|
|
|
Jan 19 2015, 22:06
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
F4xx для этих нельзя, да и не зачем. Есть развитый слип для этого, тот же стоп. Все остальное от лукавого. Думаю, что много лет назад создатели чипов обсуждали без нас эту недерминированность. Аккуратненько не получается, просто берете на себя целый ряд рисков с непонятным обслуживанием, доп буферированием и тд, непонятно для чего то занять кусок памяти, которой может и не быть. И что, вам без этого мало глюков и багов в программах? Анекдот про неглючную прогу знаете? QUOTE (ViKo @ Jan 20 2015, 01:03)  Вот и я так думаю. А что же вы людей пугаете Кортексом? Чтоб матчасть хорошо знали без перевода.
|
|
|
|
|
Jan 20 2015, 04:01
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Integro @ Jan 19 2015, 20:47)  Задача: добится минимального потребления, одна из идей смена частоты проца в засимости от режима работы. "минимального" - нет такого числа. Сколько в мА нужно? Потом справляетесь с документацией и смотрите какой режим энергосбережения можно использовать (учитывая режимы работы периферии, порядок входа и выхода из режима сбережения, какие функции должны продолжать выполняться в этом режиме и как в него входить и выходить). Цитата(Aner @ Jan 20 2015, 04:06)  F4xx для этих нельзя, да и не зачем. Есть развитый слип для этого, тот же стоп. Все остальное от лукавого. Не надо людей в заблуждение вводить. Останов одного только ядра CPU (WFE/WFI) даёт очень маленькое снижение потребления. Так как остальная периферия продолжает работать и тактироваться. Я делал работу с переключением (снижением тактовой) в периоды простоя в одном проекте, где была куча параллельно работающих задач с периферией (несколько SSP+DMA каналов, UART+DMA, ADC+DMA, DAC+DMA), uCOS на LPC1758. Всё прекрасно работает. Но в изучение работы периферии и ядра надо погружаться подробно, чтобы такое реализовать. С поверхностными знаниями и пользуясь библиотеками такое думаю не сделать. После останова и выключения всей периферии, перевода всех пинов в GPIO и установку на них соотв. состояний, я переводил тактирование МК на внутренний IRC-генератор, выключал PLL, далее - устанавливал максимальный делитель тактовой IRC (==256). В таком состоянии у меня МК и находился (IRC=12МГц/256). Какой либо из режимов глубого сна с отключением тактирования в проекте использовать было нельзя, так как кроме основного генератора, другого никакого не было, а пробуждаться надо было по таймеру, а не по внешнему сигналу. Но даже в таком режиме, так как тактовая составляла всего порядка 47кГц, а периферия вся выкл., то потребление МК было очень маленькое. Для выхода из этого режима, проделывал всё в обратном порядке.
|
|
|
|
|
Jan 20 2015, 09:41
|

Гуру
     
Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463

|
QUOTE (jcxz @ Jan 20 2015, 08:01)  Не надо людей в заблуждение вводить. Останов одного только ядра CPU (WFE/WFI) даёт очень маленькое снижение потребления. Так как остальная периферия продолжает работать и тактироваться.
Я делал работу с переключением (снижением тактовой) в периоды простоя в одном проекте, где была куча параллельно работающих задач с периферией (несколько SSP+DMA каналов, UART+DMA, ADC+DMA, DAC+DMA), uCOS на LPC1758. Всё прекрасно работает. Но в изучение работы периферии и ядра надо погружаться подробно, чтобы такое реализовать. С поверхностными знаниями и пользуясь библиотеками такое думаю не сделать. Как это маленькое снижение потребления, еще какое большое. Думать то надо со 180Мгц в ноль. Сколько это по вашему маленькое? Еще какое большое. Ток когда нибудь тестором меряли? Похоже нет. По этому не нужно врать. Периферия как потребляла так и потребляет, все инжины маложрущие. Куча параллельно работающих задач с периферией и это как же так без либ? Короче смами себе противоречите. Ну а сертификацию такая программа точно не пройдет.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|