外文翻译格式样本Word文档下载推荐.docx
《外文翻译格式样本Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《外文翻译格式样本Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
1.1Avalon-MM从属接口和寄存器
该UART的核提供了一个Avalon-MM从属接口到内部寄存器文件。
连接用户接口包含6个16位的寄存器:
控制,状态,rxdata,txdata,除数,endofpacket。
一个主控外设,如一个NiosII处理器,可以使寄存器通过串行连接来控制核和传输数据。
该UART的核提供了一个活跃的中断请求(IRQ)输出,当新的数据已收到或当核心准备传输另一字符时,可以要求一个中断,进一步的细节见8-20页“中断行为”。
Avalon-MM从属端口有能力随流量控制来转移。
该UART的核可用于连接直接存储器(DMA)外设与Avalon-MM流量控制来使连续数据传输自动化。
比如,UART的核和存储器之间。
见“计时器核心”篇章细节。
见“Avalon存储器映射接口规格”内容来了解Avalon-MM接口细节。
1.2RS-232接口
该UART的核实现了RS-232的异步传输和接收逻辑。
该UART的核通过TXD和RXD端口发送和接收串行数据。
大多数Altera的FPGA系列产品的输入/输出缓冲不符合RS-232的电压水平,如果由一个RS-232连接器的信号来直接驱动,将有可能受到损害。
为了遵守RS-232的电压信号规格,在FPGA的I/O引脚与外部RS-232连接器之间需要一个外部电平移动式缓冲(例如MaximMax3237)。
该UART的核使用逻辑0为标志,逻辑1为空间0。
必要的话,FPGA里面的逆变器可以用来扭转任何RS-232信号的极性。
1.3发射器的逻辑
该UART的发射器包含一个7位,8位或9位的txdata控制寄存器和一个相应的7位,8位或9位的发射移位寄存器。
Avalon-MM主控外设通过Avalon-MM从属端口来写入txdata控制寄存器。
当一个串行发射移位操作当前没有进展时,发射移位寄存器自动从txdata寄存器上载入。
发射移位寄存器直接提供TXD输出。
数据以最低有效位元(LSB)开头,转移出TXD脚发送。
这两个寄存器提供双重缓冲,当先前被写入的字符转移出时,一个主控外设可以将一个新的数值写入txdata寄存器。
该主控外设可以通过读状态寄存器的准备信号(trdy),发射器移位寄存器(tmt)以及发射器超支误差(toe)位来监测发射器状态。
发射器逻辑自动插入RS-232的规格要求的串行TXD数据流中开始,停止和奇偶位的正确数目。
1.4接收器的逻辑
该UART的接收器包括一个7位,8位,或9位接收器移位寄存器和相应7位,8位或9位rxdata控制寄存器。
Avalon-MM主控外设通过Avalon-MM从属端口来读rxdata控制寄存器。
每次新的字符完全被收到时,rxdata控制寄存器将自动从接收移位寄存器载入。
这两个寄存器提供双重缓冲。
当随后的字符被转移到接收移位寄存器后,rxdata寄存器可以保持先前收到的字符。
主控外设通过读状态寄存器的读就绪(rrdy),接收器超时误差(roe),间隔检测(brk),奇偶误差率(pe),以及帧误差(fe)位可以监测接收器的状态。
接收器逻辑自动检测RS-232的规格要求的串行RXD数据流中开始,停止和奇偶位的正确数目。
在接收的数据中,接受器逻辑检查四个特殊状态(帧误差,奇偶误差,接受超时误差,间隔),并设置相应的状态寄存器位(fe,pe,roe,brk)。
1.5波特率的产生
该UART核的内部波特率时钟是来自Avalon-MM时钟输入。
内部波特率时钟是由一个时钟分频器产生的。
该除数值可以来自下列情形之一:
■恒定值指定在系统生成时间
■16位值存放在除数寄存器
该除数寄存器是一个可选的硬件功能。
如果在系统生成时间它不生效,那么除数值固定,波特率不能改变。
2.设备和工具支持
该UART的核能够针对所有Altera的FPGA产品。
3.在SOPCBuilder中对核实例化
在硬件中对UART实例化为每个UART的核制造了至少有两个输入/输出端口:
一个RXD输入,一个TXD输出。
硬件可能包括流量控制信号,CTS输入和RTS输出,这是可选的。
设计者用MegaWizard接口在SOPCBuilder为UART的核配置了硬件功能集合。
以下各节描述可行的选择。
3.1配置设置
本节叙述配置设置。
3.1.1波特率选择
该UART的核能执行对于RS-232连接的任何标准的传输速率。
波特率可被两种方式之一配置:
■固定率:
波特率固定在系统生成时间,且不能通过Avalon-MM从属端口改变。
■可变率:
基于除数寄存器中保持的时钟分频器值,波特率可变。
主控外设通过向除数寄存器中写入新值来改变波特率。
波特率是基于Avalon-MM接口提供的时钟频率计算出来的。
在没有再生成的UART的核硬件情况下改变系统时钟频率将会导致不正确信号。
波特率(位)的设置
复位后波特率的设置决定了默认的波特率。
该波特率选项提供了标准的预设值(例如,9600、57600、115200bps),或者你可以手动输入任何波特率。
波特率值用来计算一个合适的时钟除数值以落实所期望的波特率。
波特率和除数值的关系如下:
除数=int((时钟频率)/(波特率)+0.5)
波特率=(时钟频率)/(除数+1)
波特率可以通过软件设置来改变。
当设置开启时,硬件包含一个16位除数寄存器,并且地址偏移为4。
因为除数寄存器是可写的,所以波特率可以通过向该寄存器写入一个新值来改变。
当设置关闭时,UART的硬件不包含除数寄存器。
UART硬件实行一个常数(不可改变)波特率除数,并且系统产生后,值不可改变。
在这种情况下,写入地址偏移4已无效。
从地址偏移4读入产生了一个未定的结果。
3.1.2数据位,停止位,奇偶校验位
该UART核的奇偶位,数据位和停止位是可配置的。
这些设置固定在系统生成的时候,它们不能通过寄存器文件改变。
以下是可行的设置:
数据位设置
见表1。
表1数据位设置
设置
允许值
描述
数据位
7,8,9
该设置决定了txdata,rxdata和endofpacket寄存器的宽度。
停止位
1,2
该设置决定了核随着字符传输一个还是两个停止位,不论停止位如何设置,核总是在第一个停止位终止接收活动,而忽略接下来所有的停止位。
奇偶校验
无,偶数,奇数
该设置决定了UART传输字符时是否有奇偶校验,UART是否希望收到的字符有奇偶校验。
见下文进一步的细节。
奇偶设置
当奇偶设置为无,传输逻辑传送数据,而无需包括一个校验位,并且接收逻辑假定传入数据不包括校验位。
当奇偶为无时,状态寄存器的pe(奇偶误差)位是无效的,总是为0。
当奇偶设置为奇数或偶数时,传输逻辑计算并插入所需的校验位到离开的TXD脚发送码流,并接收逻辑检查到来的RXD码流中的校验位。
如果接收器认定数据的奇偶位不正确,状态寄存器的奇偶误差设置为1。
当奇偶设置是偶数时,如果一个字符中含“1”的个数为偶数,那么奇偶位是0。
否则奇偶位为1。
同样的,当奇偶是奇数,如果一个字符中含“1”的个数为奇数,那么奇偶位为0。
3.1.3流量控制
以下是可用的流量控制方案。
包括CTS/RTS的引脚与控制寄存器位。
当此设置开启时,UART的硬件包括:
■CTS_N(逻辑负CTS)输入端口
■RTS_N(逻辑负RTS)输出端口
■状态寄存器中的CTS位
■状态寄存器中的DCTS位
■控制寄存器中的RTS位
■控制寄存器中的IDCTS位
基于这些硬件设施,Avalon-MM主控外设可检测CTS和传送RTS流量控制信号。
CTS输入和RTS输出端口直接同状态和控制寄存器的位相连,并没有直接影响到核的其它任何部分。
当包括CTS/RTS的引脚和控制寄存器位设置处于关闭状态时,核并不包括上面所列的硬件。
控制/状态位CTS,DCTS,IDCTS和RTS将无效,它们总是为0。
3.1.4Avalon-MM随着流量控制的转移(DMA)
该UART核的Avalon-MM接口有选择的使Avalon-MM随流量控制转移。
这就允许一个Avalon-MM主控外设只在UART核心准备接收另一个字符时写数据和只在核心有可用数据时读数据。
该UART核还可以有选择的包括endofpacket寄存器。
包括end-of-packet寄存器
当此设置开启时,UART的核包括:
■一个7位,8位或9位endofpacket寄存器地址偏移量为5。
数据宽度由数据位的设置决定。
■状态寄存器中的eop位
■控制寄存器中的ieop位
■Avalon-MM接口中的endofpacket信号,来支持数据随流量控制转移到系统中其他主控外设或从系统中其他主要外设转移出。
endofpacket(EOP)检测允许UART的核终止与Avalon-MM主控外设随着流量控制的数据交易。
EOP检测可以用一个DMA控制器。
比如,使一个UART自动将收到的字符写入存储器,直到到来的RXD流中遇到一个指定的字。
这个终止字符的值取决于endofpacket寄存器。
当endofpacket寄存器不能正常工作时,UART的核心将不包括上列的来源。
向endofpacket寄存器写入是无效的,读入则产生一个未定值。
3.2仿真设置
当UART的核的逻辑生成,仿真模型也会产生。
仿真模型提供的功能可以简化和加快使用UART核的仿真系统仿真设置的变化,从而不能影响硬件中UART的核的行为。
这些设置只是影响功能仿真。
比如,如何使用下列设置模拟NiosII系统,它涉及到AN351:
模拟NiosII嵌入式处理器设计。
3.2.1模拟rxd输入字符流
您可以输入字符流,只要模拟系统复位,它将会到达RXD端口被模拟。
该UART核的MegaWizard接口接收一个任意字符串,它后来被合并到UART仿真模型中。
复位端复位后,随着核能够接收新的数据,字符串会逐字的输入到RXD端口。
3.2.2编写互动窗口
在系统生成的时候,UART的核发生器可以产生ModelSim宏。
它使仿真期间与UART模型的通信便利。
以下方案可供选择:
创造ModelSim别名打开流输出窗口
创造ModelSim宏来打开一个可显示所有从TXD端口的输出的窗口。
创造ModelSim别名打开互动的激励窗口
创造一个ModelSim宏来打开一个为rxd端口接收激励的窗口,这个窗口可将打印在窗口上的任何字符发送给rxd端口。
3.2.3模拟发射器波特率
RS-232的传输速率往往慢于系统中的其他任何进程,模拟真正波特率的功能模型时,这是很少有用的。
例如,在传输速率为115200时,它通常需要几千个时钟周期来传输一个单一的字。
该UART的仿真模型有能力运行一半的时钟常数,这使得模拟UART用一半的系统时钟速度,可以转移一位,即约为每20个时钟周期一个字。
您可以选择下列情形之一的模拟发射器波特率:
■加速(使用除数=2):
仿真时,TXD脚每两个时钟周期发送一位。
■实际(使用真实波特率除数):
TXD脚以实际波特率传输,其值由除数寄存器决定。
4.硬件仿真考虑
当使用ModelSim模拟器时,仿真功能创造了方便的模拟Nios,NiosII或Excalibur处理器的系统。
每个处理器的文件编制记录了这些功能的建议用法。
其他用途也有可能,但将需要额外的用户努力,以创造一个定制的模拟过程。
仿真模型在UART核的高层HDL文件中被执行。
合成HDL在同一文件里被执行。
仿真的特点是采用了翻译开启和翻译关闭合成指令来执行,使某些路段的HDL代码对综合工具来说可见。
如果你是用Altera的推荐仿真程序,那么不编辑仿真指令。
如果你为自己定制的仿真流程改变了仿真指示,那么请注意SOPCBuilder在系统生成期间会改写现有文件。
采取防范措施确保你的修改不被覆盖。
关于NiosII处理器系统模拟UART的核的细节请看AN351:
模拟NiosII处理器的设计。
为详细了解在Nios的嵌入式处理器系统模拟UART的核AN189:
模拟Nios的嵌入式处理器的设计。
5.软件编程模型
以下章节描述UART的核的软件编程模型的建立,包括寄存器映射和软件声明来访问硬件。
对NiosII处理器的用户,Altera提供了硬件抽象层(HAL)系统库驱动器,它使你用ANSIC的标准库函数访问UART,如printf()和getchar()。
5.1HAL系统库支持
该Altera公司提供的驱动程序所执行的HAL字符模式的装置驱动器对NiosII系统来说,可以整合到HAL系统库。
HAL用户应通过熟悉的HAL的API和ANSIC的标准库来访问UART,而不是访问UART寄存器。
ioctl()的要求是指允许HAL用户控制硬件依赖性方面的UART。
注意:
如果你的程序使用HAL设备驱动器来访问UART硬件,对设备寄存器的直接访问将干扰驱动器的正确行为。
对NiosII处理器的用户来说,HAL系统库API提供了完全的UART核的功能。
NiosII程序把UART的核看作是一个字符模式装置,并通过使用ANSIC的标准库函数同时发送和接收数据。
该驱动支持在SOPCBuilder中有效的CTS/RTS控制信号,见8-11页“驱动器的选择:
快与小的执行”。
下面的代码显示了最简单可行的使用,印刷信息标准输出使用printf()。
在这个例子中,SOPCBuilder系统包含一个UART的核,并且HAL系统库已配置好,以使用这个装置来标准输出。
例如:
印刷字符到一个UART的核,作为标准输出
#include<
stdio.h>
intmain()
{
printf("
Helloworld.\n"
);
return0;
}
下面的代码显示了使用的标准库从UART装置读字符和向UART装置发送信息的过程。
在这个例子中,SOPCBuilder系统中包含一个SOPCBuilder的系统包含一个UART的核命名为uart1,它不一定作为标准输出设备被配置。
在这种情况下,程序对装置就像任何其他节点中的HAL文件系统一样。
发送和接收字符。
/*Asimpleprogramthatrecognizesthecharacters'
t'
and'
v'
*/
#include<
string.h>
intmain()
char*msg="
Detectedthecharacter'
.\n"
;
FILE*fp;
charprompt=0;
fp=fopen("
/dev/uart1"
"
r+"
//Openfileforreadingandwriting
if(fp)
while(prompt!
='
)
{//Loopuntilwereceivea'
.
prompt=getc(fp);
//GetacharacterfromtheUART.
if(prompt=='
{//Printamessageifcharacteris'
fwrite(msg,strlen(msg),1,fp);
fprintf(fp,"
ClosingtheUARTfile.\n"
fclose(fp);
return0;
该NiosII软件开发者的手册提供了完整的HAL系统库的详细情况。
5.2驱动器的选择:
快与小的执行
为容纳所需的不同类型的系统,UART的驱动提供了两种变体:
一种快速的版本和一个小型版本。
快速行为都将被默认使用。
无论是快速和小型驱动器完全支持C标准库函数和HAL的API。
快速驱动器是一个中断驱动的执行,当设备尚未准备好发送或接收时,它允许处理器执行其它任务。
因为UART的数据传输速率与处理器相比缓慢,快速的驱动器能给系统提供一个较大的执行优点,使系统在过渡期间可以执行其它任务。
小型驱动器是询问执行的,它在发送和接收每个字符之前要等待UART硬件。
有两种启动小轨迹的驱动器。
■为HAL系统库工程进行小轨迹设置。
这个选择也会影响系统中所有设备的设备驱动器。
■注明预处理选项
-DALTERA_AVALON_UART_SMALL。
如果你要用小型、询问执行的UART驱动器,你可用这一选项,但你不能影响其它设备的驱动器。
见NiosIIIDE的帮助系统详细了解如何设置性能及预选项。
如果CTS/RTS流量控制信号在硬件中被允许,那么快速驱动器可以自动使用它们,小型驱动器总是忽略它们。
5.3ioctl()运行
该UART的驱动支持ioctl()函数让基于HAL的程序要求装置的具体运行。
表2界定了UART驱动支持的操作要求。
表2UARTioctl()操作
请求
含义
TIOCEXCL
锁定设备以免额外的访问。
很难进一步的用open()访问设备直到这个文件描述器关闭或使用TIOCNXCLioctl请求来解除锁定。
为了让请求得以实现,这个设备没有其他存在的文件描述器。
ioctl“arg”参数将被忽略。
TIOCNXCL
解除对之前的额外访问的锁定。
详见上文内容。
额外的操作要求也只供快速驱动选择,如表3为使这些操作在你的程序中运行,你必须设置预选项。
-DALTERA_AVALON_UART_USE_IOCTL。
表3仅对快速驱动的可选UARTioctl()操作
TIOCMGET
通过填写输入termios
(1)结构的内容来返回设备的当前设置。
这个结构的指针作为ioctl“opt”参数的值。
TIOCMESET
根据输入termios结构
(1)里的值来设置设备的配置。
这个结构的指针作为ioctl“arg”参数的值。
注:
(1)termios结构是指newlibC标准库。
您可以在文件<
NiosIIEDSinstallpath>
/components/altera_hal/HAL/inc/sys/termios.h找到定义。
参考NiosII软件开发手册详细了解ioctl()函数。
5.4局限性
该HAL驱动程序用于UART的核,不支持endofpacket寄存器,见“寄存器变址”一章。
5.5软件文件
该UART的核伴随着以下软件文件。
这些文件确定了低层次的接口硬件,并提供有关的HAL驱动。
应用开发商不应该修改这些文件。
■altera_avalon_uart_regs.h-这个文件定义了核心的寄存器变址,提供了象征性常数,以访问低层次的硬件产品,该符号在此文件中使用的只有设备驱动程序的功能。
■altera_avalon_uart.h,altera_avalon_uart.c-这些文件为HAL系统库执行UART的核心的设备驱动。
5.6LegacySDK路径
该UART的核也为第一代Nios的处理器的LegacySDK路径所支持。
关于这些路径的细节参考“伴随第一代Nios的处理器的UART文件编制”。
为详细了解基于LegacySDK到HAL系统库API的升级程序,参考AN350:
NiosII处理器的升级Nios处理器系统。
5.7寄存器映射
程序员使用的针对第一代Nios处理器的HALAPI或LegacySDK从不通过寄存器直接访问UART核。
一般而言,寄存器变址只对程序员为核心作写设备驱动时有用。
Altera公司提供的HAL设备驱动程序可以直接访问设备寄存器。
如果你是写驱动程序,并且HAL驱动对同样设备有用,那么你的驱动将会与之产生冲突而运行失败。
表4是UART的核的寄存器变址,设备驱动控制并通过存储器映射同核心沟通。
表4UART核的寄存器映射
偏移
寄存器
读/写
说明/寄存器位
15…13
12
11
10
9
8
7
6
5
4
3
2
1
rxdata
RO
(1)
(2)
收到数据
txdata
WO
发送数据
Status(3)
RW
eop
cts
dcts
e
rrdy
trdy
tmt
toe
roe
brk
fe
pe
control
ieop
rts
idcts
trbk
ie
irrdy
itrdy
itmt
itoe
iroe
ibrk
ife
ipe
Divisor(4)
波特率除数
Endofpacket(4)
End-of-Packet值
(1)这些位均予以保留。
读操作返回了一个未定值,写为0。
(2)这些位可能或不可能存在,这取决于该数据宽度硬件的选择。
如果它们不存在,它们会读0,而写操作无效。
(3)写0到状态寄存器来清除dcts,e,toe,roe,brk,fe,pe位。
(4)这个寄存器可能或不可能存在,这取决于硬件配置选项,如果不存在,读返回一个未定值,而写无效。
一些寄存器和位是可选的,这些寄存器只有当它们在系统生成时被启用,它们才会存在于硬件中,可选的寄存器和位说明如下:
5.7.1rxdata寄存器
该rxdata寄存器通过rxd输入保持收到的数据。
当一个新的字符通过rxd输入完全收到时,它将被转移进rxdata寄存器,并且状态寄存器的rrdy位设置为1。
当读rxdata寄存器时,状态寄存器的rrdy位设置为0。
如果一个字符转入rxdata寄存器而rrdy位也已设定(即以前的字符不能恢复),那么将会发生接收器超时误差,并且状态寄存器的roe位设置为1。
不论以前的字符是否被读取,新的字符总是转移入rxdata寄