RS232接口规范及编程资料(上)
(1)RS-232C介绍与PC硬件:
RS-232C使用-3到-25V表示数字“1”,使用3V到25V表示数字“0”,RS-232C在空闲时处于逻辑“1”状态,在开始传送时,首先产生一起始位,起始位为一个宽度的逻辑“0”,紧随其后为所要传送的数据,所要传送的数据有最低位开始依此送出,并以一个结束位标志该字节传送结束,结束位为一个宽度的逻辑“1”状态。
PC机一般使用8250或16550作为串行通讯的控制器,使用9针或25针的接插件将串行口的信号送出。该插座的信号定义如下:
DB-25 | DB-9 | 信号名称 | 方向 | 含 义 |
2 | 3 | TXD | 输出 | 数据发送端 |
3 | 2 | RXD | 输入 | 数据接收端 |
4 | 7 | RTS | 输出 | 请求发送(计算机要求发送数据) |
5 | 8 | CTS | 输入 | 清除发送(MODEM准备接收数据) |
6 | 6 | DSR | 输入 | 数据设备准备就绪 |
7 | 5 | SG | - | 信号地 |
8 | 1 | DCD | 输入 | 数据载波检测 |
20 | 4 | DTR | 输出 | 数据终端准备就绪(计算机) |
22 | 9 | RI | 输入 | 响铃指示 |
以上信号在通讯过程之中可能会被全部或部分使用,最简单的通讯仅需TXD及RXD及SG即可完成,其他的握手信号可以做适当处理或直接悬空,至于是否可以悬空这视乎你的通讯软件。比如说,如果使用DOS所提供的BIOS通讯驱动程序,那么,这些握手信号则需要做如下处理,因为BIOS的通讯驱动使用了这些信号。如果使用自己编写的串行驱动程序则可以完全不使用这些握手信号(详见下面有关章节)。
PC机一般使用8250或16550的作为串行通讯控制器,8250及16550的管脚排列如下:
8250(16550)的寄存器如下表所示:
基地址 | 读/写 | 寄存器缩写 | 注 释 |
0 | Write | - | 发送保持寄存器(DLAB=0) |
0 | Read | - | 接收数据寄存器(DLAB=0) |
0 | Read/Write | - | 波特率低八位(DLAB=1) |
1 | Read/Write | IER | 中断允许寄存器 |
1 | Read/Write | - | 波特率高八位(DLAB=1) |
2 | Read | IIR | 中断标识寄存器 |
2 | Write | FCR | FIFO控制寄存器 |
3 | Read/Write | LCR | 线路控制寄存器 |
4 | Read/Write | MCR | MODEM控制寄存器 |
5 | Read | LSR | 线路状态寄存器 |
6 | Read | MSR | MODEM状态寄存器 |
7 | Read/Write | - | Scratch Register |
PC机支持1-4个串行口,即COM1-COM4,其基地址在BIOS数据区0000:0400-0000:0406中描述,对应地址分别为3F8/2F8/3E8/2E8,COM1及COM3使用PC机中断4,COM2及COM4使用中断3。
在上表中,8250共有12个寄存器,使用了8个地址,其中部分寄存器共用一个地址,由DLAB=0/1来区分,在DLAB=1用于设定通讯所需的波特率。常用的波特率参数见下表:
速率(BPS) | 波特率高八位 | 波特率低八位 |
50 | 09h | 00h |
300 | 01h | 80h |
600 | 00h | C0h |
2400 | 00h | 30h |
4800 | 00h | 18h |
9600 | 00h | 0Ch |
19200 | 00h | 06h |
38400 | 00h | 03h |
57600 | 00h | 02h |
115200 | 00h | 01h |
以下几个表格为8250的寄存器的功能描述:
中断允许寄存器(IER):
位 | 注 释 |
7 | 未使用 |
6 | 未使用 |
5 | 进入低功耗模式(16750) |
4 | 进入睡眠模式(16750) |
3 | 允许MODEM状态中断 |
2 | 允许接收线路状态中断 |
1 | 允许发送保持器空中断 |
0 | 允许接收数据就绪中断 |
Bit0置1将允许接收到数据时产生中断,Bit1置1时允许发送保持寄存器空时产生中断,Bit2置1将在LSR变化时产生中断,相应的Bit3置位将在MSR变化时产生中断。
中断识别寄存器(IIR):
位 | 注 释 |
Bit6:7=00 | 无FIFO |
Bit6:7=01 | 允许FIFO,但不可用 |
Bit6:7=11 | 允许FIFO |
Bit5 | 允许64字节FIFO(16750) |
Bit4 | 未使用 |
Bit3 | 16550超时中断 |
Bit2:1=00 | MODEM状态中断(CTS/RI/DTR/DCD) |
Bit2:1=01 | 发送保持寄存器空中断 |
Bit2:1=10 | 接收数据就绪中断 |
Bit2:1=11 | 接收线路状态中断 |
Bit0=0 | 有中断产生 |
Bit0=1 | 无中断产生 |
IIR为只读寄存器,Bit6:7用来指示FIFO的状态,均为0时则无FIFO,此时为8250或16450芯片,为01时有FIFO但不可以使用,为11时FIFO有效并可以正常工作。Bit3用来指示超时中断(16550/16750)。
Bit0用来指示是否有中断发生,Bit1:2标识具体的中断类型,这些中断具有不同的优先级别,其中LSR中断级别最高,其次是数据就绪中断,然后是发送寄存器空中断,而MSR中断级别最低。
FIFO控制寄存器(FCR):
位 | 注 释 |
Bit7:6=00 | 1Byte产生中断 |
Bit7:6=01 | 4Byte产生中断 |
Bit7:6=10 | 8Byte产生中断 |
Bit7:6=11 | 14Byte产生中断 |
Bit5 | 允许64字节FIFO |
Bit4 | 未使用 |
Bit3 | DMA模式选择 |
Bit2 | 清除发送FIFO |
Bit1 | 清除接收FIFO |
Bit0 | 允许FIFO |
FCR可写但不可以读,该
RS232接口规范编程资 相关文章:
- RS232接口规范及编程资料(下)(12-12)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)