基于ZYNQ-7000系列串口中断控制器设计

说明:本次基于ZYNQ-7000系列的串口中断控制器设计主要实现通过PC机串口助手软件发送指令实现控制PS端LED的功能,整体设计不复杂,旨在于理解ZYNQ系列的串口控制器的原理以及用法,主要参考资料来自UG585官方文档。
相关理论

在ZYNQ7000系列器件中,UART控制器是一个全双工异步收发控制器,ZYNQ内部包含两个UART控制器,UART0和UART1。每一个UART控制器支持可编程的波特率发生器、64字节的接收FIFO和发送FIFO、产生中断、RXD和TXD信号的环回模式设置以及可配置的数据位长度、停止位和校验方式等。
在这里插入图片描述
由上图可知,UART控制器和IO端口由参考时钟(UART REF_CLK)驱动,同时控制器也需要连接APB总线时钟(CPU_1x clock),UART REF_CLK和CPU_1x clock都是来自于PS时钟子系统。UART控制器的配置以及状态的获取由控制(Control)和状态寄存器(Status Registers)完成。另外,UART控制器不仅可以连接至MIO,也可以映射到EMIO,从而使用PL的端口来实现串口通信的功能。当UART控制器连接到MIO时,只有Tx(发送)和Rx(接收)两个引脚;而当连接EMIO时,除Tx和Rx引脚外,可选的还有CTSN、DSDN、DSRN等引脚,这些引脚用于串口的流控制,即调制解调器的数据通讯中。UART控制器采用独立的接收和发送数据路径,每个路径包含一个64字节的FIFO,控制器对发送和接收FIFO中的数据进行串并转换操作。FIFO的中断标志支持轮询处理或中断驱动处理两种方式。另外,控制器中还有一个模式开关,支持 RXD 和 TXD 信号的各种环回配置。
在这里插入图片描述
UART控制器的寄存器通过APB从机接口和PS AXI总线互联,控制器的寄存器用于对UART控制器进行配置和获取状态。波特率发生器(Baud Rate Generator)为UART控制器的接收端和发送端提供位周期时钟;中断控制器(GIC)为串口的收发提供了中断服务的功能。APB总线接口通过向TxFIFO寄存器写值,将数据加载到TxFIFO存储器中。当数据加载至TxFIFO后,TxFIFO的空标志变成无效的状态,直到最后一个数据从TxFIFO中移出,加载至传输移位寄存器,TxFIFO恢复空的标志位。同时TxFIFO使用TFULL(满中断状态)用于表示当前TxFIFO已经写满,并且会阻止数据继续写入。如果此时继续执行写操作,那么会触发溢出,数据不会加载到TxFIFO中。RxFIFO存储器接收来自接收移位寄存器的数据,当接收完数据后,RxFIFO空标志信号同样变成无效的状态,直到所有的数据通过APB总线发送出去。RxFIFO的满标志状态用于表示RxFIFO已经写满,并且会阻止更多的数据写入。

在这里插入图片描述
对于串口的启动顺序,我们根据ug585指导手册可以总结如下:

  1. 复位控制器(在 PS 系统复位时);
  2. 配置IO引脚信号。RxD和TxD可以连接至MIO或者EMIO,只有EMIO可以使用串口的流控制。
  3. 配置UART参考时钟;
  4. 配置控制器功能(UART 控制器初始化);
  5. 配置中断,通过中断来管理RxFIFO和TxFIFO;
  6. 配置串口流控制(可选);
  7. 管理发送和接收的数据,可以采用轮询或中断驱动处理两种方式。

本次我们在设计中采用了串口的中断方式控制,通过PC端发送一个八位的数字,开发板接收数据并进行比较判别,然后选择点亮或熄灭PS端的LED灯,用这个设计来进一步理解串口控制器的工作原理。
在这里插入图片描述
在串口初始化函数中,我们初始化串口设备,并让串口设备进行自检,然后在设置串口的工作模式和相关参数,例如波特率、停止位、校验位等,另外我们还要设置中断的触发等级,它可选由1-63,即当RxFIFO或者TxFIFO中写入对应的字节数,便会触发中断。
在这里插入图片描述
在串口的中断系统初始化中,我们将串口中断服务函数连接到串口的中断控制器上,并使能中断控制器,设置串口的中断触发方式为RxFIFO触发。
经过编译与调试,我们采用单步仿真的方法确认了代码的逻辑没有问题,然后下载到开发板中进行测试,我们SDK软件下方的SDK Terminal窗口中连接上串口,下载验证成功。

PS:代码工程见资源附录
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值