代码改变世界

串行端口地址及寄存器功能详细资料

2005-01-25 13:35  htc开发  阅读(894)  评论(0编辑  收藏  举报

PC机上,COM1COM2的地址是3F8~3FF 2F8~2FF,在这个范围内的每个地址都有不同的功能,这些功能分别通过寄存器来实现,读写这些寄存器就可以执行与串行端口相关的功能。而所谓的寄存器就是暂时存放信息的地方,这些被存放在此的信息是以位的形式存储,通常以8个位(一个字节)作为一个单位。读写这些寄存器地址的同时,也就是读取这些代表的状态或控制某些功能。

   

COM1

COM2

寄存器名称

简称

3F8

2F8

波特率分频器(低八位)

BDR

3F9

2F9

波特率分频器(高八位)

BDR

3F8

2F8

传送信息/接收信息寄存器

DR

3F9

2F9

中断启动寄存器

IER

3FA

2FA

中断辨识寄存器

IIR

3FB

2FB

传输线控制寄存器

LCR

3FC

2FC

调制解调器控制寄存器

MCR

3FD

2FD

传输线状态寄存器

LSR

3FE

2FE

调制解调器状态寄存器

MSR

上表中,3F83F92F82F9分别有两种功能,显然还需要其他寄存器的信号来加以区别。

在串行通信中,这一点是通过使用传输线控制寄存器(LCR)上的第7位来实现的。这个位被称为分频器锁存器存取位(Divistor Latch Access Bit,DLAB,DLAB0时,表示读写信息寄存器和中断启动寄存器;当DLAB1时,表示读写波特率分频器的内容。

以下是各寄存器的说明:

l        BDR:设置使用串行通信的传输速度。

串口波特率和数据格式的设置:

首先向LCR(传输线控制寄存器)的高位写入1(即DLAB1),然后再设置波特率:在基地址和基地址+1的地方写入的数据为1843200/16*波特率)。然后设置LCR,最后设置Modem控制寄存器和中断允许寄存器。波特率数值=1843200/16*波特率)(十进制,可转化为十六进制)

outportb(0x3fb,0x80); LCR的最高位置‘1',是说明以下为输入波特率因子

outportb(0x3f8,0x0c); //outportb(0x3f8+0,0x0C)输入波特率因子的低8/9600

outportb(0x3f9,0x00); //outportb(0x3f8+1,0x00) 输入波特率因子的高8

l        DR  先令DLAB0,再读取3F8就等于读取被传送到COM1的信息。若将信息写入3F8,则信息会被放入传送寄存器中,并被芯片内的移位寄存器一位接着一位地送出去。

l        IER  用来启动芯片中的4种中断,该位为1时表示该中断被启动。

         Bit0:接收的信息有效中断启动。

         Bit1:传送器保持寄存器已空中断启动

         Bit2:接收器连接状态中断启动

         Bit3:调制解调器状态中断启动

         Bit4Bit7:永远为0

outportb(0x3f9,0x01); //启动中断,接收数据有效

l        IIR  通过读取此寄存器可以知道中断的产生是由谁所引发。

        Bit0:为0时表示尚有中断未处理;为1时表示无中断。

Bit2

Bit1

中断来源

0

0

调制解调器状态

0

1

传送器保存寄存器空着

1

0

接受信息为有效

1

1

连接控制状态

Bit3Bit7 :永远为0

outportb(0x3fa,0x07);  //表示处于连接控制状态

l        LCR  此寄存器定义传输信息的格式。各位的意义如下:

Bit0

Bit1

意义

0

0

字符长度为5个位

0

1

字符长度为6个位

1

0

字符长度为7个位

1

1

字符长度为8个位

Bit2:终止位。设为0表示使用1个终止位;设为1时有两种情况,字符长度为5时表示1.5个终止位,而字符长度不是5时则表示2个终止位。

Bit3:奇偶校验位启动。设为0时表示无奇偶校验位,设为1时表示使用奇偶校验位。

Bit4:奇偶校验方式选择。设为0时选择奇校验;设为1时选择偶校验。

Bit5:指定奇偶校验位的方式。设为0时表示不限制;设为1时,则选择奇校验时,奇偶校验位为1;选择偶校验时,奇偶校验位为0

Bit6:终止控制位。设为0时表示正常输出;设为1时则强迫输出0

Bit7:除法器轩锁位。设为0时表示存取信息寄存器;设为1时表示存取波特率分频器。

outportb(0x3fb,0x80); //LCR的最高位置‘1',是说明以下代码为输入波特率因子

l        MCR 用来控制调制解调器的接口信号。

         Bit0:设为1时,DTR脚位为LOW;设为0时,DTR脚位为HIGH

         Bit1:设为1时,DTS脚位为LOW;设为0时,RTS脚位为HIGH

         Bit2Bit3:用于控制芯片上的输出,新型芯片现已不用。

         Bit4::设为1时,芯片内部作自我诊断。

         其他位永远为0

outportb(0x3fc,0x0b);  //见上

l        LSR 表示信息传送过程种的各种状态。各位为1时表示该状态成立,为0时不成立

          Bit0:数据已接收完毕。(Data Ready

          Bit1:数据溢出错误。(Overrun Error

          Bit2:奇偶校验位错误。(Parity Error

          Bit3:信息框错误。(Framing Error

          Bit4:终止中断。(Break Interrupt

          Bit5:传送器保存寄存器空闲(Transmitter Holding Register Empty)。

          Bit6:传送移位寄存器空闲(Transmitter Shift Register Empty)。

          Bit7:永远为0

l        MSR 此寄存器高4位为调制解调器控制线目前状态;低4位在调制解调器有信号时被设为1,在被读取后会恢复为0

         Bit01时表示CTS信号改变

         Bit11时表示DSR信号改变

         Bit21时表示RI信号改变

         Bit31时表示DCD信号改变

         Bit4CTS信号的补码

         Bit5DSR的补码

         Bit6RI信号的补码

         Bit7DCD信号的补码。