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

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.lryc.cn/news/2378849.html

相关文章:

  • deepin v23.1 音量自动静音问题解决
  • 抢跑「中央计算+区域控制」市场,芯驰科技高端智控MCU“芯”升级
  • 《算法导论(第4版)》阅读笔记:p82-p82
  • day015-进程管理
  • traceroute命令: -g与-i 参数
  • POWER BI添加自定义字体
  • SpringAI更新:废弃tools方法、正式支持DeepSeek!
  • 协议不兼容?Profinet转Modbus TCP网关让恒压供水系统通信0障碍
  • ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!
  • 全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
  • RAGFlow Arbitrary Account Takeover Vulnerability
  • Python 之 Flask 入门学习
  • 微服务,服务粒度多少合适
  • 【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新
  • 使用PocketFlow构建Web Search Agent
  • 安卓基础(Bitmap)
  • 记录:echarts实现tooltip的某个数据常显和恢复
  • 八股文--JVM(1)
  • 从RPA项目说说RPC和MQ的使用。
  • 【大模型面试每日一题】Day 21:对比Chain-of-Thought(CoT)与Self-Consistency在复杂推理任务中的优劣
  • UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍
  • Vue3——父子组件通信
  • 游戏引擎学习第276天:调整身体动画
  • 从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
  • Mipsel固件Fuzzing小记
  • 本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能
  • 关于此站点更改通知.top域名后期将统一更换为snowytime.cn访问,其余top访问进入过渡期
  • 使用python进行人员轨迹跟踪
  • 强化学习入门:马尔科夫奖励过程二
  • JVM 双亲委派机制