基于ARM的嵌入式处理器和FPGA之间通信的实现

2018-02-14 22:15:50编辑:什么鱼 关键字:ARM  嵌入式处理器  FPGA

    1 前 言

    在ARMFPGA系统结构中,实现基于ARM的嵌入式处理器和FPGA之间通信最简单的方法就是通过异步串行接口EIARS232C。考虑选用集成有UART(Universal Asynchronous Receiver / TraNSmitter )控制器的嵌入式处理器(例如,EP7312),那么嵌入式处理器一侧就具有了利用异步串行接口收、发通信的能力。然而,FPGA内部并不拥有CPU控制单元,无法处理由UART控制器产生的中断,所以FPGA一侧不能利用现成的UART控制器构成异步串行接口,必须将UART控制器的功能集成到FPGA内部。

 

    同一个系统中的ARM与FPGA之间属于短距离通信连接,他们之间的异步串行通信并不需要完整的UART功能,那些RS232标准中的联络控制信号线可以省略,仅仅保留收、发数据线和地线,这样给UART功能的FPGA编程实现带来了极大的省略。嵌入式处理器EP7312带有2个支持异步串行通信RS232的16550类型的UART,UART1不仅有TX,RX,而且支持Modem控制信号,UART2只有标准的TX,RX以及地信号,刚好能够利用UART2与FPGA实现通 信。图1是简化的异步串行通信连接示意图。

    2 简化UART功能的FPGA实现

    本文将详细地讨论简化UART功能在FPGA中的实现方法。简单回顾一下异步串行通信的数据格式。图2表明在异步传送中串行发送一个数据字节的位定时关系(图中没有包括奇偶校验位)。发送一个完整的字节信息,首先是一个作为起始位的逻辑“0”位,接着是8个数据位,然后是1个、1+1/2个或2个停止位逻辑“1”位,数据线空闲时呈现为高或“1”状态。在字符的8位数据部分,先发送数据的最低位,最后发送最高位。每位持续的时间是固定的,由发送器本地时钟控制,每秒发送的数据位个数,即为“波特率”。起始位和停止位起着很重要的作用。显然,他们标志每个字符的开始和结束,但更重要的是他们使接收器能把他的局部时钟与每个新开始接收的字符再同步。异步通信没有可参照的时钟信号,发送器随时都可能发送数据,任何时沿的出现时间,从而正确地采样紧接着的10~11位(包括开始位、数据位和停止位)。接收器的时钟与发送器的时钟不是同一个,因此,接收器采样点的间隔跟由发送器时钟所确定的位间隔时间不同,接收器一定不能让他的相对时钟速度导致采样错误。

    比较而言,UART发送器部分发送串行数据过程的实现相对容易,只要对发送出去的数据电平做持续时间的定时即可。下面先对UART接收器部分的FPGA实现方法做详细的描述。

    2.1 UART接收器的FPGA实现

    根据以上的叙述,由于串行数据帧与接收时钟是异步的,所以接收器功能实现中的关键是接收器时钟与每个接收字符的同步。一个有效的方法是接收器采用高速率时钟对串行数据进行采样,通常采样频率是位时钟频率的整数倍。理论上倍数越高接收数据各位的分辨率越高,实际中,一般最大选择16倍。

    接收器应该尽可能地在靠近位周期的中心处对每位采样。如果接收器能很好地预测起始位的开始,那么他可在起始位的下降沿到来之后,等待半个位周期再采样数据位。此后,接收器每等待一个位周期采样一个数据位,直至收到最后一位为止。倘若接收时钟的频率足够接近发送时钟,使得最后位能在离该位的精确中心位置半个周期内对他采样,以上方案就能正确地工作。这意味着接收时钟相对于发送时钟在10~11个时钟周期内,其增加和减少应小于半个位的时间间隔。因此,要求收发双方2个时钟的误差容限在5%以内。

    本文中接收器的实现采取5倍速采样法,也就是接收采样频率是串行数据位频率的5倍。图3是将图2中的起始位和部分数据位放大,又把每个信息位分成5等份,每等份的时间宽度设为Ts。以5倍频对信息位进行采样时,每个信息位都将可能被采样到5次。当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0阴影区,每次具体的采样点会在S0阴影区随机变化。检测到起始位低电平后,间隔7×Ts时间,正好是第1位数据位的中间1/5处(图3中D2阴影区)。此后的数据位和停止位的采样间隔都是5×Ts,所有采样点均落在码元的中间1/5处,采样数据最可靠。采样时钟的产生由计数器控制,计数器时钟为位时钟5倍频。

    为了避免噪声引起的起始位检测错误,要对起始位采样两次。从空闲状态,第1次采样为低电平后,间隔2个Ts再采样一次,如果仍为低电平,才认定为有效的起始位;如果为高电平,再回到空闲状态等待重新同步。

    另外,在采样停止位的时候也可以加入保护机制: 当停止位采样值为高电平时,认为同步和数据正确,装人数据寄存器,否则认为同步或传输错误,此次采样的字符作废,将其舍弃。简化的UART功能框图如图4所示。EP7312所带的UART控制器16550中,FIFO的深度为16 B。实际FPGA实现时根据具体应用的不同,可以用RAM取代FIFO,本文只叙述图4中接收器和发送器的实现方法。

    在具体使用硬件描述语言VHDL编程实现时,接收器5倍速采样法的关键部分使用了一个状态机,状态转换图如图5所示。

    2.2 UART发送器的FPGA实现

    UART发送器的FPGA实现相对于接收器来说简单了很多。没有数据要发送时,发送数据寄存器为空,发送器处于空闲状态;当检测到发送数据寄存器满信号后,发送器即发送起始位,同时8个数据位被并行装入发送移位寄存器,停止位紧接着数据位指示数据帧结束。只有发送数据寄存器为空时,RAM或FIFO中的待发送数据才能被装入。程序中使用计数器保证各位周期定时正确,仍使用一个状态机描述发送过程,图6是发送器状态机状态转换示意图。

    3 仿真与结论

    这里选用ACTEL公司的APA600系列的FPGA芯片,仿真工具使用MENTOR公司的ModelSim。图7是接收器模块的功能仿真时序图,其中只截取了一个接收数据帧的时间长度。从图7中可以看出一个假起始位被正确判断,接收器与接收数据实现同步,串行数据被准确接收。状态机状态:i代表空闲;rx代表起始位确认;s代表数据采样和停止状态确认;g代表数据正确接收。

    图8是发送器模块功能仿真时序图,也是只截取了一个发送数据帧长。图8中状态机状态:first代表空闲;second(时间太短,图中未显示相应文字)和third代表发送数据和停止位。

    我们已经将上述实现简化UART功能的编程方法应用到了ARM+FPGA结构系统的编/拆和发送/接收串行信息帧模块中,工作稳定,有较高实用价值。

    参考文献

    1]张明峰.PIC单片机软件异步串行口实现技巧[J].单片机与嵌入式系统应用,2003,(4).

    2]Lattice Reference Designs .Universal asy - nchron - ous receiver/ tuansmitter .

    3]邬宽明.单片机外围器件实用手册数据传输接口器件分册[M].北京:北京航空航天大学出版社,1998.


关键字:ARM  嵌入式处理器  FPGA

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018021437800.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于嵌入式及无线通讯技术设计的远程无线供水测控系统
下一篇:基于ARM9 和Linux 的嵌入式视觉系统设计方案

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM学习之中断体系结构

CPU的“青睐”。还有一个皇后级别的中断源,叫做快速中断源。她比较牛X,只要请求,CPU就会“临幸”。(好似宫斗剧啊)。3.当发生中断后,具体我们该如何编程呢? 答:当一个异常发生时,这时ARM 的CPU将自动完成如下事情(要记住,是自动): (1)、lr寄存器保存目前指令的下一条指令地址。一般是(PC+4或PC+8) (2)、将CPSR的值复制到SPSR。 (3)、将CPSR的工作模式位设置为异常对应的工作模式。 (4)、转去执行此异常对应的向量表中的相应指令(并不只是中断处理函数)。对于我们来说,我们需要在异常向量表对应的地址处完成以下事情: (1)、保存运行的环境
发表于 2018-07-21 12:21:44

ARM学习之内存管理单元(MMU)

与映射表的一种机制(专业上叫页表)。虚拟地址到物理地址的映射。简单来说,CPU发出的虚拟地址,MMU通过查询这种映射表把这种虚拟地址转化为物理地址。在ARM体系中,用的有段(一级页表)、大页、小页、极小页(二级页表)等页表类型。4.运行地址和加载地址分别是什么意思,有什么区别? 答:在ARM中,当程序被烧写到FLASH中,用的就是加载地址。是烧写到FLASH中的某地址上。当程序运行时,程序所处的地址就是运行地址,也叫做链接地址。在烧写ARM裸板程序时,如果在链接时,不指定链接地址的话,程序的加载地址就是链接地址。当指定了某段的链接地址时,运行到此段时,此段必须处在所指定的链接地址上,否则可能会出现程序崩溃(其实,如果指定段中
发表于 2018-07-21 12:21:03

ARM学习之Nand FLash控制器

今天学习了Nand Flash的一些内容。在此做下回忆和总结:1.什么是Nand Flash? 答:Nand FLash是一种非易失性的存储性介质,一般用于保存嵌入式系统运行所必需的操作系统、应用程序、用户数据等,地位和PC上的硬盘类似。一般来说,它的接口引脚不像SDRAM那样多(SDRAM有20多根),一般也就是十几根。以三星公司的K9F1208U0M为例,如下所示。 正因为它的数据引脚较少,所以它的命令、地址、数据都是公用这一组IO引脚再配上ALE、CLE等其他使能信号进行传输的。操作Nand Flash(读、写、擦除)也和简单,基本上是按照传输命令、传输地址、最后读写数据这样一个流程实现的。这些命令在具体的
发表于 2018-07-21 12:19:08

ARM学习之时钟体系结构

今天在宿舍学习的是S3C2440的系统时钟体系,这部分的难点不是很多,所以相对来说轻松点,但还是把感悟记录下来吧。1.S3C2440的的时钟体系有哪些?它们分别有什么作用? 答:以前一直有个小疑问,你说,这CPU运行那么快,外部的设备运行的就比较慢,那它们的时钟源怎么匹配呢?哦,今天算是差不多弄清楚了。因为它们有不同的时钟源。就S3C2440来说, 它有三种时钟源: (1)FCLK:用于CPU核。 (2)HCLK:用于AHB总线上的设备,比如CPU核存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块等高性能的设备。 (3)PCLK:用于APB总线上的设备,比如WATCHD
发表于 2018-07-21 12:00:45

ARM裸机程序开发——按键控制LED灯

这几天将TQ2440上的IO控制引脚学习了一下,了解了一下关于引脚的一些寄存器的配置,熟悉了一下写ARM裸机程序的流程,写一下自己学到的东西。★程序启动初始化◇关闭看门狗有一个专门的寄存器来控制看门狗,看门狗的作用就是在一定的时间内会重新启动系统,这里我们只是写一个简单的逻辑程序用不到看门狗 ,将其关掉。设置WTCON寄存器,将其第5位置0,就可以禁用看门狗◇设置栈指针C语言中设置的变量,以及调用的函数等信息都会被存放在栈中,因此栈指针必须要设置◇调用main函数main函数中设置了关于IO寄存器的一些设置操作★TQ2440硬件相关硬件主要涉及到LED灯与GPIO,按键与GPIO之间的连接◇LED灯硬件   
发表于 2018-07-21 11:48:01

浅谈:如何基于国产CPU的云平台构建容器管理平台

,哇!阿里的!据工作人员介绍目前已有业务系统运行在基于华芯通CPU的云平台上,云平台就是ZStack。热心的工作人员带我去华芯通的专柜进行详细参观。看到实物那一刻,颠覆了我的想法,这个跟x86架构的服务器没什么区别啊!一直以为他是一个类似路由器这样的小盒子。没想到ARM服务器工艺已和x86服务器自造工艺无太大区别。国产云平台 ZStack作为国内为数不多的自研云平台,根据官网信息已发布基于国产CPU架构的版本,那么完全可以实现基于国产CPU架构来构建国产云平台。这架构图摘自他们的产品白皮书,从架构上看整个逻辑还是比较清晰,各组件依赖度并不高,不会因为管理控制节点故障而影响业务系统。经过仔细研究ZStack架构发现以下特点:全异
发表于 2018-07-16 10:43:01
浅谈:如何基于国产CPU的云平台构建容器管理平台

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved