此代码中将char输出到串行端口的值是12800么?

时间:2015-01-05 08:14:54

标签: c kernel

这是一个将char输出到串行控制台的示例代码:

#define COM1            0x3F8 // base port address

#define COM_LSR         5     // In:    Line Status Register

#define COM_LSR_TXRDY   0x20  //   Transmit buffer avail

static void
serial_putc(int c)
{
    int i;

    for (i = 0;
         !(inb(COM1 + COM_LSR) & COM_LSR_TXRDY) && i < 12800;
         i++)
        delay();

    outb(COM1 + COM_TX, c);
}

以上代码循环检查串口是否可用,如果可用,则发送一个字符c。但是,为什么选择的数字12800而不是任何其他数字?

3 个答案:

答案 0 :(得分:2)

串口设备支持的时钟速率,以每秒位数为单位。

答案 1 :(得分:2)

我非常怀疑这是波特率。这里似乎是轮询一个状态字来检查发送缓冲区何时可用(因此COM_LSR_TXRDY,发送就绪)。如果是,它会发送一个char。 12800只是等待时间的限制。如果它不在这里,问题可能导致无限循环。 12800可能是任意的,低到足以在出现问题时快速结束,但足够高以至少等待一个发送周期(这里它取决于波特率,但12800不是波特率)。这段代码在10000或20000时可能完全正常。

答案 2 :(得分:0)

相关问题