Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM7S проблема с PLL
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Aquatik
unsure.gifВозникла проблема с зависанием SAM7S256 при выключении PLL , проц виснет глухо - перезагружается по вдт...
Думали проблемы с фильтр или кварцем, на плате олимекс их проверили все нормально(и обратно с олимекса ставили на свою проблема осталась)... Софт работает без сбое на олимексовой плате... Питание и питание ядра в норме. Че только не думали, уже и мыслей нет... До этого плл работала всегда, вопрос этот не вылезал, но начался бой за потребление и на тебе... Единственное отличие по железу корпус сама маленьких... Плата многослойка - проблема по питание и т.д. и т.п. маловероятна... Еще сложность в том что плата миниатюрная , житага нет грузим через самбу... Возник вопрос не может ли, как с самбой, как то влиеть на старт или останов PLL внешние ножки???? Может кто подскажет, где посмотреть или кто сталкивался с такой проблемой... Заранее буду признателен..
aaarrr
Цитата(Aquatik @ Jan 13 2010, 07:44) *
unsure.gifВозникла проблема с зависанием SAM7S256 при выключении PLL , проц виснет глухо - перезагружается по вдт...

А куда переключаетесь при останове PLL? Если просто на кварц, то могут быть проблемы.
Aquatik
Да именно на кварц... sad.gif Но на стартките то не зависает.. это и вводит в думы..
aaarrr
Это похоже на ситуацию, описанную в еррате для 58818C:
Цитата
40.5.3.1 MCK: Limited Master Clock Frequency Ranges
If the Flash is operating without wait states, the frequency of the Master Clock MCK must be
lower than 3 MHz or higher than 19 MHz.
If the Flash is operating with one wait state, the frequency of the Master Clock MCK must be
lower than 3 MHz or higher than 19 MHz.
...
Aquatik
Цитата(aaarrr @ Jan 13 2010, 09:02) *
Это похоже на ситуацию, описанную в еррате для 58818C:

Чип ревизии B.
Привожу исходный код, написанный в иаре. По включению и выключению ПЛЛ.
CODE
Включение PLL
__disable_interrupt();



AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_MAIN_CLK;
// Wait until the master clock is established
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );

AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1 |
(16 << 8) |
(AT91C_CKGR_MUL & (72 << 16)) |
(AT91C_CKGR_DIV & 14);
// Wait for PLL stabilization
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK) );
// Wait until the master clock is established for the case we already
// turn on the PLL
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );

AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
// Wait until the master clock is established
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );

AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
// Wait until the master clock is established
while( !(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY) );
__enable_interrupt();
Выключение PLL
__disable_interrupt();
AT91F_PMC_CfgMCKReg (AT91C_BASE_PMC, AT91C_PMC_CSS_MAIN_CLK);
while(!(AT91F_PMC_GetStatus(AT91C_BASE_PMC) & AT91C_PMC_MCKRDY));
AT91F_CKGR_CfgPLLReg(AT91C_BASE_CKGR, 0);
__enable_interrupt();

Возможно, где то не корректно написал.... 1111493779.gif За замечание буду благодарен!!!
aaarrr
Цитата(Aquatik @ Jan 13 2010, 11:15) *
Возможно, где то не корректно написал....

По инструкции нельзя менять PRES и CSS в одну итерацию, как это делается здесь:
Код
AT91F_PMC_CfgMCKReg (AT91C_BASE_PMC, AT91C_PMC_CSS_MAIN_CLK);
Aquatik
Цитата(aaarrr @ Jan 13 2010, 11:30) *
По инструкции нельзя менять PRES и CSS в одну итерацию, как это делается здесь:
Код
AT91F_PMC_CfgMCKReg (AT91C_BASE_PMC, AT91C_PMC_CSS_MAIN_CLK);

Согласен... Некорректно запись в регистр была сделана... Исправил.. Стало более устойчиво работать... Но проблема осталась...
Причем на нескольких платах работает без зависания, не остальных виснет сразу... Железо, блин.... Хотя на автомате собрано.. куда смотреть хз... Интересно с чем еще может быть связано, именно зависание при выключении плл... Фильтр плл, питание или петля земли где то по питанию, токовая есть... Почему именно выключение, плл.. если б вообще не запускался, а то именно при выключениии... maniac.gif
Aquatik
Цитата(Aquatik @ Jan 13 2010, 21:31) *
Согласен... Некорректно запись в регистр была сделана... Исправил.. Стало более устойчиво работать... Но проблема осталась...
Причем на нескольких платах работает без зависания, не остальных виснет сразу... Железо, блин.... Хотя на автомате собрано.. куда смотреть хз... Интересно с чем еще может быть связано, именно зависание при выключении плл... Фильтр плл, питание или петля земли где то по питанию, токовая есть... Почему именно выключение, плл.. если б вообще не запускался, а то именно при выключениии... maniac.gif

Подумали малось... Сделали креш тест прошивку, которая постоянно включает и выключает ПЛЛ на 50 милисекунд.
Прошили все платы...
Вопрос оказалось отношения к программированию не имел.... из партии 40% не прошили тест, висли... Оказалось брак плат, где в многослойке проблемма, ищем... Выяснили это по мультипликации, т.е. платы смультиплизированны по 4 штуки на заготовке, если хоть одна на заготовке рабочая все остальные тоже ок... и наоборот... это правило четко выполнялось.
Хорошо, что их не разделили rolleyes.gif, а то можно было и на компоненты думать...
aaarrr спасибо за ценное замечание по ПЛЛ...
Будем теперь с остатками разбираться... Больше в России изготовление многослойки ни ни unsure.gif
Тема закрыта!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.