我应该修改一个使用串行端口的 16 位程序集编写的应用程序。目标之一是支持 19200 波特的速度。我在 Internet 上阅读的大多数资源(例如this)都显示了使用 INT 14h 的方法。我基本上将一个幻数写入 al 寄存器,调用中断并(希望)设置端口。操作系统的系统调用应用程序用于设置串行端口正在使用相同的方法(如果需要,我可以随意修改它)。
这种方法的问题在于,设置速度的字段是 3 位字段,如果为 9600 波特,则为最大速度。如何使用更高的速度?
我应该修改一个使用串行端口的 16 位程序集编写的应用程序。目标之一是支持 19200 波特的速度。我在 Internet 上阅读的大多数资源(例如this)都显示了使用 INT 14h 的方法。我基本上将一个幻数写入 al 寄存器,调用中断并(希望)设置端口。操作系统的系统调用应用程序用于设置串行端口正在使用相同的方法(如果需要,我可以随意修改它)。
这种方法的问题在于,设置速度的字段是 3 位字段,如果为 9600 波特,则为最大速度。如何使用更高的速度?
我对 BIOS 功能不太熟悉,但是如果您对串行端口的底层UART芯片有更多了解,您很可能可以直接对其进行编程,绕过 BIOS 对它的支持。
例如,经典的16550 UART (可在此处找到数据表)支持高达 1 Mbps 左右,并使用两个 8 位寄存器来表示所需的时钟缩放。
这是有关如何做到这一点的参考文本,即对“除数锁存字节”进行编程以设置所需的波特率。从随附的代码中可以清楚地看出,对于基本 I/O 地址为 的 COM1 0x3f8
,您会在 处找到低位除数字节,在 处找到0x3f8
高位字节0x3f9
。