Есть плата от МТ. Все работает, тикает и мигает. Помогите разобраться с UART.
Подключаю PLL:
//Документ UM_LPC21XX_LPC22XX_2.pdf, стр.80 //Расчет PLL //Частота кварца - Fosc = 11,059200 МГц //Fcclk = 60 МГц //M = Fcclk / Fosc = 5,42 (=5) В соответствии с табл. в рег-р записываем - 4 //Fcclk = 11,059200 * 5 = 55,296 МГц //Fcco выбираем из интервала: 156МГц - 320МГц //Fcco = 156 МГц //P = 156 / (2*55,296)=1,41 (=2) В соответствии с табл. врег-р записываем 1. //Fcco = 2*2*55.96=223.84МГц
PLLCFG_bit.MSEL=4; PLLCFG_bit.PSEL=1; feed(); PLLCON_bit.PLLE=1; // Enable the PLL feed(); while(!(PLLSTAT & PLOCK)); // Wait for PLL to lock //Init MAM & Flash memory fetch MAMCR_bit.MODECTRL=2; MAMTIM_bit.CYCLES=4; VPBDIV_bit.VPBDIV=1;
Затем инициализирую UART: unsigned int divisor = getperipheralClockFreq() / (16 * baud); U0LCR_bit.DLAB=1; //Enable DLAB U0LCR_bit.WLS=3; //8 bits U0LCR_bit.SBS=1; //1 stop bit U0DLL = (divisor&0xFF);//LSB(divisor); U0DLM = ((divisor>>8)&0xFF);//MSB(divisor); U0LCR_bit.DLAB=0; //Disable DLAB PINSEL0 = PINSEL0 & ~0xF | 0x5;
Проблема в том, что когда работа без PLL - все работает, на компе с UART данные снимаю правильно. Как только пробую работать с PLL - UART выдает ошибки, вернее какую-то лобуду. Понимаю, что где-то в этих настройках (PLL или UART) я баг прописал. Но где не найду. Смотрел примеры и в даташите - так вроде все правильно. Да, то что регистры прописаны, как структуры - взял пример от IAR, там файл макросов есть - iolpc2129.h
|