void ?UART0_init(void)?? ?{ ?? ?????????unsigned short int fdiv;
?? ?????????PINSEL0 |= 0x00000005; ? ? ?// 设置I/O连接到UART0
?? ?????????U0LCR = 0x83; ? ? ? ? ? ? ? ? ? ? ?// DLAB = 1,串口参数设置 ? ? ? ? ? ? U0DLM = 0x00;? ? ? ? ? ? ? ? ? ?//115200 PCLK=30Mhz? 串口波特率计算 ?? ?????????U0DLL = 0x0F;? ? ?? ?????????U0FDR = 0xC1;
? ? ? ? ? ? U0LCR = 0x03;? ? ? ? ? ? ? ? ?// DLAB=0,禁止设置波特率
}
1,U0LCR寄存器,串口控制寄存器
????????? 0x83对应二进制0b10000011,即8位数据长度,Enable access to Divisor Latches。
?2,波特率设置
? ? ? ? ? ? U0DLM,?U0DLL如下:
? U0FCR?如下:
?
波特率计算公式
?
?波特率计算举例,PCLK以30MHz:
????????????U0DLM = 0x00;? ? ? ? ? //?? ?? ?????????U0DLL = 0x0F;? ? ? ? ?? ?? ?????????U0FDR = 0xC1;? ? ? ?//? 0b11000001 ;DIVADDVAL = 1;MULVAL = 0x0C;? ?
?UART0baudrate? ?=? (30000000 / 16 / ( 256 * 0 + 15) ) * 12 / (12 + 1) = 115384;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
|