




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
具有 Avalon 接口的通用异步收发器( universal asynchronous receiver/transmitterUART) 内核实现了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)存器pe(parity error)位没有实现,它总是读0。 当奇偶校验设置为Odd或Even时,发送逻辑计算和插入需要的奇偶校验位到输出的TXD比特流中,接收逻辑检查输入的RXD比特流中的奇偶校验位。如果接收器发现数据具有错误的奇偶校验, 状态寄存器的pe位设置为1。 当奇偶校验设置为Even, 如果字符具有偶数个1,奇偶校验位为0,否则奇偶校验位为1。类似地,奇偶校验设置为Odd,奇偶校验位为0,如果字符具有奇数个1。 3. 流控制 UART内核的设置有”Include CTS/RTS pins & control register bits”的选项。 如果选中这个选项,UART硬件包括 CTS_N (l负逻辑 CTS)输入端口。 RTS_N (负逻辑 RTS) 输出端口。 status寄存器的CTS 位。 status寄存器的DCTS位。 Control寄存器的RTS位。 control寄存器的IDCTS位。 基于这些硬件,Avalon主外设能够检测CTS和发送RTS 流控制信号。CTS输入和RTS输出端口直接连接到状态寄存器和控制寄存器的相应位上,对UART内核的其它部分没有直接的影响。 当Include CTS/RTS pins and control register bits 选项没有选中, UART内核在硬件上就包括上面所列的。控制/状态位CTS、DCTS、IDCTS和RTS都不进行实现。它们读总是0。 4. Avalon流控制传输(DMA) UART内核可选择实现具有流控制的Avalon传输。这样,只有当UART内核准备好接收新的字符时,Avalon主外设才写数据;只有当内核有可用的数据时,主外设才进行读数据。UART 内核也可以选择是否包含end-of-packet 寄存器。当选中Include end-of-packet register选项,UART内核包括:在偏移量为5的地址, 一个7、 8或9位的endofpacket寄存器。 数据宽度由Data Bits设置决定。 状态寄存器的eop位 控制寄存器的ieop位。 Avalon接口中的endofpacket信号, 以支持来自和去往系统中的主外设的具有流控制的数据传输。 End-of-packet (EOP)检测允许UART内核终止同具有流控制的主外设之间的数据传输。EOP检测可用于同DMA控制器一起使用,例如,实现UART自动写接收到的字符到存储器,直到在RXD数据流中遇到一个指定的字符。 终止(end of packet)字符值由endofpacket寄存器决定。当end-of-packet寄存器没有使能,UART内核不包括上面所列的资源。写endofpacket寄存器没有结果,读则返回一个未定义的值。 7.3.3 UART 寄存器描述 应用程序访问UART内核使用HAL API,不通过直接访问UART内核寄存器的方式。通常,寄存器映射只是对编写内核的驱动程序才有用。 表8-6显示HAL内核的寄存器映射, 设备驱动通过存储器映射寄存器控制内核和与内核通信。有些寄存器和寄存器位是可选的,这些寄存器和寄存器位只有当在系统生成时使能了,才能在硬件中存在。 1. Rxdata寄存器 Rxdata寄存器保存由RXD输入接收到的数据。当一个新的字符由RXD输入完全接收到,就被传输进入Rxdata寄存器,Status寄存器的rrdy(receive character ready)位置为1。当Rxdata 寄存器中的字符被读出后,Status寄存器的rrdy位置为0。在rrdy位为1时(即前面的数据还没有读出) , 又有字符输入到rxdata寄存器, 则发生接收溢出错误。 Status寄存器的roe (receiver overrun error) 位置为1。不管前一个字符是否已经被读出,新的字符总是被传输到Rxdata寄存器。写Rxdata寄存器无效。 2.Ttxdata寄存器 Avalon主外设将要发送的字符写入Txdata寄存器。直到发送器准备好发送一个新的字符时,字符才被写入Txdata寄存器,这由Status寄存器的TRDY位指示。当字符写入Txdata寄存器时,TRDY位置为0。当字符由Txdata寄存器传输到发生器移位寄存器之后,TRDY位置为 1。当TRDY为0时,写入字符到Txdata寄存器,结果是未定义的。读Txdata寄存器返回一个 未定义的值。 3. Status寄存器 Status寄存器每个单独的位反映UART内核的特定状态。 每个状态位是和control寄存器中相应的中断使能位相联系的。可以在任何时候读Status寄存器。读不会改变任何位的值。写0 到Status寄存器,将对DCTS、E、TOE、ROE、BRK、FE和PE位清零。 4. Control(控制)寄存器 Control寄存器包含控制UART内核操作的位, 每一位控制UART内核的一个方面。 Control 寄存器的值可以在任何时刻读取。Control寄存器的每一位使能状态寄存器中相应位的中断。当状态位和它的相应的中断使能位都是1时,内核产生一个中断请求。例如,状态寄存器的pe为0, 控制寄存器的ipe位为0。 当pe和ipe都为1是产生中断。 控制寄存器的位在表7-8中给出。 5. 除数(divisor)寄存器 (可选) Divisor寄存器用来产生波特率时钟,采用的波特率由下面的公式决定: Baud Rate = (Clock frequency) / (divisor + 1) Divisor寄存器是一个可选的硬件特性,如果Baud Rate Can Be Changed By Software硬件选项没有使能,divisor寄存器就不存在。这种情况下,写divisor没有任何结果,读divisor返回一个未定义的值。. 6. 包结束符(Endofpacket)寄存器(可选l) Endofpacket寄存器的值决定可变长度的DMA传输的包结束字符。复位之后,缺省的值是0,即是ASCII的null字符(0)。Endofpacket寄存器是一个可选的硬件特性。如果Include end-of-packet register硬件选项没有使能,则endofpacket寄存器就不存在。这种情况下,写endofpacket没有任何结果,读则返回一个未定义的值。. 7.3.4 中断行为 UART内核输出一个单独的中断请求(IRQ)信号给Avalon接口,这样就可以连接到系统中的主外设,如Nios II处理器。主外设必须读status寄存器以确定中断的原因。每一个中断情况,都同status寄存器中的一位和control寄存器中的一个中断使能位相联系。当任何一种中断情况发生,与之相关的状态位被置为1,直到中断请求被确认。当状态位和其相应的中断使能位为1时,产生IRQ输出。主外设可以清除的状态寄存器来确认IRQ。复位时,所有的中断使能位都设成0,所以,UART内核不能产生中断请求,直到主外设设置一个或多个中断使能位为1。 7.3.5 软件编程 对于Nios II处理器的使用者,Altera提供HAL系统库驱动程序,用户可以使用ANSI C标准库函数来访问UART内核,例如使用printf()和getchar()函数。 7.3.5.1 HAL 系统库支持 Altera提供的驱动程序实现了HAL字符模式设备驱动程序,字符模式设备的驱动程序集成到了Nios II 系统的HAL系统库中。HAL用户应该使用熟悉的HAL API和ANSI C标准库函数来访问UART,而不是通过访问UART寄存器的方式。HAL用户可以使用ioctl() 函数来控制UART硬件的相关方面。 对于Nios II处理器的用户,HAL系统库API提供完整的UART内核特性访问。Nios II编程将UART内核当成一个字符模式设备处理,使用ANSI C标准库函数进行发送和接收数据。驱动程序支持CTS/RTS控制信号。 下面的代码演示的是一个很简单的可能的使用,使用printf( )打印一条消息到标准输出设备。本例中,SOPC Builder系统包含一个UART内核,HAL系统库已经配置成使用UART作为标准输出(stdout)设备。 例程:打印字符到作为标准输出设备的UART内核 #include int main () printf(Hello world.n); return 0; 下面的代码演示了使用ANSI C 标准库函数从UART设备读字符和向UART设备发送消 息。 本例中, SOPC Builder系统包含一个UART内核uart1, 该设备没有必要配置成stdout设备。 这种情况下,程序处理该设备就像HAL文件系统中的其它节点一样。 例程:接收和发送字符 /* A simple program that recognizes the characters t and v */ #include #include int main () char* msg = Detected the character t.n; FILE* fp; char prompt = 0; fp = fopen (/dev/uart1, r+); /Open file for reading and writing if (fp) while (prompt != v) / Loop until we receive a v. prompt = getc(fp); / Get a character from the UART. if (prompt = t) / Print a message if character is t. fwrite (msg, strlen (msg), 1, fp); fprintf(fp, Closing the UART file.n); f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版初中历史与社会七年级上册 2.1 .1人类的栖息地说课稿
- 第三十三课 驱散嫉妒的阴云说课稿-2025-2026学年初中心理健康北师大版2013八年级下册-北师大版2013
- 化肥厂认证供应商评估规定
- 化肥厂供应商合同规定
- 2025餐饮管理系统合同协议书范本
- 第3课 快乐多多身体好教学设计-2023-2024学年小学地方、校本课程黑教版生命教育
- 棉花贸易代理合同协议
- 三年级英语下册 Unit 2 My family(The first period)第一课时说课稿 人教PEP
- 第三课第一框教学设计
- 5.1 根本政治制度 说课稿-2023-2024学年统编版道德与法治八年级下册
- 八年级上学期轴对称练习题
- 双姿培训课件
- GB/Z 41082.2-2023轮椅车第2部分:按GB/Z 18029.5测得的尺寸、质量和操作空间的典型值和推荐限制值
- 实施项目经理岗位的工作职责描述
- 医院物业服务投标方案
- 中频操作评分标准
- 生活中的理财原理知到章节答案智慧树2023年暨南大学
- GB/T 22588-2008闪光法测量热扩散系数或导热系数
- GB/T 22237-2008表面活性剂表面张力的测定
- GB/T 13298-1991金属显微组织检验方法
- 《绿色建筑概论》整套教学课件
评论
0/150
提交评论