第3 节 异步串口 UART

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

具有 Avalon 接口的通用异步收发器( universal asynchronous receiver/transmitter——UART)内核实现了Altera FPGA片上的嵌入式系统和片外设备之间的串行的字符流传输的一种方法。UART内核实现了RS-232协议的定时,并且提供可调的波特率,奇偶校验位、停止和数据位,以及可选的RTS/CTS流控制信号。特性集是可配置的,允许设计者只实现特定系统的必要的功能。UART内核提供了寄存器映射的Avalon从接口,这样就允许Avalon主外设(如Nios II处理器)通过读/写数据和控制寄存器和UART内核通信。

UART内核在SOPC Builder中提供,并且可以很容易地集成到任意的SOPC Builder 生成的系统中。

7.3.1 UART 内核功能描述

UART 内核有两个部分对用户是可见的:

∙寄存器文件,通过Avalon从端口进行访问。

∙RS-232 信号,RXD、TXD、CTS和RTS。

1. Avalon从端口和寄存器

UART内核为寄存器提供一个Avalon从端口。 UART内核的用户接口包含6个16位的寄存器: control、status、rxdata、txdata、divisor和endofpacket。主外设,如Nios II 处理器,访问寄存器来控制内核,在串行的连接通道上传输数据。UART内核提供一个高电平有效的中断请求输出,当接收到新数据时或UART内核准备发送一个新的字符时,请求一个中断。

Avalon从端口能进行具有流控制的传输。UART内核可以和具有Avalon流控制的DMA外设联合使用,以实现自动的连续的数据传输,例如内核和存储器之间的传输。

2. RS-232 接口

UART内核实现RS-232异步发送和接收逻辑。UART内核通过TXD和RXD端口发送和接收串行的数据。大多数Altera FPGA系列的I/O缓存和RS-232 电平不相匹配,如果直接被来自RS-232连接器的信号驱动,可能会对UART内核造成损坏。为了和RS-232 电压信令规范匹配,在FPGA I/O管脚和外部的RS-232连接器之间加入一个外部的电压转换缓冲器,比如Maxim MAX3237。UART内核使用负逻辑,FPGA内的变极器可以用来翻转任何RS-232信号的极性。

3. 发送器逻辑

UART发生器包含一个7、8、或9位的txdata保持寄存器,和一个相应的7、8或9位的发送移位寄存器。Avalon主外设通过Avalon从端口写txdata保持寄存器。当没有串行的发送移位操作在进行,发送移位寄存器自动装载txdata寄存器。发送移位寄存器直接提供TXD输出。数据最低有效位最先移出到TXD。以上的两个寄存器提供双重的缓冲。当主外设之前写入的数据正在被从发送移位寄存器移出时,主外设可以写入txdata寄存器一个新的数据。通过读状态寄存器的发送器就绪位(trdy)、发送器移位寄存器为空位(tmt)和发送器溢出错误位(toe),发送器主外设可以监控发送器的状态。发送器逻辑按照RS-232规范的要求,在串行的TXD数据流中自动插入正确的开始位、停止位和奇偶校验位。

4. 接收器逻辑

UART接收器包含一个7、8或9位的接收器移位寄存器和一个相应的7、8或9位的保持寄存器rxdata。Avalon主外设通过Avalon从端口读rxdata保持寄存器。每当一个新字符被完整接收, rxdata保持寄存器自动装载移位寄存器的内容。以上的两个寄存器提供双重的缓冲。rxdata寄存器可以保存之前接收到的字符,当后续的字符正在移入接收器移位寄存器。

主外设通过读状态寄存器的读就绪位(rrdy)、接收器溢出错误位(roe)、间断检测位(brk)、奇偶校验错误位 (pe)和帧错误位(fe),来监控接收器状态。接收器逻辑按照RS-232的规范要求,在串行的RXD数据流中自动检测正确的开始、停止和奇偶校验位。接收器逻辑检查接收数据中的四种异常情况(帧错误、奇偶校验错误、接收器溢出错误和间断)。并且设置相应的状态寄存器位(fe, pe, roe, or brk)。

5. 波特率生成

UART内核内部波特率时钟来自Avalon时钟输入,内部波特率时钟通过时钟分频器产生。除数值来自下面两个值:

∙在系统生成时指定的一个常数值。

∙在divisor寄存器中存储的16位值。

divisor寄存器是一个可选的硬件特性,如果在系统生成时,没有使能divisor寄存器,除数值则是固定的,波特率就不能被改变了。

7.3.2 在 SOPC Builder 中实例化 UART

实例化UART在硬件上产生至少两个I/O端口,RXD输入和TXD输出。可选地,硬件也可能包括流控制信号,CTS输入和RTS输出。

下面讲述UART的配置

1. 波特率选项

UART内核可以实现RS-232连接的任何标准的波特率。波特率可以通过下面的两种方法进行配置:

∙固定的波特率—波特率在系统生成时被固定,并且不能通过Avalon从端口进行改变。

∙可变的波特率—基于存储在divisor寄存器中的时钟分频值,波特率可以改变。

主外设通过写入divisor寄存器新值来改变波特率。波特率设置决定着复位之后

默认的波特率。波特率选项提供标准的预置值(如 9600,57600, 115200bps),

用户也可以手动输入任何的波特率值。波特率的值的用来计算适合的时钟除数

值。波特率和除数值之间的关系如下:

除数= int( (时钟频率)/(波特率) + 0.5 )

波特率= (时钟频率)/(除数 + 1)

在SOPC Builder中实例化UART时,如果选中了波特率可以通过软件改变的选项, UART 内核硬件上包含了一个16的divisor(除数)寄存器,该寄存器的地址偏移量为4。Divisor 寄存器是可写的,所以波特率可以通过写入该寄存器一个新值来进行改变。如果不选择这个选项,UART硬件则不包含divisor寄存器。UART硬件实现一个不变的波特率除数,这个值在系统生成之后就不能被改变了。此时,对地址偏移量为4的地址写操作没有任何结果,对该地址读操作返回一个未定义的结果。

2. 数据位、停止位、奇偶校验位

UART内核的奇偶校验位、数据位和停止位是可配置的。这些设置在系统生成时被确定,不能通过寄存器文件进行修改。下面的设置是可用的,见表7-5。

当奇偶校验(Parity)设置为None,发送逻辑发送没有奇偶校验位的数据,并且接收逻辑认为输入的数据也不含奇偶校验位。当奇偶校验设置为None,状态寄(status)存器

相关文档
最新文档