Цитата(addi @ Mar 22 2011, 12:52)

Резонатор на 16 МГц
Необходимо сделать 72МГц частоту тактирования ядра и периферии
Микроконтролер LPC2387
Для достижения Fcclk=72MHz при Fosc=16MHz параметры PLL должны быть такие:
(при условии что используется USB)
Код
#define PLL_MValue 17 //(16MHz*18 = 288MHz)
#define PLL_NValue 0
#define CCLKDivValue 3 // 288/4=72MHz
#define USBCLKDivValue 5
Процедура инициализации PLL взята из примера и 1 в 1 как Ваша только без исправлений
CODE
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;
}
Процедура инициализации USART1, тоже взята из примера, работает в широком диапазоне baudrate
Код
//-------------------------------------------
//константа определена в target.h
#define Fcclk = 72000000
//-------------------------------------------
//-------------------------------------------
//параметры uart
#define CHL_5 (0ul<<0) //длина символа
#define CHL_6 (1ul<<0)
#define CHL_7 (2ul<<0)
#define CHL_8 (3ul<<0)
#define STOP_1 (0ul<<2) //кол-во стоповых бит
#define STOP_2 (1ul<<2)
#define PAR_OFF (0ul<<3) //контроль чётности
#define PAR_ON (1ul<<3)
#define DLC_ENA (1ul<<7) //разрешение доступа к Divisor Latch
//-------------------------------------------
void UART1_init( unsigned int baudrate )
{
//разрешаем переферийное питание uart3
PCONP |= (1ul<<4);
//определяем делитель тактовой частоты uart3
PCLKSEL0 |= (2ul<<8); //делитель на 2
//выбираем альтернативные ф-ии выводов
PINSEL4 |= (2ul<<0)|(2ul<<2); /* RxD1 and TxD1 */
unsigned int Fdiv;
U1LCR = DLC_ENA|STOP_1|CHL_8; /* 8 bits, no Parity, 1 Stop bit */
Fdiv = ( (Fcclk/2) / 16) / baudrate; /*baud rate */
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = STOP_1|CHL_8; /* 8 bits, no Parity, 1 Stop bit */
U1FCR = FIFO_LEV_0|RES_TX_FIFO|RES_RX_FIFO|FIFO_ENA; /* Enable and reset TX and RX FIFO. */
//инсталлируем обработчик прерываний
install_irq( UART1_INT, (void *)UART1_Handler, HIGHEST_PRIORITY );
U1IER = IER_RBR | IER_RLS; /* Enable UART0 interrupt */
}
По-поводу Fcclk процессора - разве в lpc23xx она не ограничена 60MHz?
Сам работаю с lpc2368 - читал доки там вроде такое ограничение.
Вот lpc24xx точно могут работать на 72MHz.