Приветствую!
Беру любой мелкий рабочий проект из примеров 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-файлы на демо-платы...