Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Изменение частоты LPC1768
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Пришелец
Добрый день! rolleyes.gif
в процессе работы для управления энергопотреблением меняю частоту LPC1768
путём изменения делителя
SC->CCLKCFG = div; /* Setup Clock Divider */
затем подстраиваю скорость перефирии под новую тактовую
и ещё некоторые меры по uart
процессор работает от кварца 12 мгц PLL0 включен usb от PLL1
flash акселератор установлен под тактовую частоту до 100 мгц 0x0000403A
Всё вроде работает. Но часто после переключений частоты бывает HardFault_Handler
на одном и том же месте кода где вроде бы нет ничего особенного.
Вопрос - использовал ли кто переключение частоты таким способом? Можно ли так делать?
DpInRock
Вообще-то в мануале четко описан способ установки частоты.
"Изменение частоты" - это просто частный случай установки...
Пришелец
Цитата(DpInRock @ Mar 4 2011, 11:37) *
Вообще-то в мануале четко описан способ установки частоты.
"Изменение частоты" - это просто частный случай установки...

Полностью согласен rolleyes.gif
читал.
я всего лишь меняю делитель рассчитывая на эти слова:
"
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.gif )
DpInRock
Вы делаете поперек мануала и удивляетесь проблеме.
Да еще перестариваете перИферию на ходу.

Я также меняю частоту для снижения потребления. Но делаю это честно. И проблем никогда не возникало.
---
Чисто объясняю.
PLL - это сложное устройство.
Если вот так резко поменять частоту на входе - поведение PLL плохо предсказуемо.
Именно поэтому она отключается в момент перестройки.
И вот когда локдетект, то включается.
И уж после этого включаются блоки периферии.

Пришелец
Цитата(DpInRock @ Mar 4 2011, 11:54) *
Вы делаете поперек мануала и удивляетесь проблеме.
Да еще перестариваете перИферию на ходу.

Я также меняю частоту для снижения потребления. Но делаю это честно. И проблем никогда не возникало.
---
Чисто объясняю.
PLL - это сложное устройство.
Если вот так резко поменять частоту на входе - поведение PLL плохо предсказуемо.
Именно поэтому она отключается в момент перестройки.
И вот когда локдетект, то включается.
И уж после этого включаются блоки периферии.

я PLL вообще не трогаю делитель стоит после него - это быстрый и простой способ изменения частоты процессора без отключения PLL
цитату из мануала я приводил выше
scifi
Цитата(Пришелец @ Mar 4 2011, 11:24) *
в процессе работы для управления энергопотреблением меняю частоту LPC1768
путём изменения делителя
SC->CCLKCFG = div; /* Setup Clock Divider */
затем подстраиваю скорость перефирии под новую тактовую
и ещё некоторые меры по uart

Код - в студию. Одна строчка не катит. Есть мнение, что там нехорошие вещи делаются.
Пришелец
Цитата(scifi @ Mar 4 2011, 12:11) *
Код - в студию. Одна строчка не катит. Есть мнение, что там нехорошие вещи делаются.

Код
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.gif
вроде без перенастройки частоты SSP не грохается уже rolleyes.gif
и тогда уж в тему
Код
#if ((CCLKCFG_Val != 0) && (((CCLKCFG_Val - 1) % 2)))
   #error "CCLKCFG: CCLKSEL field does not contain only odd values or 0!"
#endif

почему в библиотечном файле такое ограничение на значение делителя - только нечётные
в мануале говорится чтобы было больше 1 rolleyes.gif
DpInRock
А у LPC такая хитрая фича.
В даташите могу предложить к примеру делитель X = 5 (абстрактно).
И сказать, что вот только нечетные.
А в регистр пишется (в описании на поле регистра) X-1. (Типа записывается значение делителя на 1 меньше - или больше).
В итоге делитель как бы нечетный, но записываешь в поле - уже четный.
Пришелец
Цитата(DpInRock @ Mar 4 2011, 12:54) *
А у LPC такая хитрая фича.
В даташите могу предложить к примеру делитель X = 5 (абстрактно).
И сказать, что вот только нечетные.
А в регистр пишется (в описании на поле регистра) X-1. (Типа записывается значение делителя на 1 меньше - или больше).
В итоге делитель как бы нечетный, но записываешь в поле - уже четный.

да случается у них такая фича.
но здесь другое.
наверное осталось в исходниках от другого какого-то процессора т.к. и с чётными и с нечётными работает.
в общем дело было в делителе частоты ssp - выходила за допустимый максимум для некоторых внешних микросхем (у fram 20 mhz)
Спасибо всем за советы rolleyes.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.