基于FPGA的UARTl6550的设计
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是用于控制CPU与串行设备通信的芯片,将由CPU传送过来的并行数据转换为输出的串行数据流。将系统外部来的串行数据转换为字节,供系统内部使用并行数据的器件使用。他可以在输出的串行数据流中加人奇偶校验位和启停标记,并对从外部接收的数据流进行奇偶校验以及删除启停标记。常见UART主要有INS8250,PC16450和PCI6550,其中16550发送和接收都带有16 B的FIFO,为协调发送、接收端的速率匹配提供了更大的缓冲余地,同时也可以提高CPU的使用效率,从而提高系统的整体性能。
2 UART16550的基本结构
如图1所示,UART16550的基本结构由CPU接口模块、波特率发生器、FIFO控制器、发送/接收FIFO和发送/接收模块共7个部分组成。
CPU通过UART的CPU接口模块配置整个UART,波特率发生器在CPU写入初始值后产生需要的波特率,控制发送和接收模块在设定的波特率下工作。CPU通过接口模块向发送FIFO内写入需
UART16550的发送数据位可以选择为5~8位,同时可以选择奇校验、偶校验或者不设置校验位,停止位可以约定为1,1.5或2位。
3 UART16550的设计实现
3.1 CPU接口模块
CPU接口模块完成了CPU指令的解读与寄存器配置以及UART状态读取等功能。通过3位的地址线和8位的数据线,CPU可以对波特率发生器的波特率进行预先的设定,以使串口两端的设备在同一波特率下完成接收和发送的工作。同时CPU接口接收来自CPU的需要发送的5∽8位数据,送人发送模块,或者把接收模块接收到的数据通过接口送给CPU进行数据处理。在此接口模块里,设置了8个控制和状态寄存器,包括RBR(Receiver Buffer Register)接收缓冲寄存器、THR(Transmit Hold Register)发送保持寄存器、IER(Interrupt Enable Register)中断使能寄存器、IIR(Interrupt ID Register)中断寄存器、LCR(Line Control Register)线控制寄存器、LSR(Line Status Register)线状态寄存器、SCR(Scratchpad Register)暂存寄存器和FCR(FIFO Control Register)。在使用UART16550前,CPU必须要对控制寄存器进行配置,包括波特率、数据位数、奇偶校验、停止位位数及FIFO的控制等。这也是16550区别于一般UART的具有可编程的特点。
3.2波特率发生器
波特率是单位时间内传送的二进制数据的位数,以位/秒(b/s)表示,也称为数据位率。
收/发时钟频率与波特率之间关系:
收/发时钟频率=N
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论