Пришелец 0 4 марта, 2011 Опубликовано 4 марта, 2011 (изменено) · Жалоба Добрый день! :rolleyes: в процессе работы для управления энергопотреблением меняю частоту LPC1768 путём изменения делителя SC->CCLKCFG = div; /* Setup Clock Divider */ затем подстраиваю скорость перефирии под новую тактовую и ещё некоторые меры по uart процессор работает от кварца 12 мгц PLL0 включен usb от PLL1 flash акселератор установлен под тактовую частоту до 100 мгц 0x0000403A Всё вроде работает. Но часто после переключений частоты бывает HardFault_Handler на одном и том же месте кода где вроде бы нет ничего особенного. Вопрос - использовал ли кто переключение частоты таким способом? Можно ли так делать? Изменено 4 марта, 2011 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 4 марта, 2011 Опубликовано 4 марта, 2011 · Жалоба Вообще-то в мануале четко описан способ установки частоты. "Изменение частоты" - это просто частный случай установки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 4 марта, 2011 Опубликовано 4 марта, 2011 (изменено) · Жалоба Вообще-то в мануале четко описан способ установки частоты. "Изменение частоты" - это просто частный случай установки... Полностью согласен :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: ) Изменено 4 марта, 2011 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 4 марта, 2011 Опубликовано 4 марта, 2011 (изменено) · Жалоба Вы делаете поперек мануала и удивляетесь проблеме. Да еще перестариваете перИферию на ходу. Я также меняю частоту для снижения потребления. Но делаю это честно. И проблем никогда не возникало. --- Чисто объясняю. PLL - это сложное устройство. Если вот так резко поменять частоту на входе - поведение PLL плохо предсказуемо. Именно поэтому она отключается в момент перестройки. И вот когда локдетект, то включается. И уж после этого включаются блоки периферии. Изменено 4 марта, 2011 пользователем DpInRock Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 4 марта, 2011 Опубликовано 4 марта, 2011 (изменено) · Жалоба Вы делаете поперек мануала и удивляетесь проблеме. Да еще перестариваете перИферию на ходу. Я также меняю частоту для снижения потребления. Но делаю это честно. И проблем никогда не возникало. --- Чисто объясняю. PLL - это сложное устройство. Если вот так резко поменять частоту на входе - поведение PLL плохо предсказуемо. Именно поэтому она отключается в момент перестройки. И вот когда локдетект, то включается. И уж после этого включаются блоки периферии. я PLL вообще не трогаю делитель стоит после него - это быстрый и простой способ изменения частоты процессора без отключения PLL цитату из мануала я приводил выше Изменено 4 марта, 2011 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 4 марта, 2011 Опубликовано 4 марта, 2011 · Жалоба в процессе работы для управления энергопотреблением меняю частоту LPC1768 путём изменения делителя SC->CCLKCFG = div; /* Setup Clock Divider */ затем подстраиваю скорость перефирии под новую тактовую и ещё некоторые меры по uart Код - в студию. Одна строчка не катит. Есть мнение, что там нехорошие вещи делаются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 4 марта, 2011 Опубликовано 4 марта, 2011 (изменено) · Жалоба Код - в студию. Одна строчка не катит. Есть мнение, что там нехорошие вещи делаются. 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: Изменено 4 марта, 2011 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 4 марта, 2011 Опубликовано 4 марта, 2011 · Жалоба А у LPC такая хитрая фича. В даташите могу предложить к примеру делитель X = 5 (абстрактно). И сказать, что вот только нечетные. А в регистр пишется (в описании на поле регистра) X-1. (Типа записывается значение делителя на 1 меньше - или больше). В итоге делитель как бы нечетный, но записываешь в поле - уже четный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Пришелец 0 4 марта, 2011 Опубликовано 4 марта, 2011 (изменено) · Жалоба А у LPC такая хитрая фича. В даташите могу предложить к примеру делитель X = 5 (абстрактно). И сказать, что вот только нечетные. А в регистр пишется (в описании на поле регистра) X-1. (Типа записывается значение делителя на 1 меньше - или больше). В итоге делитель как бы нечетный, но записываешь в поле - уже четный. да случается у них такая фича. но здесь другое. наверное осталось в исходниках от другого какого-то процессора т.к. и с чётными и с нечётными работает. в общем дело было в делителе частоты ssp - выходила за допустимый максимум для некоторых внешних микросхем (у fram 20 mhz) Спасибо всем за советы :rolleyes: Изменено 4 марта, 2011 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться