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

Изменение частоты LPC1768

Добрый день! :rolleyes:

в процессе работы для управления энергопотреблением меняю частоту LPC1768

путём изменения делителя

SC->CCLKCFG = div; /* Setup Clock Divider */

затем подстраиваю скорость перефирии под новую тактовую

и ещё некоторые меры по uart

процессор работает от кварца 12 мгц PLL0 включен usb от PLL1

flash акселератор установлен под тактовую частоту до 100 мгц 0x0000403A

Всё вроде работает. Но часто после переключений частоты бывает HardFault_Handler

на одном и том же месте кода где вроде бы нет ничего особенного.

Вопрос - использовал ли кто переключение частоты таким способом? Можно ли так делать?

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

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


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

Вообще-то в мануале четко описан способ установки частоты.

"Изменение частоты" - это просто частный случай установки...

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


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

Вообще-то в мануале четко описан способ установки частоты.

"Изменение частоты" - это просто частный случай установки...

Полностью согласен :rolleyes:

читал.

я всего лишь меняю делитель рассчитывая на эти слова:

"

An 8-bit divider allows a range of options, including slowing CPU operation to a low

rate for temporary power savings without turning off PLL0.

"

но при этом возникает описанная выше проблема. (про неё в мануале не сказано :rolleyes: )

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

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


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

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

Да еще перестариваете перИферию на ходу.

 

Я также меняю частоту для снижения потребления. Но делаю это честно. И проблем никогда не возникало.

---

Чисто объясняю.

PLL - это сложное устройство.

Если вот так резко поменять частоту на входе - поведение PLL плохо предсказуемо.

Именно поэтому она отключается в момент перестройки.

И вот когда локдетект, то включается.

И уж после этого включаются блоки периферии.

 

 

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

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


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

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

Да еще перестариваете перИферию на ходу.

 

Я также меняю частоту для снижения потребления. Но делаю это честно. И проблем никогда не возникало.

---

Чисто объясняю.

PLL - это сложное устройство.

Если вот так резко поменять частоту на входе - поведение PLL плохо предсказуемо.

Именно поэтому она отключается в момент перестройки.

И вот когда локдетект, то включается.

И уж после этого включаются блоки периферии.

я PLL вообще не трогаю делитель стоит после него - это быстрый и простой способ изменения частоты процессора без отключения PLL

цитату из мануала я приводил выше

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

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


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

в процессе работы для управления энергопотреблением меняю частоту LPC1768

путём изменения делителя

SC->CCLKCFG = div; /* Setup Clock Divider */

затем подстраиваю скорость перефирии под новую тактовую

и ещё некоторые меры по uart

Код - в студию. Одна строчка не катит. Есть мнение, что там нехорошие вещи делаются.

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


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

Код - в студию. Одна строчка не катит. Есть мнение, что там нехорошие вещи делаются.

SystemFrequency*=(old_div + 1);
SC->CCLKCFG   = div;          /* Setup Clock Divider                */
SystemFrequency/=(div+ 1);

rs485_ini_speed();
uart_modem_ini_speed();
uart_nmea_ini_speed();
can_ini_speed();

//SSP_ini(SSP_CLK);

пожалуйста :rolleyes:

вроде без перенастройки частоты SSP не грохается уже :rolleyes:

и тогда уж в тему

#if ((CCLKCFG_Val != 0) && (((CCLKCFG_Val - 1) % 2)))
   #error "CCLKCFG: CCLKSEL field does not contain only odd values or 0!"
#endif

почему в библиотечном файле такое ограничение на значение делителя - только нечётные

в мануале говорится чтобы было больше 1 :rolleyes:

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

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


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

А у LPC такая хитрая фича.

В даташите могу предложить к примеру делитель X = 5 (абстрактно).

И сказать, что вот только нечетные.

А в регистр пишется (в описании на поле регистра) X-1. (Типа записывается значение делителя на 1 меньше - или больше).

В итоге делитель как бы нечетный, но записываешь в поле - уже четный.

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


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

А у LPC такая хитрая фича.

В даташите могу предложить к примеру делитель X = 5 (абстрактно).

И сказать, что вот только нечетные.

А в регистр пишется (в описании на поле регистра) X-1. (Типа записывается значение делителя на 1 меньше - или больше).

В итоге делитель как бы нечетный, но записываешь в поле - уже четный.

да случается у них такая фича.

но здесь другое.

наверное осталось в исходниках от другого какого-то процессора т.к. и с чётными и с нечётными работает.

в общем дело было в делителе частоты ssp - выходила за допустимый максимум для некоторых внешних микросхем (у fram 20 mhz)

Спасибо всем за советы :rolleyes:

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

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


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

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

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

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

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

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

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

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

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

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