Уже сталкивался с подобной проблемой, но не было времени разбираться.
На чистом чипе LPC23xx, LPC24xx (или принудительно) запускается loader, который использует встроенный 4mhz RC и PLL.
Так вот на чистом чипе, например обычный IAR Flash loader виснет! Но если закоментарить полностью execUserFlashInit то все работает. (там как раз в начале отключение PLL).
Но даже если просто начать отлаживать программу в ОЗУ (прямо на новом чипе) то при отключении PLL чип виснет!
Выходил из этого так - просто записывал минимальную прогу (отключая execUserFlashInit), что бы чип не попадал в бутлоадер и PLL бы не инициализировался.
Код
__program_start:
__vector:
idle_loop:
NOP
B idle_loop
DC32 0,0,0,0
__vector_0x14:
DC32 0,0,0
Самое интересное что PLL отключается, когда источником клоков служит main osc и он подключен!
Код отключения стоит в самом начале программы! И вот если PLL был проиничен бутлоадером то виснет на PLLFEED = 0x55, а если чип работал на 72 Mhz от внешнего кварца и PLL - все отключается ( если холодный старт то игнорируется).
Код
if (PLLSTAT & (1 << 25)) {
PLLCON = 1; /* Enable PLL, disconnected */
PLLFEED = 0xaa;
PLLFEED = 0x55;
}
Iar FlashLoader тоже виснет как раз на
__writeMemory32(0x00000055, 0xE01FC08C, "Memory"); // PLLFEED = 0x55
при отключении PLL, если чип чистый и работает bootloader.
----------------------------------------
Похоже происходит из-за того что CCLKSEL=0x14 в бутлоадере и частота ядра становится 190 Khz т.е. просто JTAG отваливается на этой частоте.
Сообщение отредактировал KRS - Nov 18 2009, 15:55