2013-05-29 93 views
0

我正在使用UART of lPC1788,因爲我對PCLK as 12MHZ進行了以下設置,波特率設置爲115200,但是在模擬此代碼時,波特率未分配爲115200或約爲115200。LPC1788中UART的波特率設置

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是12Mhz?什麼是CCLKSEL? – Gossamer

+0

它的120Mhz和默認的PCLKSEL值是0x02,所以仿真時鐘分頻窗口中獲得的PCLK值爲60mhz。那麼我是否可以添加LPC_SC-> PCLKSEL | =(1 << 3); –

回答

0

不要使用uart init來更改系統控制設置。如果你不小心,你會在別處覆蓋它們。創建sysInit函數並將其設置在那裏。將分頻器設置爲10(0x0a)。

LPC_SC->PCLKSEL = 0x0A; 

這將劃分MCLK 10,您將獲得12MHz的時鐘外設。之後,您需要設置FDRDLL設置以實現〜115200波特。

+0

嗨Gossamer,謝謝你的觀點,但是在系統中他們曾經用0x02分割CCLK(120MHZ),如果我想得到12MHZ,那麼方法是清除系統文件中的PCLKSEL_VAL或者執行(|)操作如上所述。最後,我獲得了12MHZ的PCLK值,UART0對115200波特率的工作正常。 –