当前位置: 首页 > ds >正文

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来产生波特率。

http://www.xdnf.cn/news/6072.html

相关文章:

  • 使用虚拟机Linux写程序
  • 网站开发过程中样式忽然不显示问题
  • GOOSE协议publisher上传频率
  • Playwright 安装配置文件详解
  • 爆肝整理!软件测试面试题整理(项目+接口问题)
  • OpenCV特征处理全解析:从检测到匹配的完整指南
  • 二分查找算法的思路
  • linq中 List<T>.ForEach() 与 的 Select() 方法区别——CAD c#二次开发
  • HCIP实验(BGP联邦实验)
  • 21.three官方示例+编辑器+AI快速学习webgl_buffergeometry_selective_draw
  • Q1财报持续向好,腾讯音乐如何在不确定中寻找确定性?
  • 如何将两台虚拟机进行搭桥
  • 防重入或并发调用(C++)
  • C语言指针循环使用指南
  • Ansys 产品在Windows系统的卸载(2025R1版)
  • 【Redis】RedLock实现原理
  • 笔试强训(十七)
  • 12.1寸工业液晶屏M121XGV20-N10显示单元技术档案
  • 126.在 Vue 3 中使用 OpenLayers 实现绘制正方形、正三角形、正五边形
  • 使用PHP对接日本股票市场数据
  • 数据工具:数据同步工具、数据血缘工具全解析
  • Doris重建ROUTINE任务过程
  • vue3实现与不同的界面跳转【路由 vue-router】
  • WebGL入门:光照原理
  • binlog日志以及MySQL的数据同步
  • 项目三 - 任务5:清洗网址中垃圾字符
  • 电池自动点焊机:多领域电池制造的核心设备
  • UE5中制作动态数字Decal
  • ES6 语法
  • Rust 环境变量管理秘籍:从菜鸟到老鸟都爱的 dotenv 教程