uart16550详细说明

一、介绍

uart16550 ip core异步串行通信IP连接高性能的微控制器总线AXI,并为异步串行通信提供了

控制接口。软核设计连接了axilite接口。

二、特性

1.axilite接口用于寄存器访问和数据传输

2.16650串口和16450串口的软件和硬件寄存器都是兼容的

3.默认的core配置参数:9600bps波特率,8bit数据+1bit停止位+无极性

4.实现所欲标准的串行接口协议:

-每个字符可以是5bit,7bit或者8bit

-odd,even,no parity检测和生成

-stop_bit:1bit,1.5bit,2bit;

-使用内部波特率生成,和使用独立的接收时钟xin来生成波特率

-modem控制功能

-优先级传输和接收,线状态,模式控制中断

-错误的起始bit检测和恢复

-线打断检测和生成

-内部loopback环回功能

-16个字符的传输FIFO和接收FIFO.

三、总体说明

1.uart16550的传输和接收是相互独立的

2.ip core有内部寄存器来监视状态和配置状态

3.中断是可以masked可屏蔽的,也是具有优先处理的;

4.ip core包含16bit可编程的baud-rate波特率生成;

5.16个字符长度的传输FIFO和接收FIFO

6.FIFO可以enable使用和disable关闭使用

四、接口

1.axilite接口:这个模块实现axilite slave接口用于寄存器访问和数据传输

2.串口控制:

rx控制:模块采样接收数据依据波特率来进行,并将采样的数据存在receive data fifo中;

tx控制:模块从传输FIFO中读取数据,然后通过tx接口将数据发送出去

波特率生成模块:这个模块生成可变的波特率,用于用户可编程

中断控制:ip core提供独立的中断使能和中断识别寄存器。如果中断使能,电平触发中断

生成。

接收线状态,接收有效的数据,字符超时,接收数据fifo为空,modem状态都会产生中断。

五、关键说明

1.uart16550的axilite在各种fpga芯片上能够跑的最大时钟频率不一样,但是大概range范围

为:fmax为120MHZ~220MHZ之间。

2.端口描述

ip2intc_irpt中断信号,设备产生的中断输出给微控制器中断输入或者系统的中断控制器输入

3.freeze冻结

这个信号是用于冻结uart串口。如果拉高,中断被disable,串口ip core内部状态机回到IDLE状态。

4.sin信号:serial data input传输数据输入,也就是rx;

5.sout信号:serial data output传输数据输出,也就是tx;

6.xin用于当使用外部时钟,用于生成波特率的参考时钟

六、寄存器空间

1.LCR寄存器的bit7管控寄存器空间的内部寄存器的访问权限

2.寄存器空间总共有8个寄存器地址,但是有好多个不同的寄存器使用同一个寄存器的地址;

-接收buffer寄存器和发送保持寄存器都是使用0x1000这个寄存器地址;divisor latch低字节寄存器使用的也是0x1000这个寄存器;

-0x10004这个寄存器有时候代表中断使能寄存器,有时候代表divisor latch寄存器的高位;

3.这些寄存器复用,说明这些寄存器不能同时使用,只能分时复用!!!!!!!!串口性能有影响!!!!!---------这个地方是这样的吗??答案不是的!!

注意:

  • 发送与接收寄存器独立

    根据16550 UART标准协议和Xilinx官方文档(如PG142),接收缓冲寄存器(RBR)和发送保持寄存器(THR)是物理上分离的寄存器 ,地址分别为Base Address + 0(RBR读)和Base Address + 0(THR写)。

    这种地址复用是通过读写操作方向区分的

    • 读操作 :访问Base Address + 0时,读取的是接收缓冲寄存器(RBR)的值。

    • 写操作 :向Base Address + 0写入时,数据会被存入发送保持寄存器(THR)。

      因此,硬件层面并不存在"共用一个寄存器"的情况。

七、时钟和复位

1.系统时钟

2.xin时钟

xin时钟是外部时钟驱动,xin时钟频率不能太高,这个时钟如果使用,用于设置波特率的;

3.复位

八、编程顺序

1.指定异步数据传输格式,data bits,极性,校验,停止位,

以及divisor latch访问权限;主要是配置LCR寄存器;

2.写中断使能寄存器,用于激活独立的中断;

3.写FIFO控制寄存器,写FIFO,清理FIFO,设置FIFO触发门限

4.写DLR寄存器,配置波特率分频

5.中断产生后写中断服务程序的处理。

九、两个官网使用案例

上述两个案例的区别,是一个使用系统时钟作为参考,来产生波特率,一个是利用xin来产生波特率。

相关推荐
不脱发的程序猿2 小时前
在超频单片机时,需要注意哪些稳定性问题?
单片机·嵌入式硬件
sword devil9002 小时前
STM32项目实战:ADC采集
stm32·单片机·嵌入式硬件
-liming-2 小时前
单片机设计_停车场车位管理系统(AT89C52、LCD1602)
单片机·嵌入式硬件·51单片机
不脱发的程序猿3 小时前
单片机超频怎么搞?
单片机·嵌入式硬件·单片机超频
Invinciblenuonuo4 小时前
STM32八股【9】-----volatile关键字
stm32·单片机·嵌入式硬件
深圳市青牛科技实业有限公司 小芋圆4 小时前
CS4334:一款高性能的立体声音频数模转换器
科技·嵌入式硬件·音视频·智能家居·新能源·工控主板
赵谨言4 小时前
基于单片机路灯自动控制仪仿真设计
经验分享·单片机·毕业设计
Joshua.X5 小时前
PWM讲解+STM32任意频率、占空比、脉宽生成函数介绍
stm32·单片机·嵌入式硬件·pwm·嵌入式开发·控制·嵌入式软件
YOYO--小天5 小时前
RK3588 ADB使用
linux·嵌入式硬件·adb