ARM9与FPGA并口通信的实现

发布者:Joyful222Life最新更新时间:2018-06-07 来源: eefocus关键字:ARM9  FPGA  并口通信 手机看文章 扫描二维码
随时随地手机看文章

并口通信是最常用基础功能,实现ARM9与FPGA的并口通信有两种方式,一种颇为巧妙,利用SMC(Static Memory Controllor),其中的使能点都通过寄存器可以轻松控制;另一种方式就是通过GPIO来完成。

由于我拿到板子硬件的DRAM_CSN0、DRAM_WEN和DRAM_RDN在前期PCB设计时没有充分考虑过SMC可能被使用,故使用接插件上其他引脚进行代替,使用了图1中画圈的三根引脚SPI0_MOSI、SPI0_SCK、SPI0_CS。因为这三根引脚可以复用为GPIO,所以在并口调试中将这三根引脚当作GPIO来使用。

 

图1

 

图2

图3


表1

原SPI功能

GPIO

FPGA引脚

功能

SPI0_MOSI

PA1

W21

写使能

SPI0_SCK

PA2

W22

读使能

SPI0_CS

PA3

W20

片选

 

硬件连接对应情况如图2、图3和表1所示。到此,你应该已经了解了实现通信需要关注的引脚了吧。

 

工程步骤:


1      重设Pin Planner


根据当前硬件的实际连接情况,对Quartus中的Pin Planner进行更新,将信号i_rd_cpu、i_wr_cpu、i_select对应的location改为PIN_W22、PIN_W21、PIN_W20。如图4所示。


图4

 

2      对PIOA的寄存器组重新初始化


在最初的驱动程序中包括了对GPIO的初始化,经过试验观察PIO可读寄存器的内容发现寄存器的配置不能满足本任务的完成,使用已有的初始化会干扰到使能信号的操作,于是要对GPIO进行重新初始化,对寄存器进行配置。


2.1       PIO_PER寄存器

图5

该寄存器是用来启用PIOA各个引脚的GPIO模式,如图5所示,每一位都对应控制着一根GPIO管脚,通过给P1、P2、P3置1激活了PA1、PA2、PA3的GPIO模式,同时也等于关闭了复用外围A、B的模式。


 

2.2       PIO_OER寄存器

图6

该寄存器有默认的设置,观察发现最低4位默认为1100。本项目需要用到GPIO的输出模式,所以需要对该寄存器进行重新配置,给P1,P2,P3置1,开启引脚的输出功能。


2.3       PIO_PUDR寄存器

图7


通过观察PIO_PUSR寄存器可以发现默认的上拉寄存器是全部开启的,上拉寄存器的启用会影响GPIO的正常输出,所以通过PIO_PUDR寄存器将上拉寄存器关闭,为之后正常操控GPIO提供基础。


 数据的写入:


1       概况


PIO_SODR和PIO_CODR这两个寄存器可以将指定位的GPIO电平置1置0。由于这里设计的读写使能为低电平有效,在程序中首先将涉及的信号均拉高,相当于对信号进行一个复位。之后就可以进行数据的发送工作。

图8

图9

图8为连续发送0x1122,0x3344,0x5566等多个数据时的情况,在写使能的上升沿对数据总线和地址总线上的信息进行取样;图9中显示当写使能信号上升沿的时刻,数据总线上的信息为0x5566,地址总线上的信息为0x0005,即将0x5566存储到RAM的0x0005地址中。(上图SignalTap采样时钟为125MHz)

在一个发送周期中,经历以下过程:

0:地址总线上出现地址信息;

1:片选信号拉低;

2:写使能信号拉低;

3:数据放到数据总线上;

4:写使能拉高,同时在上升沿时刻对数据取样;

5:片选信号拉高。


 

在DATASHEET的SMC一章中有对并口的发送时序进行描述,当前实验结果也符合数据手册中通过SMC实现并口通信的说明,如图10、图11所示。可见,其实两种方式大同小异,实现的结果相同。


图10

图11


2       ARM中数据的发送


通过FPGA_WriteData函数完成数据的发送工作,其中使用了PIO寄存器中的PIO_CODR,PIO_SODR,PIO_ODSR三个寄存器,分别实现使能拉低,使能拉高,和标志位判断的功能。

#define WREG(x) (*((volatile unsigned short *)(x))) 语句中,(volatileunsigned short *)(x)将x定义为了一个地址指针,再通过*取内容,这样就可以将数据写到这个地址上,在之后的程序中只要直接调用WREG()就可以方便的向地址写数据。



3       FPGA中数据的存储




reg uprise_wr_dly;

always @(posedgei_clk,negedge i_rst_n)

begin

     if(!i_rst_n)

            uprise_wr_dly <= 1'b0;

     else

            uprise_wr_dly <= i_wr_cpu_pre;

end

 

 

reg wr;

always @(posedgei_clk,negedge i_rst_n)

begin

     if(!i_rst_n)

            wr <= 1'b0;

     else if((i_wr_cpu_pre == 1'b1) && (uprise_wr_dly ==1'b0))

            wr <= 1'b1;

     else

            wr <= wr;

end

以上程序制作了一个比写使能信号延后一个clock的信号,再通过两个信号的组合判断实现了写使能上升沿信号的处理。这在FPGA的程序中是很常见的处理方式。


       最后通过RAM程序中的接口程序,将已经处理好的数据总线信号、地址总线信号和使能信号、时钟信号添加进接口当中,功能便实现了。


 

  数据的读取:


数据读取时的使能信号同样使用了PIO_CODR和PIO_SODR这两个关键的寄存器,按照时序控制这两个寄存器的值即可。

数据读取的情况如图12所示:

图12

    

通过对FPGA编程将数据0x3456放到数据总线上,在ARM的程序中对数据总线所在的地址进行读取,就可以将数据读出。这里将读出的数据存储到了PIOC寄存器中,你也可以把它放到变量中来观察,验证对错。在IAR里查看PIOC的只读寄存器PIOC_ODSR就可以看到数据已经被存放到了寄存器当中。

关于涉及到的寄存器、寄存器的控制方式、使能信号的时序以及相关软件的使用和编程思路,读取与写入是大致一样的,这里不再重复描述。


关键字:ARM9  FPGA  并口通信 引用地址:ARM9与FPGA并口通信的实现

上一篇:STM32驱动LCD12864显示屏
下一篇:STM32单线串口对总线舵机的控制

推荐阅读最新更新时间:2024-03-16 16:05

从经济学角度看FPGA的作用
当今世界充满了越来越复杂的高科技设备,这些功能过去只是在科幻小说中提到过。当我们使用联网设备并使用手机拍摄高清照片时,很少有人会考虑底层技术。很少有人意识到每个设备内的物理和市场动态所造成的紧张感,这使得每一代设备都越来越难以设计和制造。 对低功耗和更多功能的追求,推动了集成度的发展。反过来,这需要更小的硅几何尺寸,其中要求设计人员采用 28-nm、16-nm、12-nm、7-nm、5-nm 及以上工艺。随着硅工艺几何形状的每一次减少,设计和制造成本都会非线性增加。设计更小的几何形状需要越来越稀有的专业知识、更长的设计时间、增加的设计工具成本和增加的程序风险。 这些呈指数增长的设计成本必须在项目生命周期内运送的设备数量中摊
[嵌入式]
从经济学角度看<font color='red'>FPGA</font>的作用
FPGA系统设计实战经验分享FPGA系统设计实战经验分享
这个帖子主要和大家介绍一些我们在FPGA硬件系统设计过程中遇到的问题和解决的方法。也欢迎大家一起参与讨论。主要涉及以下几个方面: 1。芯片的选型 包括FPGA芯片的选型原则,外围芯片,比如存储器,电源,接口芯片等等选择的依据。我们会给大家推荐一些性能好,价格便宜而且好买到的芯片,节省你查询芯片的时间。 2。原理图设计技巧 包括如果兼容不同型号的FPGA,保证系统设计的升级空间等。 3。PCB的设计基本原则 对于一般的FPGA系统,只要保证这些基本原则,不必学习那些复杂的仿真软件和高速PCB设计知识,一样可以设计出稳定可靠的硬件电路板。 4。电路调试技巧 如何调试一块刚刚焊接好的电路板,特别是对于第一次调试电路板的朋友一定会有所帮助的
[嵌入式]
基于FPGA的NAND Flash ECC校验
 移动产品应用领域,NANDFlash设备已成为人们解决高密度固态存储的专用方法。信息技术的飞速发展,人们对信息的需求量也越来越大。因此,大量数据在系统内部以及网络之间存储和传递时,对数据进行检测并更正可能出现的错误尤为重要。纠错码ECC(ErrorCorrect-ionCode)满足这一需求,其被称为ECC校验,是一种常用于NANDFlash读写控制器的校验编码。   ECC校验负责检测错误、维护ECC信息、更正由原数值改变了的单比特错误。所有ECC的操作处理都可由一个ECC模块来控制,其作为一种简单地存储一映射接口,放置在NAND器件和处理器接口之间。该模块一般包含Hamming编码产生模块和出错位置模块,分别用于产生EC
[嵌入式]
基于<font color='red'>FPGA</font>的NAND Flash ECC校验
在有限的时间内打造高质量的FPGA项目
在一个研发项目进行的过程中,需求可能会变化,进度要求可能会改变,成本可能会溢出。每个项目都存在许多技术和运营挑战,但没有什么比FPGA硬件开发更危及项目或给工程师带来更大的压力。将一种电子产品推向市场会面临多种困难。当被要求引出多个IO,加上与FPGA设计相关的闪电般的信号速度,公司面临着超出项目进度的风险,这可能会严重影响产品的上市时间。 设计循环——包括原理图、布局、制作和验证——很少一次成功,因为在实现完整的功能性的解决方案之前通常需要多次迭代。因为每次迭代可能需要数周的时间,并需要生产新的电路板,成本可能从几千元到几万元不等,所以产品上市或交付给客户的进度时常无法按计划进行。因此,考虑到工程师面临的加速设计和产品
[嵌入式]
在有限的时间内打造高质量的<font color='red'>FPGA</font>项目
ARM9硬件接口学习之UART
  在没有引入UART之前,由于没有OS,我们写程序烧到开发板内执行后,并不能在程序的运行过程中打印一些提示信息告诉我们程序究竟运行了如何或者提供接口让用户去控制程序的运行路径,最后也只能通过物理现象去判断程序是否执行成功。   使用串口我们便可以实现开发板最基本的数据的发送和接收,实现同开发板的交互,控制程序的运行,并且在程序运行中打印出一些信息进行debug。实际上bootloader和kernel的控制台(nfs模式)都是通过uart实现的。由此我们可以发现uart在实际开发中是非常重要的。   1. s3c2410串口基础   S3C2410A UART详细的规格说明请参考s3c2410的datasheet。   1
[单片机]
Qsys简化FPGA设计流程
日前,Altera在亚太区正在举办“ Altera亚太区采用Qsys实现系统集成研讨会”,重点介绍Altera新的系统集成工具Qsys。 Altera亚太区产品市场经理谢晓东为与会者详细讲解了Qsys是如何帮助FPGA解决现阶段设计难题的。 谢晓东指出,随着FPGA容量的增长,器件规模越来越大,设计难度越来越高,但对于产品研发团队来讲,又不可能无限制的扩大,人员缺口使FPGA厂商不得不考虑用机器来替代工程师的一些工作。 第二,则是产品的开发基本都是需要团队合作,同时团队也存在人员流失等问题,这时就需要工程师在成熟产品的基础上修改,使用别人的IP,这种设计复用模式是常见的,但是在文档交接,设计思路等方面会经常出现断层,导致
[嵌入式]
Qsys简化<font color='red'>FPGA</font>设计流程
瞬时启动单芯片MachXO3D FPGA为汽车网络带来企业级安全性能
我们生活在一个高度互连的世界,很容易受到各种来源的网络攻击。仅2018年,硬件攻击让超过30亿系统暴露在数据盗窃、非法操作和其它安全隐患中1。 在汽车领域,如今的智能联网汽车则加剧了这类安全问题。若网络攻击造成汽车失控不仅会对目标车辆中的人员造成伤害,更有可能危及附近的车辆、行人和财产。 因此,汽车的设计人员和厂商正极力寻找保障系统安全之道。正如本文所述,解决方法之一是采用莱迪思半导体的MachXO3D™ FPGA 。 老式汽车时代已经过去 汽车市场在不断演变,近些年来的变化尤其剧烈,变化速度极快。 以微处理器单元(MPU)和微控制器单元( MCU )为主的计算器件在20世纪七八十年代晚期开始应用于汽车。起初,
[汽车电子]
瞬时启动单芯片MachXO3D <font color='red'>FPGA</font>为汽车网络带来企业级安全性能
FPGA配置模式
FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。   如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题,一直是采用FPGA的系统设计工程师需要考虑的关键问题。如今,随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。   在很多项目设计中采用Altera 公司基于SRAM架构Cyclo
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved