你看s3c2440芯片资料第352页
UART BAUD RATE DIVISOR REGISTER
There are three UART baud rate divisor registers including UBRDIV0, UBRDIV1 and UBRDIV2 in the UART
block.
The value stored in the baud rate divisor register (UBRDIVn), is used to determine the serial Tx/Rx clock rate
(baud rate) as follows:
UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
( UART clock: PCLK, FCLK/n or UEXTCLK )
译:该余毕值存储在波特率除数寄存誉毁昌器(UBRDIVn)中,用于确定串行Tx / Rx时钟频率 (波特率)
UBRDIVn很有意思吧 就是设置波特率的一个寄存器 比如要波特率位115200,但是不能直接把值115200放进去去 因为UBRDIVn就15位 最大最大就是32768 塞庆扒不下~
For example, if the baud-rate is 115200 bps and UART clock is 40 MHz, UBRDIVn is:
UBRDIVn = (int)(40000000 / (115200 x 16) ) -1
= (int)(21.7) -1 [round to the nearest whole number]
= 22 -1 = 21
通过已知的时钟和想要的波特率就可以算出UBRDIVn应该放多大的数值
至于为什么要*16 这应该是硬件规定的 别太较真朋友~
波特率需要通过源时钟主频除以一个分频除数(放神磨在UBRDIV)得到,避免该除数过大溢出,将游谈斗其缩侍笑小16倍,同时避免该除数为0,最好在取整之前加0.5,即向上取整
UBRDIVn=(取整)( 源时钟 / (波特率×16 )+0.5 ) -1
16倍的分频采样,所以要乘以16。
比特率时钟:每发送1bit所花费橡带的时间周期,他是波特率时钟的16倍。
波特率指的是每秒发送bit的数量,但是,器件发送1bit所梁穗芦需的时间是比特率时钟。所以要配置的过程实际上是将输入时钟分族谈频到满足目标波特率要求的比特率时钟。
但是我有一点不明白:为什么要减1?