You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于xv6中uartinit函数38.4K波特率计算的技术问询

xv6中UART 38.4K波特率的计算逻辑

1. 16550 UART波特率发生器说明(翻译自官方文档)

可编程波特率发生器:16550包含一个可编程波特率发生器,可跟踪DC到8MHz的任意时钟输入,并将其除以1到2^16-1之间的任意除数。波特率发生器的输出频率(Baudout)等于传输波特率的16倍(Baudout = 16 × 波特率)。通过为波特率发生器的MSB和LSB选择合适的除数,可以实现自定义波特率。

2. 核心计算逻辑

xv6采用PC兼容系统的标准UART参考时钟:1.8432MHz(1843200Hz)。结合文档公式推导除数计算方式:
从文档给出的关系:
Baudout = 16 × 波特率
同时,波特率发生器的输出频率由时钟分频得到:
Baudout = 时钟频率 / 除数

将两个公式合并,得到除数的计算公式:
除数 = 时钟频率 / (16 × 波特率)

3. 38.4K波特率的具体计算

代入38400波特率和1.8432MHz时钟参数:

  • 16×波特率:16 × 38400 = 614400
  • 除数:1843200 / 614400 = 3

4. 对应xv6代码的实现

代码中通过以下步骤设置波特率:

  1. 写入LCR寄存器进入波特率锁存模式,此时寄存器0和1被映射为除数的LSB(低8位)和MSB(高8位)
  2. WriteReg(0, 0x03):设置除数低8位为3(0x03)
  3. WriteReg(1, 0x00):设置除数高8位为0(0x00)

最终得到16位除数0x0003(十进制3),与计算结果完全一致,从而实现38.4K波特率。

内容的提问来源于stack exchange,提问作者Yutong Song

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:48:23