Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема увеличения частоты на LPC1768
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
_fun_
Здравствуйте. Поюзал недавно "development board" с LPC1768 на борту и развел свою (кварц 12 МГц и там и там). Проблема следующая: не хочет работать на высокой частоте, начинаются какие-то глюки на частоте от 30 МГц. При тактировании от внутреннего RC эти глюки происходят при разгоне до 60 МГц. Толком обьяснить не смогу, такое впечатление, что происодят пропуски тактовой частоты. ПРи ресете программа выполняется какое-то время, затем останавливается. Или выполняется, но глючно (программа - дерганье ногой). На плате производителя все нормально. Начал сравнивать - апмлитуда на моем кварце немногим больше 1В, причем она падает с увеличением конечной частоты и некая нестабильность появляется. На плате производителя около 1.8 и практически ни от чего не зависит. Ставил другие кварцы (6 МГц - та же проблема, только амплитуда стабильно держится 1В с небольшим, 25 МГц - не шьется, говорит в конце ошибка лоадера...) Подскажите, пожалуйста, в чем могут быть проблемы? Плохая разводка кварца? вторая неделя уже ни к чему не привела((
sonycman
Приведите схему своей платы и её разводку.
zltigo
PLL, WS, MAM.
_fun_
не понял, как правильно сюда файлы загружать

Цитата(zltigo @ Aug 30 2010, 13:53) *
PLL, WS, MAM.


Я Вас немного не понял sad.gif
adnega
На какой частоте работает PLL - смотреть внимательно
_fun_
Цитата(adnega @ Aug 30 2010, 16:14) *
На какой частоте работает PLL - смотреть внимательно

смотрел. все время попадает в диапазон от 300 до 550 МГц, как написано в даташите
adnega
Регистр SC->FLASHCFG и SC->CCLKCFG правильно записываете. Нужны ws для работы с флешкой. Инициализировать их надо ДО включения PLL!

Код бы глянуть...
_fun_
Цитата(adnega @ Aug 30 2010, 16:37) *
Регистр SC->FLASHCFG и SC->CCLKCFG правильно записываете. Нужны ws для работы с флешкой. Инициализировать их надо ДО включения PLL!

Код бы глянуть...


понял, спасибо, попробую переделать, но почему-то интуиция говорит что не в программе дело - на другой плате работает...хотя..Уважаемые гуру, подскажите по разводке - дело может скрываться в ней, или нормально?

До сегодняшнего дня было вот так:

CODE
// 1. Init OSC
SCS_bit.OSCRANGE = 0;
SCS_bit.OSCEN = 1;
// 2. Wait for OSC ready
while(!SCS_bit.OSCSTAT);
// 3. Disconnect PLL
PLL0CON_bit.PLLC = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 4. Disable PLL
PLL0CON_bit.PLLE = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 5. Select source clock for PLL
CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source.
// 6. Set PLL settings 300 MHz
PLL0CFG_bit.MSEL = 25-1;
PLL0CFG_bit.NSEL = 2-1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 7. Enable PLL
PLL0CON_bit.PLLE = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 8. Wait for the PLL to achieve lock
while(!PLL0STAT_bit.PLOCK);
// 9. Set clk divider settings
// CCLKCFG = 3-1; // 1/3 Fpll
CCLKCFG = 5-1;
PCLKSEL0 = PCLKSEL1 = 0; // other peripherals 100/4 = 25MHz
// 10. Connect the PLL
PLL0CON_bit.PLLC = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;


//Flash accelerator init
FLASHCFG = (0x5UL<<12) | 0x3AUL;
sonycman
Цитата(_fun_ @ Aug 31 2010, 10:08) *
подскажите по разводке - дело может скрываться в ней, или нормально?

Разводка, конечно, не ахти.
По паре переходных на каждую дорожку от кварца до чипа, дорожки несколько длинноваты.
Также видно много пересекающих дорожек на верхнем слое.

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

Также на плате не видно, куда именно подключена земля нагрузочных ёмкостей кварца? Видно только никуда не подключенное переходное. Полигон?
Плата двухслойная?

Но для озвученных частот в 6 - 12 МГц особого криминала нет, имхо.

Попробуйте поиграться с конденсаторами кварца - поварьируйте их ёмкость.
Какие их номиналы установлены на фирменной плате?

Код
  // 1. Init OSC
   //Flash accelerator init
FLASHCFG = (0x5UL<<12) | 0x3AUL;

Инициализировать MAM нужно ДО подключения PLL.
Aner
1) земляные проводники от конденсаторов (возможная причина) должны идти на землю максимально коротко, равной длины и на нужную землю!
2) возможно что параметы вашего кварца(-ев) требуют других емкостей. Это видно по амплитуде.
3) не все кварцы будут работать, если параметры далеки от требуемых. Смотрите внимательнее параметры рекомендованных кварцев.
_fun_
Пытаюсь играться с емкостями кварца - пока никаких результатов. На фирменной плате кварц другой фирмы. Сейчас поставил 25Мгц - амплитуда стала еще меньше, наверное из-за этого даже и не прошивается.

Забыл отметить - плата 4-х слойная
zltigo
Да оставьте Вы в покое несчастый кварц и тем более "исследования" щупом, как я подозреваю, с изрядной емкостью. Бит OSCSTAT у Вас, взводится, всякие проблемы у Вас и с внутренним генератором. Спокойно вычитывайте инициализацию и посмотрите не порограммировали-ли флешь с неверными таймингами.
vmp
Для начала можно поиграться с внутренним RC-генератором (IRC). По крайней мере это позволит отсечь проблемы с кварцем.
_fun_
Вообщем игрался я с этими кварцами довольно долго. Схема заводится от внутреннего 4МГц генератора, можно посмотреть его на ноге и вот что еще обнаружилось: при включении PLL и умножении на 1 длительность не 250нс, а 300! На фирменной плате такого не наблюдается. Вообще на фирменной плате можно внутренний генератор спокойно до 100МГц умножить. У меня же в какой-то момент начинается дребезга, а если дальше увеличивать частоту, то вообще работать перестает. от внешнего генератора частота совпадает, от внутреннего нет. Сейчас припаял генератор на 12 МГц, сначала работал на 25 МГц, но теперь она почему-то стала стабильна и на 50. Еще особенность - греешь паяльником кварц, блокировочные конденсаторы рядом с контроллером - частота стабилизируется...может плохой внутренний слой какой-то получился. Но причем тут внутренний генератор я тогда не понимаю. Сегодня обнаружил, что АЦП на моей плате также не делает преобразование...Одна и та же программа. Максимально простая. На фирменной взводится, на моей нет. Контроллер перепаял. Может, серия бракованная? smile.gif))
_fun_
Господа, вообщем частоту я добил. Все заработало и дело было все-таки в разводке. Однако радость моя была недолгой. Решив посмотреть как будет умножаться внутренний генератор написал след. вещь :
CODE
void InitClock(void)
{
//Flash accelerator init
FLASHCFG = (0x5UL<<12) | 0x3AUL;

// // 1. Init OSC
// SCS_bit.OSCRANGE = 0;
// SCS_bit.OSCEN = 1;
// 2. Wait for OSC ready
// while(!SCS_bit.OSCSTAT);
// 3. Disconnect PLL
PLL0CON_bit.PLLC = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 4. Disable PLL
PLL0CON_bit.PLLE = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 5. Select source clock for PLL
CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source.
// 6. Set PLL settings 300 MHz
PLL0CFG_bit.MSEL = 25-1;
PLL0CFG_bit.NSEL = 2-1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 7. Enable PLL
PLL0CON_bit.PLLE = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 8. Wait for the PLL to achieve lock
while(!PLL0STAT_bit.PLOCK);
// 9. Set clk divider settings
// CCLKCFG = 3-1; // 1/3 Fpll
CCLKCFG = 3-1;
PCLKSEL0 = PCLKSEL1 = 0; // other peripherals 100/4 = 25MHz
// 10. Connect the PLL
PLL0CON_bit.PLLC = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;

CLKOUTCFG_bit.CLKOUTSEL = 0;
//CLKOUTCFG_bit.CLKOUTDIV = 1;
CLKOUTCFG_bit.CLKOUT_EN =1;
PINSEL3 |= (1<<22);
}


При этом случайно забыл CLKSRCSEL_bit.CLKSRC = 1 поставить 0 (внутренний осциллятор). Программа зашилась, но на все последующие прошивки теперь ругается. IAR, SEGGER говорят что-то вроде "FAILED to measure CPU clock frequency" или "Could not write Ctrl/Stat register". Попробовал поиграться со скоростями JTAGа - ничего не вышло. Проделал тоже самое с фирменной платой - теперь и она не работает smile.gif. Как дальше быть? Стереть также не получается
rezident
Цитата(_fun_ @ Sep 17 2010, 19:21) *
Как дальше быть? Стереть также не получается

И даже с помощью Bootloader стереть не получается?
sysel
Я однажды доигрался с вочдогом на LPC1754, так что не мог загрузить прошивку (сбрасывался он когда попало).

Дело кончилось тем, что в настройках JTAG установил метод сброса МК "Reset Pin" и всё ожило.
_fun_
Цитата(rezident @ Sep 17 2010, 18:08) *
И даже с помощью Bootloader стереть не получается?

Вы меня озадачили. Объясните, пожалуйста, подробнее, как поступить? У него есть какой-то встроенный Bootloader, до которого можно как-то достучаться?
rezident
Цитата(_fun_ @ Sep 18 2010, 16:14) *
У него есть какой-то встроенный Bootloader, до которого можно как-то достучаться?

Конечно есть. ISP по-другому нзывается. В документации описан. Через UART0 работает. Инициирование запуска - замыканием пина P2.10/EINT0/NMI на VSS перед RESETом. Для работы с Bootloader утилита FlashMagic имеется.
У нас во всех проектах на ARM7/Cortex-M3/Cortex-M0/MSP430 обычно пины для Bootloadera на отдельный разъем PLS-6 выведены. Для загрузки и обновления firmware в критических случаях. Разъем для JTAG мы только в отладочных (сигнальных) образцах устройств делаем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.