Перейти к содержанию
    

Проблема увеличения частоты на LPC1768

Здравствуйте. Поюзал недавно "development board" с LPC1768 на борту и развел свою (кварц 12 МГц и там и там). Проблема следующая: не хочет работать на высокой частоте, начинаются какие-то глюки на частоте от 30 МГц. При тактировании от внутреннего RC эти глюки происходят при разгоне до 60 МГц. Толком обьяснить не смогу, такое впечатление, что происодят пропуски тактовой частоты. ПРи ресете программа выполняется какое-то время, затем останавливается. Или выполняется, но глючно (программа - дерганье ногой). На плате производителя все нормально. Начал сравнивать - апмлитуда на моем кварце немногим больше 1В, причем она падает с увеличением конечной частоты и некая нестабильность появляется. На плате производителя около 1.8 и практически ни от чего не зависит. Ставил другие кварцы (6 МГц - та же проблема, только амплитуда стабильно держится 1В с небольшим, 25 МГц - не шьется, говорит в конце ошибка лоадера...) Подскажите, пожалуйста, в чем могут быть проблемы? Плохая разводка кварца? вторая неделя уже ни к чему не привела((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

PLL, WS, MAM.

 

Я Вас немного не понял :(

post-37032-1283161915_thumb.jpg

post-37032-1283161973_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На какой частоте работает PLL - смотреть внимательно

смотрел. все время попадает в диапазон от 300 до 550 МГц, как написано в даташите

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

  // 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подскажите по разводке - дело может скрываться в ней, или нормально?

Разводка, конечно, не ахти.

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

Также видно много пересекающих дорожек на верхнем слое.

 

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

 

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

Плата двухслойная?

 

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

 

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

Какие их номиналы установлены на фирменной плате?

 

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

Инициализировать MAM нужно ДО подключения PLL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) земляные проводники от конденсаторов (возможная причина) должны идти на землю максимально коротко, равной длины и на нужную землю!

2) возможно что параметы вашего кварца(-ев) требуют других емкостей. Это видно по амплитуде.

3) не все кварцы будут работать, если параметры далеки от требуемых. Смотрите внимательнее параметры рекомендованных кварцев.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем _fun_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала можно поиграться с внутренним RC-генератором (IRC). По крайней мере это позволит отсечь проблемы с кварцем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообщем игрался я с этими кварцами довольно долго. Схема заводится от внутреннего 4МГц генератора, можно посмотреть его на ноге и вот что еще обнаружилось: при включении PLL и умножении на 1 длительность не 250нс, а 300! На фирменной плате такого не наблюдается. Вообще на фирменной плате можно внутренний генератор спокойно до 100МГц умножить. У меня же в какой-то момент начинается дребезга, а если дальше увеличивать частоту, то вообще работать перестает. от внешнего генератора частота совпадает, от внутреннего нет. Сейчас припаял генератор на 12 МГц, сначала работал на 25 МГц, но теперь она почему-то стала стабильна и на 50. Еще особенность - греешь паяльником кварц, блокировочные конденсаторы рядом с контроллером - частота стабилизируется...может плохой внутренний слой какой-то получился. Но причем тут внутренний генератор я тогда не понимаю. Сегодня обнаружил, что АЦП на моей плате также не делает преобразование...Одна и та же программа. Максимально простая. На фирменной взводится, на моей нет. Контроллер перепаял. Может, серия бракованная? :)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, вообщем частоту я добил. Все заработало и дело было все-таки в разводке. Однако радость моя была недолгой. Решив посмотреть как будет умножаться внутренний генератор написал след. вещь :

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а - ничего не вышло. Проделал тоже самое с фирменной платой - теперь и она не работает :). Как дальше быть? Стереть также не получается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...