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

 
 
> lpc2468 & PLL, инициализация PLL
mempfis_
сообщение Oct 16 2008, 07:36
Сообщение #1


Профессионал
*****

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



Добрый день. Подскажите как правильно завести 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) );

}
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 08:21
Рейтинг@Mail.ru


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