ARM7 与 FPGA 结合的应用

发布于:2024-07-17 编辑:匿名 来源:网络

ARM7 与 FPGA 结合在工业控制和故障检测中的应用  在工业控制中,经常需要多路故障检测和多路命令控制(这种多任务设置很常见),单个CPU芯片由于其外部控制接口数量有限,很难直接完成多通道的检测和控制任务,所以采用ARM芯片结合FPGA来扩展检测和控制通道是一个非常好的选择。

这里介绍一种使用Atmel的ARM7处理器(AT91FR2)结合ALTERA的低成本FPGA芯片(CycloneII)完成多通道检测和控制任务的实现方法。

  各部分功能介绍  图1为本系统的结构连接框图。

如图所示,ARM芯片和FPGA芯片通过数据总线、地址总线和读写控制线连接,并通过串口与终端PC进行通信; FPGA和目标设备通过命令控制总线和故障检测总线连接。

  图1 系统结构框图   1 故障检测与命令控制部分   故障检测:检测通道的故障(正常)信号以高(低)电平表示,一旦维持一次故障发生 高电平保持不变,直至故障排除。

针对这一特点,在ARM控制器侧采用定时中断循环查询的方式来判断故障通道的状态。

定时中断程序对FPGA中的ARM地址总线进行译码,依次锁定检测通道的电平值,然后通过数据总线传回ARM进行判断,最后将判断结果发送到远程终端。

采用主机查询方式而不是故障中断方式有两个原因:一方面,控制芯片的外部中断源通常有限(大多是4个外部中断源),检测多目标显然是困难的中断信号;另一方面,由于检测通道或设备的短时干扰,电平随机反转,导致故障中断被触发。

中断触发后,当通道电平恢复正常时,故障信号无法取消,从而形成误报。

  命令控制:ARM芯片首先判断主机发送的控制命令,然后将命令状态通过地址总线和数据总线发送到FPGA地址译码锁定的控制通道。

  2 ARM芯片与远程检测控制终端通信    由于只有命令和故障状态信号的发送和接收,因此采用ARM串口实现与远程PC的通信,通信标准被选为RS标准。

但在ARM芯片上,必须先通过MAX芯片将TTL电平转换为RS电平标准。

对于距离超过15m的全双工通信,必须在发送端和接收端都增加一对RS到RS电平转换。

模块以增加通讯距离。

  3 FPGA内部功能模块说明   FPGA内部检测和控制电路的结构关系如图2所示。

  图2 FPGA内部逻辑结构   ARM芯片的ADDR2~0位地址线和片选使能信号进入译码器decode1进行地址译码,产生8个输出(FPGA可以设置Decoding模块的最大输出,所以实际应用中可扩展更多通道),下4个通道用于命令发送通道,上4个通道用于故障检测通道,读写使能信号控制数据总线。

  当ARM芯片收到发送信号编码命令后,立即在串口接收中断服务子程序中向FPGA发送相应的地址(通道号)和数据(命令状态)。

译码器的有效输出作为相应通道D触发器的锁存时钟,数据状态被触发器锁存并作为所选通道的输出,完成相应的控制。

  定时中断产生后,ARM芯片进入服务程序,依次查询所有检测通道。

当检测到通道故障时,故障信号与所选通道信号结合,通过NAND运算发送到数据端口进行读取。

  FPGA编程注意事项  1延时配置  通过地址总线和数据总线进行命令传输和故障检测时,FPGA作为ARM芯片的公共外设。

ARM芯片对外设的访问速度比片内存储器慢很多,因此必须在ARM中设置正确的访问等待时间。

ARM 提供的延迟周期为0 到7。

通过调试可以找到外设合适的等待周期。

根据实际测试,本系统的等待时间设置为5。

具体配置方法请参见ARM程序说明。

  2 读写使能信号的连接    从图2可以看出,写使能信号NWE和读使能信号NRD应连接为数据线(DATA0~ 5)、即使ARM芯片没有其他外设时也不能默认。

由于同一系统上ARM的上电程序加载时间比FPGA的程序配置时间长,并且FPGA的检测和控制通道都连接到ARM芯片的数据总线上,所以FPGA加载完成后,数据总线将存储相应通道的逻辑电平值。

(不是三态),这样会导致ARM芯片在对片上Flash芯片编程或者上电加载程序时与FPGA发生冲突(数据被逻辑锁定),导致操作对象无法位置正确,读写就会失败。

  ARM 配置和应用说明  1 处理器资源分配  ● 内存  AT91FR2 嵌入了KB SRAM 和K 个16 位字的Flash 存储器。

SRAM通过内部32位数据总线连接到ARM内核并在单周期内访问,而Flash存储器则通过外部总线访问。

  ● 系统周边  EBI:外部总线控制接口。

EBI 可以寻址 64MB 的空间。

它通过8条片选线(NCS0~NCS3独立)和24位地址线访问外设。

地址线的高4位连接片选线(NCS4~7)。

复用后,数据总线可配置为8/16位模式以与外设接口。

  PIO:并口控制器,PIO控制32条I/O线,其中大部分为复用引脚,可以通过编程选择通用或专用。

  AIC:高级中断控制器,实现对片内外设中断和四个外部中断源中断的管理。

其外部中断引脚与通用 I/O 复用。

  ● 用户外设  USART0~??1:串口收发控制器,支持8 个数据位的传输,可以进行异步/同步传输选择,其片外引脚与通用I/O 复用。

  TC:定时器/计数器,可以产生定时中断和计数功能。

其片外引脚与通用 I/O 复用。

  2 内存地址重映射后的空间分配  CPU上电后,第一条指令代码将从地址0开始执行,上电复位后,地址0必须映射到NCS0片选在器件上,NCS0 必须连接到片上Flash 以加载初始化程序和应用程序。

由于中断和异常的入口地址固定为0到20H,因此它们的生成会跳转到0到20H之间对应的地址执行程序。

为了加快中断响应速度,必须将地址0到20H映射到芯片上。

RAM 区域,因此执行初始化重映射命令后(EB1_RCR 的 RCB 位为 1),内部 RAM 被映射到地址 0,所有中断入口响应和堆栈操作都映射到 RAM 区域。

  由于重映射主要用于Flash与片内RAM之间的地址空间交换,因此片上外设接口(EBI、USART、TC)对应的存储器编程地址范围在映射前后不会改变,同时访问重映射后分配的外设地址。

重映射后的地址分配如表1所示。

  3 应用接口存储器配置  EBI存储器:设置8个EBI片选存储器(EBI_CSR0~EBI_CSR7)的外设访问参数。

其中,32位存储器包括数据总线宽度8(16)个设置、等待状态数量1~7个周期设置、等待使能(不使能)设置、片选使能(禁止)设置。

这里以FPGA作为外设,使能NCS3(也可以根据实际情况选择其他空闲的片选线),总线宽度选择为16,使能等待周期,周期设置为5(根据调试选择)。

由于NCS0默认是加载Flash片选线,而Flash有16位信号和7个等待周期,因此需要在EBI_CSR0中选择16位总线宽度、7个等待周期并使能NCS0。

  AIC内存:AIC内存管理所有内部和外部中断。

只有正确初始化分配这块内存才会打开相应的中断。

设置AIC工作参数:应用串口通信模式为异步模式,串口发送的数据字符长度为8位,通信波特率为B/s,串口中断优先级为6(中断优先级从从低到高0~7),接收和发送通道使能。

  TC内存:定时中断内存需要设置定时长度为1s(每1s产生一个中断用于故障查询),使能定时通道和软件触发模式,并将定时中断优先级设置为1。

C_BASE_EBI, //地址指针  0x3, //芯片NCS3使能  0xx3f39); //片选存储器初始化  Usart_init(); //初始化串口  timer_init(); //初始化定时器  while(1){} //循环等待  }  ARM处理器完成各寄存器的初始化后进入应用主程序。

主程序中首先调用EBI接口使能函数设置参数:程序中设置存储器基地址值(0xFFE0),设置片选为0x3(NCS3使能),初始化NCS3的存储器;调用USART控制器函数初始化串口:打开串口,初始化串口收发通道,设置串口通信速率;调用定时中断函数:打开定时中断,设置定时中断时间,设置触发方式为软件触发;最终进入等待循环。

  ②串口命令接收中断服务程序  #define USART0_INTERRUPT_LEVEL 6//设置中断优先级为6  #define AT91C_US_USMODE_NORMAL AT91C_US_CHMODE_NORMAL//*设置通信模式(NORMAL定义为异步模式)*/ /  AT91PS_USART COM0=AT91C_BASE_US0;//设置COM0为收发口  char message[4];  //控制口串口中断通讯程序//  //*---- ----- --------------------------------------------------------- ----- ------------------*//  void Usart0_c_irq_handler(AT91PS_USART USART_pt)//串口中断处理函数  { volatile unsigned int *conp;unsigned int status;  int time;  volatile unsigned int i;  status = USART_pt->US_CSR &USART_pt ->US_IMR;//给状态寄存器赋一个初始值   if ( status &AT91C_US_RXRDY)//接收通道寄存器判断是否有数据   {  AT91F_US_DisableIt(USART_pt,AT91C_US_RXRDY);//关闭接收通道,准备就绪 Interrupt   AT91F_US_EnableIt(USART_pt,AT91C_US_ENDRX);//打开接收结束中断   AT91F_US_ReceiveFrame(USART_pt,(char*)(message),4);//调用接收的个数data 接收数据  }   if ( status &AT91C_US_ENDRX){  AT91F_US_DisableIt(USART_pt,AT91C_US_ENDRX); // 关闭接收端发送结束中断   { if ((message[0]^0xff)==message[1])//判断接收码   {switch (message[0])   {case 0x31: {conp=(volatile unsigned int*)(0x1x);//OPE1使能  *conp=0x2;}; break;// 0x31 代码发送到 OPE1 端口  case 0x30: {conp=(volatile unsigned int*)(0x2x);//OPE2 使能  *conp=0x1;};休息; // 0x30 代码发送到 OPE2 端口   case 0x11: {conp=(volatile unsigned int*)(0x3x);//OPE3 启用  *conp=0x2;};break;//0x11 代码发送至 OPE3 端口  case 0x10: {conp=(易失性无符号整数*)(0x4x);//启用OPE4  *conp=0x1;};break; //0x10代码发送到OPE4口  default:break;}  }  }  以上程序为串口中断服务程序。

各函数语句的说明请参见注释。

中断级别设置为6(高于定时中断),使命令发送优先于故障查询(控制命令随机出现,故障查询始终循环执行);接收缓冲区message[4]数组类型必须设置为动态分配,静态数据分配会导致处理器在Flash芯片中开辟一个数据缓冲区,从而因中断中访问时间过长而导致串口收发器超时错误处理程序。

由于篇幅有限,其他流程不再一一描述。

  编写ARM应用程序时,主函数中应尽量少使用循环操作。

main函数主要完成各个接口控制器应用程序的初始化,因为main函数不间断的循环运行不仅会增加功耗,而且耗时较长。

中断服务和主循环之间的频繁切换会导致程序运行不稳定,因此可以用定时中断完成的循环操作应尽可能用中断来完成。

  结论  ARM芯片控制功能的独特优势结合FPGA在工程上灵活的多硬件接口仿真特性,已发展成为流行的硬件架构模型。

ARM7 与 FPGA 结合的应用

随着芯片功能的不断强大,这一优势将使其更加通用,在任务处理上更加灵活高效。

ARM7 与 FPGA 结合的应用

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 离开投行后教人做饭:她即将拿下上市公司

    离开投行后教人做饭:她即将拿下上市公司

    鏈懆锛岄楗唴瀹瑰強鐢熸椿鏂瑰紡鍝佺墝DayDayCook瀹e竷涓庣編鍥界壒娈婄洰鐨勬敹璐叕鍙革紙SPAC锛夎揪鎴愬悎浣? - Ace Global Business Acquisition Limited (Ace) 绛剧讲鍚堝苟鍗忚锛屽苟灏嗗湪绾虫柉杈惧厠涓婂競銆傛棭鍦?000骞达紝RiRiChu灏卞湪棣欐腐鍒涚珛锛

    06-17

  • 当价格战变成持久战:咖啡红海,谁能续杯?

    当价格战变成持久战:咖啡红海,谁能续杯?

    商界总是对“价格战”又爱又恨。 我喜欢它的功效是立竿见影的,可以迅速为公司拓展版图,但我讨厌它是自我毁灭。 在打压竞争对手的同时,更有可能将行业拖入微利泥潭的深渊。 今年以来,现磨咖啡价格战如火如荼,9.9元、8.8元“大单品”成为主流:2月份,CoCo可可推出3.9元美

    06-18

  • vivo联手雷诺PEC,或成全球首个进军F1的手机品牌

    vivo联手雷诺PEC,或成全球首个进军F1的手机品牌

    这几天,vivo充满惊喜,首先是联手《奇葩说》,又与马东、马薇薇联手《奇葩说》主持人与辩手4月14日,以《奇葩说》形式举办的新品品鉴会在“北京首都经济贸易大学”举行;随后宣布与漫威影业联手,成为《美国队长3》的合作伙伴。 据在美国观看放映的网友透露,vivo将以特殊形

    06-17

  • 发布两个月后,Android N 安装率仅为 0.3%

    发布两个月后,Android N 安装率仅为 0.3%

    由于手机阵营的碎片化,Android 每个新版本的普及都是一个漫长的过程。 今年8月,谷歌正式向Nexus设备推送Android 7.0 Nougat更新。 谷歌平台版本页面数据显示,正式发布两个月后,Android Nougat 安装率仅为 0.3%。 Android上一次版本更新用了一年多的时间才成为最受欢迎的系

    06-17

  • 煜盛文化:2020年营收5.06亿元,同比增长6.4%

    煜盛文化:2020年营收5.06亿元,同比增长6.4%

    煜盛文化发布年度业绩报告。 财报显示,2019年,公司实现营收5.06亿元,同比增长6.4%;资产净值13.1亿元,同比增长0.1%。

    06-18

  • 奔奔集团已完成2亿美元融资,明德控股领投,

    奔奔集团已完成2亿美元融资,明德控股领投,

    据投资界10月8日消息,据亿欧独家消息,奔奔集团已完成D1轮融资,金额2亿美元,明德控股领投。 北京电商投资及老股东鼎晖资本、高榕资本也参与投资。 据介绍,本轮融资资金将投资于原集团独特的O2O+B2C生鲜新零售模式。 最初,集团在本财年探索了盈利模式,将在本财年实现集团

    06-18

  • 雷军:第一款小米汽车的价格区间可能是10万-30万元

    雷军:第一款小米汽车的价格区间可能是10万-30万元

    在今天的直播中,小米董事长雷军透露,小米的第一款汽车要么是轿车,要么是SUV,价格区间在10万-30万元。

    06-17

  • 腾讯投资电池独角兽:聚湾科技研究院估值80亿

    腾讯投资电池独角兽:聚湾科技研究院估值80亿

    腾讯也开始投资电池。 投资界获悉,4月6日,广州聚万科技研究有限公司发生工商变更,新股东突然出现,为广西腾讯创业投资有限公司。 日前,广汽集团在股东大会上透露年报沟通会上,聚湾科技研究院完成A轮融资,估值80亿元。 事实上,这家被腾讯青睐的电池独角兽正是脱胎于广汽

    06-18

  • 酷派推出双系统保密安全手机,或将引发手机行业变革

    酷派推出双系统保密安全手机,或将引发手机行业变革

    “2019年,酷派成功将手机品类划分为双待和非双待。 时隔十年,酷派再次创新,将手机品类划分为双待。 系统和单系统手机。 ”酷派副总裁张光强曾在公司内部邮件中表示。 最近得到消息,酷派发明了双系统安全,据说是Android系统和安全系统,极大满足了现在的安全信息需求。 酷

    06-17

  • IT共享服务中心:实现IT运维降本增效

    IT共享服务中心:实现IT运维降本增效

    .wp-block-column h3{margin-left:0} 文章摘要:在当今数字化快速发展的时代,每个企业都需要高效,专业的IT运维支持,保持业务的稳定性和竞争力。 为了满足这一需求,许多企业转而建设IT共享服务中心,以降低IT运营成本,提高IT运营效率。

    06-18

  • 汤臣倍健为LP,将参与设立价值2亿元新基金

    汤臣倍健为LP,将参与设立价值2亿元新基金

    据投资界4月28日消息,汤臣倍健宣布,公司拟与蔚来达成合作股权投资管理(广州)有限公司(简称“蔚来投资”))与安徽龙翼乡村振兴发展有限公司(简称“龙翼振兴”)共同投资设立安庆蔚来生活健康与绿色食品投资基金合伙企业(有限合伙)(暂名),并签署相关合伙协议。 基

    06-17

  • 以酱油鸡为单品的餐饮品牌金戈戈完成近亿元A轮融资

    以酱油鸡为单品的餐饮品牌金戈戈完成近亿元A轮融资

    据投资界(ID:pedaily)5月28日消息,近日,餐饮品牌金戈戈完成近亿元A轮融资专注于酱油鸡单品,完成香港酱油鸡获近亿元A轮融资。 本轮融资由战略投资者投资,其中老股东番茄资本持续加大投资,Single Choice Capital担任本轮FA。 本轮融资将主要用于扩大门店规模、增加品牌

    06-18