реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблема увеличения частоты на LPC1768
_fun_
сообщение Aug 30 2010, 09:33
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Здравствуйте. Поюзал недавно "development board" с LPC1768 на борту и развел свою (кварц 12 МГц и там и там). Проблема следующая: не хочет работать на высокой частоте, начинаются какие-то глюки на частоте от 30 МГц. При тактировании от внутреннего RC эти глюки происходят при разгоне до 60 МГц. Толком обьяснить не смогу, такое впечатление, что происодят пропуски тактовой частоты. ПРи ресете программа выполняется какое-то время, затем останавливается. Или выполняется, но глючно (программа - дерганье ногой). На плате производителя все нормально. Начал сравнивать - апмлитуда на моем кварце немногим больше 1В, причем она падает с увеличением конечной частоты и некая нестабильность появляется. На плате производителя около 1.8 и практически ни от чего не зависит. Ставил другие кварцы (6 МГц - та же проблема, только амплитуда стабильно держится 1В с небольшим, 25 МГц - не шьется, говорит в конце ошибка лоадера...) Подскажите, пожалуйста, в чем могут быть проблемы? Плохая разводка кварца? вторая неделя уже ни к чему не привела((
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 30 2010, 09:37
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Приведите схему своей платы и её разводку.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 30 2010, 09:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



PLL, WS, MAM.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_fun_
сообщение Aug 30 2010, 09:56
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



не понял, как правильно сюда файлы загружать

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


Я Вас немного не понял sad.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
adnega
сообщение Aug 30 2010, 12:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



На какой частоте работает PLL - смотреть внимательно
Go to the top of the page
 
+Quote Post
_fun_
сообщение Aug 30 2010, 13:28
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Цитата(adnega @ Aug 30 2010, 16:14) *
На какой частоте работает PLL - смотреть внимательно

смотрел. все время попадает в диапазон от 300 до 550 МГц, как написано в даташите
Go to the top of the page
 
+Quote Post
adnega
сообщение Aug 30 2010, 13:37
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



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

Код бы глянуть...
Go to the top of the page
 
+Quote Post
_fun_
сообщение Aug 31 2010, 06:08
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Цитата(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;
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 31 2010, 09:11
Сообщение #9


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(_fun_ @ Aug 31 2010, 10:08) *
подскажите по разводке - дело может скрываться в ней, или нормально?

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

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

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

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

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

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

Инициализировать MAM нужно ДО подключения PLL.
Go to the top of the page
 
+Quote Post
Aner
сообщение Aug 31 2010, 09:27
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



1) земляные проводники от конденсаторов (возможная причина) должны идти на землю максимально коротко, равной длины и на нужную землю!
2) возможно что параметы вашего кварца(-ев) требуют других емкостей. Это видно по амплитуде.
3) не все кварцы будут работать, если параметры далеки от требуемых. Смотрите внимательнее параметры рекомендованных кварцев.
Go to the top of the page
 
+Quote Post
_fun_
сообщение Aug 31 2010, 09:43
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Пытаюсь играться с емкостями кварца - пока никаких результатов. На фирменной плате кварц другой фирмы. Сейчас поставил 25Мгц - амплитуда стала еще меньше, наверное из-за этого даже и не прошивается.

Забыл отметить - плата 4-х слойная

Сообщение отредактировал _fun_ - Aug 31 2010, 09:45
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 31 2010, 10:33
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Да оставьте Вы в покое несчастый кварц и тем более "исследования" щупом, как я подозреваю, с изрядной емкостью. Бит OSCSTAT у Вас, взводится, всякие проблемы у Вас и с внутренним генератором. Спокойно вычитывайте инициализацию и посмотрите не порограммировали-ли флешь с неверными таймингами.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vmp
сообщение Aug 31 2010, 11:28
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Для начала можно поиграться с внутренним RC-генератором (IRC). По крайней мере это позволит отсечь проблемы с кварцем.
Go to the top of the page
 
+Quote Post
_fun_
сообщение Sep 17 2010, 07:39
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Вообщем игрался я с этими кварцами довольно долго. Схема заводится от внутреннего 4МГц генератора, можно посмотреть его на ноге и вот что еще обнаружилось: при включении PLL и умножении на 1 длительность не 250нс, а 300! На фирменной плате такого не наблюдается. Вообще на фирменной плате можно внутренний генератор спокойно до 100МГц умножить. У меня же в какой-то момент начинается дребезга, а если дальше увеличивать частоту, то вообще работать перестает. от внешнего генератора частота совпадает, от внутреннего нет. Сейчас припаял генератор на 12 МГц, сначала работал на 25 МГц, но теперь она почему-то стала стабильна и на 50. Еще особенность - греешь паяльником кварц, блокировочные конденсаторы рядом с контроллером - частота стабилизируется...может плохой внутренний слой какой-то получился. Но причем тут внутренний генератор я тогда не понимаю. Сегодня обнаружил, что АЦП на моей плате также не делает преобразование...Одна и та же программа. Максимально простая. На фирменной взводится, на моей нет. Контроллер перепаял. Может, серия бракованная? smile.gif))
Go to the top of the page
 
+Quote Post
_fun_
сообщение Sep 17 2010, 13:21
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Господа, вообщем частоту я добил. Все заработало и дело было все-таки в разводке. Однако радость моя была недолгой. Решив посмотреть как будет умножаться внутренний генератор написал след. вещь :
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. Как дальше быть? Стереть также не получается
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 07:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016