您的当前位置:首页正文

lab308的TL16C550寄存器

2020-10-15 来源:易榕旅网
TL16C550有11个寄存器,通过A2~A0 和线路控制寄存器中的DLAB位对它们进行寻址。TL16C550的寄存器如下表所示: 寄存器 接收缓冲寄存器RBR 发送缓冲寄存器THR 中断始能寄存器IER 中断标志寄存器IIR FIFO 控制寄存器FCR 线路控制寄存器 LCR MODEM 控制寄存器MCR 线路状态寄存器 LSR MODEM 状态寄存器MSR 暂存寄存器SCR 低位除数寄存器DLL 低位除数寄存器DLM DLAB 0 0 0 X X X X X X X 1 1 A2 0 0 0 0 0 0 1 1 1 1 0 0 A1 0 0 0 1 1 1 0 0 1 1 0 0 A0 0 0 1 0 0 1 0 1 0 1 0 1 地址 00H 00H 01H 02H 02H 03H 04H 05H 06H 07H 00H 01H 操作 只读 只写 读/写 只读 只写 读/写 读/写 读/写 读/写 读/写 读/写 读/写

接收缓冲寄存器RBR和发送缓冲寄存器THR

共用同一个地址,一个发送一个接收;如果要发送,THR=some_char;如果要接收,some_char=RBR。嗯,还是很简单的。

中断始能寄存器IER

D7 D6 D5 D4 D3 EMSI D2 ELSI D1 ETHREI D0 ERDAI 0 0 : 接收中断禁止 1 : 接收中断使能

0 0 0 ERDAI: 接收中断使能

ETHREI: 发送中断使能 0 : 接收中断禁止 1 : 接收中断使能 ELSI : 接收错误中断使能 0 : 接收错误中断禁止 1 : 接收错误中断使能 EMSI : MODEM中断使能 0 : MODEM 中断禁止 1 : MODEM 中断使能

中断标志寄存器IIR(只读) 中断标志寄存器 D3 0 0 0 1 D2 0 1 1 1 D1 0 1 0 0 D0 1 0 0 0 优先级 --- 最高 第二 第二 中断类型 无中断 接收错误 接收 FIFO 超时 中断设置与清除 中断源 无中断 溢出,奇偶,帧错误 接收缓冲器中数据 FIFO 超时 中断清除 --- 读线路状态寄存器 读接受缓冲器 读接收缓冲器 0 0 0 0 1 0 0 0 第三 第四 发送 MODEM 发送保持寄存器空 MODEM 状态 写发送保持寄存器 读状态寄存器

FIFO 控制寄存器FCR(只写) D7 Receiver Trigger (MSB) 接收触发(MSB) D6 Receiver Trigger (LSB) 接收触发(LSB) 保留 保留 DMA模式选择 发送FIFO重置 接收FIFO重置 FIFO使能 D5 Reserved D4 Reserved D3 DMA Mode Select D2 Transmitter FIFO Reset D1 Receiver FIFO Reset D0 FIFO Enable 注:这个寄存器在我们的程序中没有使用,简单地刷成01H就可以了。但是FIFO的概念还是很重要的。

线路控制寄存器 LCR

D7 DLAB WLS1 0 0 1 1

0 1 0 1 D6 BREAK WLS0

D5 SPB D4 EPS D3 PEN D2 STB D1 WLS1 D0 WLS0 : 设置数据长度: : 5 位 : 6 位 : 7 位 : 8 位

STB : 设置停止位个数 0 : 一个停止位

1 : 1.5 个停止位(5 位数据长度时),2 个停止位(6,7,8 位数据长度时) PEN: 奇偶校验使能 0 : 奇偶校验无效 1 : 奇偶校验有效 EPS: 奇偶校验选择 0 : 奇校验 1 : 偶校验

DLAB: 寄存器访问选择 0 : 访问其余寄存器

1 : 访问除数和功能切换寄存器

MODEM 控制寄存器MCR D7 0 0 D6 0 0 D5 Autoflow Control Enable(AFE) 自动流控制使能 保留 输出2 输出1 D4 Loop D3 OUT2 D2 OUT1 D1 Request to Send (RTS) D0 Data Terminal Ready (DTR) 请求发送(RTS) 数据终端准备好(DTR) 注:MODEM控制寄存器MCR对于ICETEK电路板毫无意义,因为九针串口的CTS、RTS和DTR等引脚根本没有引出。但是为了防止出什么问题,在程序的开始我们还是要把MCR刷成00H,或者02H。

暂存寄存器SCR

D7 Bit 7 D6 Bit 6 D5 Bit 5 D4 Bit 4 D3 Bit 3 D2 Bit 2 D1 Bit 1 D0 Bit 0 The scratch register is an 8-bit register that is intended for the programmer’s use as a scratchpad in the sense that it temporarily holds the programmer’s data without affecting any other ACE operation.

暂存寄存器是一个8位寄存器,提供给编程人员在不影响其他任何ACE操作的情况下暂时保存数据。(希望翻译得基本没有错。)

注:ACE:ASYNCHRONOUS COMMUNICATIONS ELEMENT,异步串口通信单元,实际上指的就是TL16C550自身。

低位除数寄存器DLL和低位除数寄存器DLM

TL16C550 的波特率可通过除数寄存器DLM,DLL 来设置,除数寄存器值和波特率之间的换算公式如下:除数值=输入频率÷(波特率×16),16C550 的输入频率为:3.6864MHz,波特率和除数之间的关系如表所示:

波特率 1200 2400 4800 9600 19200 38400 高位除数寄存器DLM 00H 00H 00H 00H 00H 00H 低位除数寄存器DLL C0H 60H 30H 18H 0CH 06H

因篇幅问题不能全部显示,请点此查看更多更全内容