Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: lpc2468 & PLL
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mempfis_
Добрый день. Подскажите как правильно завести PLL в LPC2468.
В документации описан алгоритм. Написал программу инициализации согласно этому алгоритму,
но PLL не запускается.
Опытным путём выяснил что зависает вот на этой строчке:

Код
//ждём пока PLL не захватит частоту
while ( ! (PLLSTAT & (1 << PLOCK)) );    /* Check lock bit status */


Частота кварца 12 МГц, M и N расчитаны по примеру из документации.
Посмотрите пожалуйста на мой код инициализации smile.gif

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

}
FormatCft
Частота 280МГц это слишком много.
А если попробовать CCLKDivValue сделать равным 5?
По идее если плл включится, то с такой частотой у процессора должна крыша съехать (отладчик вываливается).
mempfis_
Цитата(FormatCft @ Oct 16 2008, 11:51) *
А если попробовать CCLKDivValue сделать равным 5?


Когда писал вчера вечером программу то делал и 1 и 3, не помогло.
Как буду дома обязательно проверю и с 5.
FormatCft
Цитата(mempfis_ @ Oct 16 2008, 14:10) *
Когда писал вчера вечером программу то делал и 1 и 3, не помогло.
Как буду дома обязательно проверю и с 5.

CLK = Fpll/N
N =
0 - не известно что будет.
1 - это частота 280МГц.
2 - 140МГц.
3 - 93.3МГц.

Правильные значения начинаются с 4-5.
mempfis_
Цитата(FormatCft @ Oct 16 2008, 12:30) *
CLK = Fpll/N
N =
0 - не известно что будет.
1 - это частота 280МГц.
2 - 140МГц.
3 - 93.3МГц.

Правильные значения начинаются с 4-5.


07.gif
А я думал что CLK = Fosc*N/Div т.е. 12*6/(1 or 3 or 5)
Спасибо за подсказку. Вечером внимательнее почитаю документацию.
mempfis_
Цитата(FormatCft @ Oct 16 2008, 10:51) *
Частота 280МГц это слишком много.
А если попробовать CCLKDivValue сделать равным 5?
По идее если плл включится, то с такой частотой у процессора должна крыша съехать (отладчик вываливается).


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

А не пробовали со стандартным startup сначала поработать?
В этом есть плюс: если в этом случае заработает, то можно будет проанализировать где у вас ошибка (и с радостью сообщите нам).
А если не заработает, значит, что-то с камнем не то (что, как мне кажется, маловероятно).
mempfis_
Цитата(FormatCft @ Oct 17 2008, 02:16) *
А не пробовали со стандартным startup сначала поработать?
В этом есть плюс: если в этом случае заработает, то можно будет проанализировать где у вас ошибка (и с радостью сообщите нам).
А если не заработает, значит, что-то с камнем не то (что, как мне кажется, маловероятно).


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

Пробовал с последним кейлом всё без проблем. А вот переходить на иар из-за такого пустяка смысла, мне кажется, нет smile.gif
mempfis_
Цитата(FormatCft @ Oct 17 2008, 22:07) *
Пробовал с последним кейлом всё без проблем. А вот переходить на иар из-за такого пустяка смысла, мне кажется, нет smile.gif


Создал в новом Keil новый проект и тоже получилось запустить процессор smile.gif
Пока точно не знаю на какой частоте работает процессор и GPIO, но главное что всё работает от PLL.
Потом разберусь с делителями частоты для перефирии smile.gif
Видно в этих новых процессорах есть чтото такое чего не знают старые компиляторы smile.gif

P.S. Вы говорили что у Вас в новом Keil тоже работает. А как у Вас обстоят дела с таблеткой от жадности? blush.gif Я пока не нашёл. Конечно пока 32К недостижимый лимит, но я планирую разбираться с USB (ради этого и брал отладочную плату), кто его знает как там вырастет код

P.P.S. На работе работаю в IAR для AVR так что со временем думаю перейду на IAR для ARM smile.gif
zltigo
Цитата(mempfis_ @ Oct 17 2008, 23:11) *
Видно в этих новых процессорах есть чтото такое чего не знают старые компиляторы smile.gif

Я Вас умоляю, не надо фантазировать... Я всю эту писанину не читал, но инициализируется все с полпинка - написал с листа и забыл.
DimaM
я новый камень еще не брал а со старыми 2378 и 2368 кайловская инициализация работает хорошо. ставил множитель 12. промежуточная частота 288 от 12 МГц, для нового думаю тоже должно идти 280
mempfis_
Цитата(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) задаванием элементарных с точки зрения профессионала вопросов считаю тему можно закрыть. Всем спасибо за участие smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.