|
|
  |
lpc2468 & PLL, инициализация PLL |
|
|
|
Oct 16 2008, 07:36
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Добрый день. Подскажите как правильно завести PLL в LPC2468. В документации описан алгоритм. Написал программу инициализации согласно этому алгоритму, но PLL не запускается. Опытным путём выяснил что зависает вот на этой строчке: Код //ждём пока PLL не захватит частоту while ( ! (PLLSTAT & (1 << PLOCK)) ); /* Check lock bit status */ Частота кварца 12 МГц, M и N расчитаны по примеру из документации. Посмотрите пожалуйста на мой код инициализации  P.S. поиск по сайту ничего не дал, в yandex тоже, в апноутах на сайте NXP пока не нашёл примера инициализации PLL, в эррата на LPC2468 есть допуски на частоту Fcco=290 но M и N подобраны так чтобы попадать в диапазон 275-290МГц Код #include <LPC21xx.H>
//PLLCFG //31:24 unused //23:16 NSEL //15 unused //14:0 MSEL
//PLLSTAT #define PLLC 25 #define PLOCK 26
#define SCS (*((volatile unsigned long *) 0xE01FC1A0)) #define OSCEN 5 #define OSCSTAT 6
#define CLKSRCSEL (*((volatile unsigned long *) 0xE01FC10C)) #define CCLKCFG (*((volatile unsigned long *) 0xE01FC104))
#define PLL_MValue 12 #define PLL_NValue 1 #define CCLKDivValue 0
///////////////////////////////////////////////////// ///////////////////////////////////////////////////// void ConfigurePLL ( void ) { int i;
//если PLL подсоединена то отсоединяем её if ( PLLSTAT & (1 << PLLC) ) { PLLCON = 1; /* Enable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55; }
//отключаем PLL PLLCON = 0; /* Disable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55;
//включаем основной осцилятор SCS |= (1<<OSCEN); /* Enable main OSC */ while( !(SCS & (1<<OSCSTAT)) ); /* Wait until main OSC is usable */
//выбираем основной осцилятор как источник тактового сигнала для PLL CLKSRCSEL = 0x01; /* select main OSC, 12MHz, as the PLL clock source */
//заносим М и N в регистр PLLCFG = (PLL_MValue-1) | ((PLL_NValue-1) << 16);//M=12, N=1 PLLFEED = 0xaa; PLLFEED = 0x55;
//включаем PLL PLLCON = 1; /* Enable PLL, disconnected */ PLLFEED = 0xaa; PLLFEED = 0x55;
//устанавливаем коэф деления для тактирования процессора CCLKCFG = CCLKDivValue; /* Set clock divider */ //CCLKDivValue=0
//ждём пока PLL не захватит частоту for(i = 100000; i; i--); // while ( ! (PLLSTAT & (1 << PLOCK)) ); /* Check lock bit status */
//включаем и подсоединяем PLL PLLCON = 3; /* enable and connect */ PLLFEED = 0xaa; PLLFEED = 0x55; //ждём пока PLL не подключится for(i = 100000; i; i--); // while ( ((PLLSTAT & (1 << PLLC)) == 0) );
}
|
|
|
|
|
Oct 16 2008, 08:30
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(mempfis_ @ Oct 16 2008, 14:10)  Когда писал вчера вечером программу то делал и 1 и 3, не помогло. Как буду дома обязательно проверю и с 5. CLK = Fpll/N N = 0 - не известно что будет. 1 - это частота 280МГц. 2 - 140МГц. 3 - 93.3МГц. Правильные значения начинаются с 4-5.
|
|
|
|
|
Oct 16 2008, 22:16
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(mempfis_ @ Oct 17 2008, 02:09)  К сожалению это тоже не помогло. ПЛЛ не запускается (виснет на захвате частоты) Перепроверил всю последовательность инициализации, пробовал запускать от встроенного генератора, РТС и осцилятора на 12МГц- ничего, виснет на одном и том-же месте  Не пойму что не так. А не пробовали со стандартным startup сначала поработать? В этом есть плюс: если в этом случае заработает, то можно будет проанализировать где у вас ошибка (и с радостью сообщите нам). А если не заработает, значит, что-то с камнем не то (что, как мне кажется, маловероятно).
|
|
|
|
|
Oct 17 2008, 08:03
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(FormatCft @ Oct 17 2008, 02:16)  А не пробовали со стандартным startup сначала поработать? В этом есть плюс: если в этом случае заработает, то можно будет проанализировать где у вас ошибка (и с радостью сообщите нам). А если не заработает, значит, что-то с камнем не то (что, как мне кажется, маловероятно). Конечно пробовал. Эффект тотже - PLL не запускается  У меня в Keil-е в startup-е ставится галочка PLL setup и два параметра N и P и всё, где выставляется частота кварца я не помню, но я её кажется выставлял (12МГц). Я поэтому и взялся писать свою функцию настройки PLL так как со startupom не работало  Вот если отключить настройку PLL то процессор работает т.е. RC-генератор рабочий, но попытка пропустить его частоту через PLL тоже оказалась неудачной. Буду разбираться, попробую скачать более новую версию Keil или попробую перейти в IAR (если найду как там зделать startup)
|
|
|
|
|
Oct 17 2008, 19:07
|

Местный
  
Группа: Свой
Сообщений: 331
Регистрация: 22-07-08
Из: Р О С С И Я
Пользователь №: 39 145

|
Цитата(mempfis_ @ Oct 17 2008, 14:03)  Конечно пробовал. Эффект тотже - PLL не запускается  У меня в Keil-е в startup-е ставится галочка PLL setup и два параметра N и P и всё, где выставляется частота кварца я не помню, но я её кажется выставлял (12МГц). Я поэтому и взялся писать свою функцию настройки PLL так как со startupom не работало  Вот если отключить настройку PLL то процессор работает т.е. RC-генератор рабочий, но попытка пропустить его частоту через PLL тоже оказалась неудачной. Буду разбираться, попробую скачать более новую версию Keil или попробую перейти в IAR (если найду как там зделать startup) Пробовал с последним кейлом всё без проблем. А вот переходить на иар из-за такого пустяка смысла, мне кажется, нет
|
|
|
|
|
Oct 18 2008, 07:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(zltigo @ Oct 18 2008, 01:42)  Я Вас умоляю, не надо фантазировать... Я всю эту писанину не читал, но инициализируется все с полпинка - написал с листа и забыл. Мне бы Ваш опыт я бы тоже с полпинка всё инициализировал..... Цитата(DimaM @ Oct 18 2008, 02:59)  я новый камень еще не брал а со старыми 2378 и 2368 кайловская инициализация работает хорошо. ставил множитель 12. промежуточная частота 288 от 12 МГц, для нового думаю тоже должно идти 280 Старая версия была 1.4.0.1, новая 3.63. В новой LPC2468 входит в список поддерживаемых процессоров, в старой - нет. Выбрал первый попавшийся с похожим объмом flash (кажется LPC2138). Может из-за этого не прокатило. Наберусь опыта и выясню. Дабы не нервировать модераторов (в частности zltigo) задаванием элементарных с точки зрения профессионала вопросов считаю тему можно закрыть. Всем спасибо за участие
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|