2013-05-29 6 views
0

Я работаю с UART of lPC1788, так как я выполнил следующие настройки для PCLK as 12MHZ и скорости передачи данных как 115200, но пока я имитирую этот код, скорость передачи не назначается как 115200 или прибл.Установка скорости передачи для UART в LPC1788

uint32_t uart0_init() 
{ 

    LPC_SC->PCONP |=(1<<3);  //Enabling power/clock for UART0 
    LPC_IOCON->P0_2 = 1;   //Selecting fn. 001 for P0.2(U0_TXD) 
    LPC_IOCON->P0_3 = 1;   //Selecting fn. 001 for P0.3(U0_RXD) 
    LPC_UART0->LCR =(0x83);  //Selecting DLAB=1,1 stop bit,Parity bit and 8-bit character length 

    LPC_UART0->DLL = 0x04;   //For PCLK=12MHZ and baud rate as 115200,DLL=4(in dec.) 
    LPC_UART0->DLM = 0x00;   //For PCLK=12MHZ and baud rate as 115200,DLM=0(in dec.) 
    LPC_UART0->FDR =(0x85);  //DIVADDVAL=1(3:0) and MULVAL=2(7:4) in FDR calculated from the FRest value 
    LPC_UART0->LCR =(0x03);  //Disabling DLAB=0 
    LPC_UART0->FCR |=(7<<0);  //Enable FIFOEN,TXFIFORES and RXFIFORES in FCR(0,1,2) 

    LPC_UART0->FCR |=(0<<0);  //Disable FIFOEN,TXFIFORES and RXFIFORES in FCR(0,1,2) 

    //NVIC_EnableIRQ(UART0_IRQn); 

    //LPC_UART0->IER = IER_RBRIE | IER_THREIE | IER_RXIE; 

    return 1; 

} 

Для меня его приближались 384615, его полностью different.Is есть какие-либо расчеты нужно сделать, чтобы получить точную 115200 бод.

Пожалуйста, для меня ясно ..

+0

Вы изменили PLLClock? PCLKSEL составляет 12 МГц? Что такое CCLKSEL? – Gossamer

+0

Его 120Mhz и значение PCLKSEL по умолчанию - 0x02, поэтому полученное значение PCLK в окне делителя часов во время моделирования составляет 60 МГц. Поэтому могу ли я добавить LPC_SC-> PCLKSEL | = (1 << 3); –

ответ

0

Dont использовать UART инициализации для изменения настроек управления системой. Вы будете перезаписывать их в другом месте, если вы не будете осторожны. Создайте функцию sysInit и установите ее там. Установите разделитель на 10 (0x0a).

LPC_SC->PCLKSEL = 0x0A; 

Это разделит MCLK с 10, и вы получите 12MHz часы для периферийных устройств. После этого вам необходимо установить FDR и DLL для достижения скорости ~ 115200 бод.

+0

Привет, Gossamer, спасибо за вашу точку зрения, но в системе они использовали для разделения CCLK (120MHZ) с 0x02, и если я хочу получить 12MHZ, вам нужно очистить PCLKSEL_VAL в системном файле или выполнить операцию (|), поскольку я вышеупомянутое сообщение. Наконец, я получил значение PCLK 12MHZ, а UART0 отлично работает для меня со скоростью 115200 бод. –