Пытаюсь запустить PLL LPC1756 от RTC (32кГц). Задача - получить 30мГц на CCLK. Код запуска приведен ниже.
На строчке CLKSRCSEL_bit.CLKSRC = 2; зависает все, в том числе и отваливается отладчик. Эта строчка переключает ядро на тактирование от часового кварца.
Все делаю по инструкции из User Manual'а. На Кварце - чистый синус размахом 169мВ.
Код
_DINT(); // disable interrupts
// 1. Disconnect PLL0 with one feed sequence if PLL0 is already connected.
PLL0CON_bit.PLLC = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 2. Disable PLL0 with one feed sequence.
PLL0CON_bit.PLLE = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 3. Change the CPU Clock Divider setting to speed up operation without PLL0, if desired.
CCLKCFG_bit.CCLKSEL = 3;
// 4. Write to the Clock Source Selection Control register to change the clock source if
// needed.
CLKSRCSEL_bit.CLKSRC = 2; // RTC is PLL clock source.
// 5. Write to the PLL0CFG and make it effective with one feed sequence. The PLL0CFG
// can only be updated when PLL0 is disabled.
PLL0CFG_bit.MSEL = 13733 - 1; // 30.0002 MHz
PLL0CFG_bit.NSEL = 3 - 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 6. Enable PLL0 with one feed sequence.
PLL0CON_bit.PLLE = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 7. Change the CPU Clock Divider setting for the operation with PLL0. It is critical to do
// this before connecting PLL0.
CCLKCFG = 10-1; // divide by 10
PCLKSEL0 = PCLKSEL1 = 0;
// 8. Wait for the PLL to achieve lock, 200 / FREF seconds when FREF is less than 400 kHz
GlobalTimeStart();
DelayMs( 200000UL/32768UL );
// 9. Connect PLL0 with one feed sequence.
PLL0CON_bit.PLLC = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
Может кто сталкивался? В чем у меня ошибка - в железе или аппаратуре?
//------------------------------------------------------------------------------------------------------------------------------------
Новости с фронта - запустил RTC. Работает прекрасно! Стало быть, 38кГц генератор исправен.