




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档-下载后可编辑基于FPGA的UART扩展总线设计和应用-设计应用摘要:现在嵌入式系统的功能越来越集合化,需要控制大量外设。外设模块普遍采用UART作为通信接口,但是通常处理器都会自带一个UART串口。实际应用中一个串口往往不够用,需要对系统进行扩展。本文所介绍的就是以FPGA为实现方式的UART扩展总线设备的逻辑设计以及相关的驱动程序的设计。
1引言
在嵌入式领域,由于UART具有操作简单、工作可靠、抗干扰强、传输距离远(组成485网络可以传输1,200米以上),设计人员普遍认为UART是从CPU或微控制器向系统的其他部分传输数据的方式,因此它们被大量地应用在工业、通信和家电控制等嵌入式领域。而通常处理器都会自带一个UART串口,实际应用中一个串口往往不够用,需要进行UART串口扩展。而本文在分析了片内总线技术和UART的工作原理的基础上了实现UART总线设备的设计,使主控芯片可以控制4~6个外围设备。
本文中的嵌入式系统由AT91ARM9200处理器、Linux操作系统和ALTERA公司的ACEX系列的EP1K所组成。
2EP1K的逻辑设计
设计所要实现的功能是AT91ARM9200处理器通过EP1K控制多个带有UART接口的外设。EP1K中包含了多个逻辑模块如图1所示,为了实现多个模块间的互联就需要片内总线的支持,而本文采用的是WISHBONE片内总线规范。
2.1WISHBONE总线设计
WISHBONE采用主从结构,也称之为SLAVE/MASTER结构。主单元MASTER是发起与从单元SLAVE之间的数据传输,MASTER和SLAVE通过握手协议来实现可靠通信的。
WISHBONE总线架构提供了四种不同的互联方式:点对点(Point-to-point)、数据流(Dataflow)、共享总线(Sharedbus)和交叉开关(Crossbarswitch)。为了实现单个MASTER和多个SLAVE的设计要求,同时要求总线结构占用较少的逻辑单元,所以采用了共享总线的互联方式。
共享总线应包括MASTER、SLAVE、INTERCON和SYSCON四个部分。MASTER和SLAVE是实现总线信号与IP核的信号转换,INTERCON用于MATER和Slave的信号互联,而SYSCON则提供稳定的时钟信号和复位信号。总线逻辑结构如图2所示,因为只有一个MASTER,设计时就省略了对总线使用权的总裁。MASTER的地址和数据总线分别与四个SLAVE相联,其它的控制信号也都是直接相连,而SLAVE的选通是通过stb信号实现。SLAVE的stb信号是由地址译码产生SLAVE选择信号s_sel、m_cyc和m_stb三个信号相与的结果。所选通的SLAVE将ack信号置1表明一个数据传输周期的正常结束并将数据锁存或发送到总线上,而err信号置1表示非正常结束,rty信号置1表示要求数据重发。
图2WISHBONE总线的逻辑结构图
总线的详细设计过程请参考WISHBONESoCArchitectureSpecification,RevisionB.3,而MASTER和SLAVE的设计可以参考OpenCores的网站上相关设计。
2.2UART的逻辑设计
UART的通信协议十分简单,以低电平作为起始位,高电平作为停止位,中间可传输5~8比特数据和1比特奇偶校验位,奇偶校验位的有无和数据比特的长度由通信双方约定。一帧数据传输完毕后可以继续传输下一帧数据,也可以继续保持为高电平,两帧之间保持高电平,持续时间可以任意长。
UART模块由SLAVE接口、波特率控制器、UART接收器和UART发送器构成。SLAVE接口是为了实现WISHBONE总线和功能模块之间的数据传输;UART发送器的用途是将准备输出的并行数据按照基本UART帧格式转为TXD信号串行输出;UART接收器接收RXD串行信号,并将其转化为并行数据,但串并转换的时钟同发送器一样处理,收发设备间的时钟是会累计的,会导致接收数据不正确,波特率控制器就是专门产生一个远远高于波特率的本地时钟信号对输入RXD不断采样,以不断地让接收器与发送器保持同步。
波特率控制器实际上就是一个简单的分频器。可以根据给定的系统时钟频率(晶振时钟)和要求的波特率算出波特率分频因子。已算出的波特率分频因子作为分频器的分频数。对于波特率发生器中的系数一般在FPGA实现时往往是固定的,但对于不同的实现,这个系数需要更改。波特率控制器产生的分频时钟,不是波特率时钟,而是波特率时钟的16倍,目的是为了在接收事实进行地采样,以提出异步的串行数据。
UART发送器由16个字节FIFO和信号发送器组成。FIFO主要是起到数据缓存的作用,信号发送器的部分由有限状态机实现的,实现伪代码如下:
case(状态机状态)空闲状态:if(FIFO中有数据)状态机跳转到FIFO读取状态;else状态机保持空闲状态;
FIFO读取状态:读取FIFO数据,保存到移位寄存器;状态机跳转到开始位状态;
开始位状态:时钟计数,发送开始位;计数结束后状态机跳转到数据位状态;
数据位状态:时钟计数,发送数据,移位寄存器移位;计数结束后
if(移位寄存器内数据发送完毕)
状态机跳转到停止位状态;
else
状态机跳转到数据位状态;
停止位状态:时钟计数,发送停止位;计数结束后状态机跳转到s_idle;
default:状态机复位到空闲状态;
endcase
UART接收器包括了16个字节FIFO、信号同步器和信号接收器三个部分。其中信号同步器则是为了解决串行数据帧和接收时钟是异步问题,其它两部分和UART发送器的中的功能相似,只是数据传送的方向相反。
3设备接口和驱动设计
3.1设备接口设计
AT91ARM9200芯片通过其静态存储控制器(SMC)控制EP1K,而静态存储控制器(SMC)是控制外部静态存储器或外设的访问。SMC可编程地址达512M字节。它有8个片选及一个26位地址总线。16位数据总线能配置与8位或16位外部器件连接。独立的读写控制信号允许存储器与外设直接连接。SMC支持不同的允许单时钟周期存储器访问的访问协议。它还提供外部等待请求能力。
因为EP1K内部设计使用的是8位数据总线和8位地址总线,所以AT91ARM9200芯片与EP1K相连的I/O端口为A[7:0],D[7:0],NRD和NWR0。然而EP1K内部采用的WISHBONE总线规范,其读写信号wb_we_o,高电平表示为写操作,低电平表示为读操作。所以需要将NRD和NWR0进行相应的信号转换。而D[7:0]为双向端口IO,所以在EP1K的设计中采用三态门的设计。
3.2设备驱动设计
AT91ARM9200上运行的是Linux操作系统,EP1K作为一个外接设备正常运行,就需要相应的linux驱动程序。我们将EP1K的看作一个普通的字符设备,其关键是如何实现两个不同工作频率的设备正确通信。而静态存储控制器(SMC)提供的多等待状态管理,只要根据具体时序对SMC片选寄存器进行设置就可以了。此例中的SMC同时还控制flash存储器、LCD液晶显示器和其它外设,所以使用片选寄存器7,EP1K的内部工作频率是6MHz,为了使读写同步,设置插入36个等待周期。具体代码如下:
其中at91_sys_write()函数在include/arch/hardware.h中,而且是在linux2.6内核中才出现的。
Linux的字符设备驱动分为设备初始化函数和设备卸载函数,并由内核宏module_init()和module_exit()行进管理。
设备初始化函数首先要做的事情就是获取一个或多个设备编号。linux2.6内核中提供了静态和动态分配。如果在已知所需设备编号情况下,静态分配不失为一种较好的工作方式,但是所选定的设备号若已分配给其它设备,就会造成冲突和麻烦。因此,建议采用动态分配方式获取设备号。
同时使用udev在/dev/下动态生成设备文件,这样就避免使用命令或脚本创建设备文件。管理类和类设备的相关内核函数:
structclass*class_create(structmodule*owner,constchar*name);
voidclass_destroy(structclass*cls);
structclass_device*class_device_create(structclass*cls,struct
class_device*parent,dev_tdevt,structdevice*device,constchar*fmt,...);
voidclass_device_destroy(structclass*cls,dev_tdevt);
注意,以上函数是2.6.13开始有的,在2.6.13之前,应当使用class_simple接口。
设备初始化函数随后的工作是建立字符设备,并将与具体字符设备的相关数据结构注册的设备中,如字符设备的文件操作接口file_operations。还有就是调用at91_sys_write()函数完成静态存储控制器(SMC)的寄存器配置和ioremap()函数完成设备地址到用户内存的映射。设备卸载函数的工作就恰恰相反,它包括了管理类,类设备和字符设备的销毁,映射内存和设备号的释放。
4结束语
本文的设计应用于一个远程自动抄表系统,该系统由用户电能表和抄表基站以及GSM模块等部分组成。抄表基站的AT91ARM9200处理器以静态存储
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中式餐饮的创新模式
- 汽车维修中心装修外包合同
- 高中信息技术必修教学设计-6.3 信息交流-教科版
- 建设高素质专业化教师队伍的策略及实施路径
- 地方高校转型的关键问题
- 地方高校教育质量保障机制的创新策略
- 装修工程合同范本2025年版7篇
- 二零二五年度商铺分租租赁期限调整合同
- 2025年度电工安全培训协议书:电工技能提升与安全意识培训合同
- 保险公司翻新拆除协议样本
- 防洪防汛安全知识教育课件
- 一年级科学石头
- 部编人教版八年级语文下册全册课件
- 2024电动汽车用锂离子动力电池包和系统电性能试验方法
- DZT 0447-2023 岩溶塌陷调查规范(1:50000)
- 新起点英语二年级下册全册教案
- 《红星照耀中国》整本书阅读教学设计-统编版语文八年级上册
- 【幼儿园户外体育活动材料投放的现状调查报告(定量论文)8700字】
- 洗煤厂安全规程培训
- 带状疱疹与带状疱疹后遗神经痛(HZ与PHN)
- JC-T 746-2023 混凝土瓦标准规范
评论
0/150
提交评论