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

 
 
> Keil 4. Ньюансы отладки с помощью MT-LINK, LPC23XX/LPC24XX
yurmala
сообщение Mar 4 2011, 06:32
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Приветствую!
Беру любой мелкий рабочий проект из примеров Keil для LPC23XX/LPC24XX где в коде идет конфигурация PLL.
Проекты рабочие - проверял заливая их на отладочные платы Olimex 2378/Olimex 2478. светодиоды мигают, все работает...
Есть JTAG адаптер MT-LINK.
Он настроен в Keil как J-link. В опциях установлен режим сброса "Hardware, halt after reset (normal)".

Если запускаю пошаговую отладку, то проект зависает в функции инициализации PLL.
Вот функция:
Код
void InitPLL(void)
{
    unsigned int MValue;
    unsigned int NValue;

    #define PLL_MVALUE          11                   // (12-1)
    #define PLL_NVALUE           0                   // (1-1)
    #define CCLK_DIV_VALUE       4

    
    if(rPLLSTAT & (1 << 25))                      // Если PLL подключен, отключаем его
     {
         rPLLCON  = 1;                            // PLLE(bit 0)= 1, PLLC(bit1) = 0  // Enable PLL, disconnected
         rPLLFEED = 0xaa; rPLLFEED = 0x55;        // Применение настроек регистров
     }
    rPLLCON    = 0;                               // Отключаем и запрещаем PLL
    rPLLFEED   = 0xaa; rPLLFEED = 0x55;              // Применение настроек регистров
    rSCS |= (1 << 5);                             // Активация main OSC
    while( !(rSCS & 0x40) );                      // Wait until main OSC is usable
    rCLKSRCSEL = 0x01;                            // Выбор главного кварца - 12Мгц в качестве источника для PLL

    rPLLCFG    = PLL_MVALUE | (PLL_NVALUE << 16); // Конфигурация кварца
    rPLLFEED   = 0xAA; rPLLFEED = 0x55;           // Применение изменений
    
    rPLLCON    = 1;                               // Отключаем но разрешаем PLL
    rPLLFEED   = 0xaa; rPLLFEED = 0x55;              // Применение настроек регистров

    rCCLKCFG   = CCLK_DIV_VALUE;                  // Set clock divider
    
    while ( ((rPLLSTAT & (1 << 26)) == 0) );       // Check lock bit status

    MValue     = rPLLSTAT & 0x00007FFF;
    NValue     = (rPLLSTAT & 0x00FF0000) >> 16;
    while((MValue != PLL_MVALUE) && ( NValue != PLL_NVALUE));
    rPLLCON    = 3;                               // Enable PLL and connect
    rPLLFEED   = 0xAA; rPLLFEED = 0x55;           // Применение изменений
    while(((rPLLSTAT & (1<<25)) == 0)) {;}        // Check connect bit status

    return;
}


При пошаговом хождении по функции вижу (в окне с данными PLL) что команды PLLFEED не имеют эффекта (в регистре PLLSTAT остается 0 и выходные частоты не меняются)

И в конечном итоге отладка зависает на цикле
Код
    while ( ((rPLLSTAT & (1 << 26)) == 0) );       // Check lock bit status


Может как-то нужно хитро настроить JTAG?

добавлю, что в остальном работа с MT-LINK идет без проблем - отлаживал таймеры, GPIO. Заливал HEX-файлы на демо-платы...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
addi
сообщение Oct 21 2011, 18:49
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 679
Регистрация: 9-08-06
Пользователь №: 19 422



Цитата(yurmala @ Mar 4 2011, 10:32) *
Приветствую!
Беру любой мелкий рабочий проект из примеров Keil для LPC23XX/LPC24XX где в коде идет конфигурация PLL.
Проекты рабочие - проверял заливая их на отладочные платы Olimex 2378/Olimex 2478. светодиоды мигают, все работает...
Есть JTAG адаптер MT-LINK.
Он настроен в Keil как J-link. В опциях установлен режим сброса "Hardware, halt after reset (normal)".

Если запускаю пошаговую отладку, то проект зависает в функции инициализации PLL.
Вот функция:
Код
void InitPLL(void)
{
    unsigned int MValue;
    unsigned int NValue;

    #define PLL_MVALUE          11                   // (12-1)
    #define PLL_NVALUE           0                   // (1-1)
    #define CCLK_DIV_VALUE       4

    
    if(rPLLSTAT & (1 << 25))                      // Если PLL подключен, отключаем его
     {
         rPLLCON  = 1;                            // PLLE(bit 0)= 1, PLLC(bit1) = 0  // Enable PLL, disconnected
         rPLLFEED = 0xaa; rPLLFEED = 0x55;        // Применение настроек регистров
     }
    rPLLCON    = 0;                               // Отключаем и запрещаем PLL
    rPLLFEED   = 0xaa; rPLLFEED = 0x55;              // Применение настроек регистров
    rSCS |= (1 << 5);                             // Активация main OSC
    while( !(rSCS & 0x40) );                      // Wait until main OSC is usable
    rCLKSRCSEL = 0x01;                            // Выбор главного кварца - 12Мгц в качестве источника для PLL

    rPLLCFG    = PLL_MVALUE | (PLL_NVALUE << 16); // Конфигурация кварца
    rPLLFEED   = 0xAA; rPLLFEED = 0x55;           // Применение изменений
    
    rPLLCON    = 1;                               // Отключаем но разрешаем PLL
    rPLLFEED   = 0xaa; rPLLFEED = 0x55;              // Применение настроек регистров

    rCCLKCFG   = CCLK_DIV_VALUE;                  // Set clock divider
    
    while ( ((rPLLSTAT & (1 << 26)) == 0) );       // Check lock bit status

    MValue     = rPLLSTAT & 0x00007FFF;
    NValue     = (rPLLSTAT & 0x00FF0000) >> 16;
    while((MValue != PLL_MVALUE) && ( NValue != PLL_NVALUE));
    rPLLCON    = 3;                               // Enable PLL and connect
    rPLLFEED   = 0xAA; rPLLFEED = 0x55;           // Применение изменений
    while(((rPLLSTAT & (1<<25)) == 0)) {;}        // Check connect bit status

    return;
}


При пошаговом хождении по функции вижу (в окне с данными PLL) что команды PLLFEED не имеют эффекта (в регистре PLLSTAT остается 0 и выходные частоты не меняются)

И в конечном итоге отладка зависает на цикле
Код
    while ( ((rPLLSTAT & (1 << 26)) == 0) );       // Check lock bit status


Может как-то нужно хитро настроить JTAG?

добавлю, что в остальном работа с MT-LINK идет без проблем - отлаживал таймеры, GPIO. Заливал HEX-файлы на демо-платы...

точно такая же ерунда

Код
void ConfigurePLL ( void )
{
unsigned int MValue, NValue;

  if ( PLLSTAT & (1 << 25) )
  {
    PLLCON = 1;     /* Enable PLL, disconnected */
    PLLFEED = 0xaa;
    PLLFEED = 0x55;
  }

  PLLCON = 0;       /* Disable PLL, disconnected */
  PLLFEED = 0xaa;
  PLLFEED = 0x55;

  SCS |= 0x20;      /* Enable main OSC */
  while( !(SCS & 0x40) ); /* Wait until main OSC is usable */

  CLKSRCSEL = 0x1;    /* select main OSC, 12MHz, as the PLL clock source */

  PLLCFG = PLL_MValue | (PLL_NValue << 16);
  PLLFEED = 0xaa;
  PLLFEED = 0x55;

  PLLCON = 1;       /* Enable PLL, disconnected */
  PLLFEED = 0xaa;
  PLLFEED = 0x55;

  CCLKCFG = CCLKDivValue; /* Set clock divider */
  #if USE_USB
    USBCLKCFG = USBCLKDivValue;   /* usbclk = 288 MHz/6 = 48 MHz */
  #endif

  while ( ((PLLSTAT & (1 << 26)) == 0) ); /* Check lock bit status */ ///  здесь стоим......

  MValue = PLLSTAT & 0x00007FFF;
  NValue = (PLLSTAT & 0x00FF0000) >> 16;
  while ((MValue != PLL_MValue) && ( NValue != PLL_NValue) );

  PLLCON = 3;       /* enable and connect */
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  while ( ((PLLSTAT & (1 << 25)) == 0) ); /* Check connect bit status */
  return;
}

только при этом ничего не работает, хочу просто посмотерть работоспособность простой программки

FIO0DIR0 |= 0x01; // P0[0] - output
FIO0PIN0 &= ~0x01; //output 0

на своем макете, в итоге на ножке постоянно третье состояние, хотя с ресетом все в порядке

Сообщение отредактировал addi - Oct 21 2011, 18:52
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 23:04
Рейтинг@Mail.ru


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