我在LPC2148微控制器中使用UART。我无法找到任何寄存器来设置UART的时钟频率。是否有任何寄存器来设置时钟频率?
答案 0 :(得分:0)
参考文献中描述的“快速而肮脏”的方法是:
U0DLL =以赫兹为单位的PCLK /(16 * desired_baud_rate)
这是一个简化的等式;其他人可以通过调整各种寄存器来微调串行波特率来进行调整。
来自同一参考:
现在,如前所述。 2 - 为了在60Mhz PCLK下获得9600(实际为9605)波特,我们必须使用以下设置进行波特率生成:
U0DLL = 110; U0DLM = 1; MULVAL = 15; DIVADDVAL = 0 (您可以将这些值转换为Hex =或= direclty以十进制形式使用它) 现在,让我们创建一个名为“InitUART0()”的函数,它将根据需要配置和初始化UART0:
void InitUART0(void)
{
PINSEL0 = 0x5; /* Select TxD for P0.0 and RxD for P0.1 */
U0LCR = 3 | (1<<7) ; /* 8 bits, no Parity, 1 Stop bit | DLAB set to 1 */
U0DLL = 110;
U0DLM = 1;
U0FDR = (MULVAL<<4) | DIVADDVAL; /* MULVAL=15(bits - 7:4) , DIVADDVAL=0(bits - 3:0) */
U0LCR &= 0x0F; // Set DLAB=0 to lock MULVAL and DIVADDVAL
//BaudRate is now ~9600 and we are ready for UART communication!
}