频谱仪多种内核通信机制的方案设计

最新更新时间:2012-04-12来源: 互联网关键字:频谱仪  内核通信 手机看文章 扫描二维码
随时随地手机看文章

多核体系结构为性能提高和节能计算等领域开辟了新的方向。核与核之间的连接方式、通信协调方式等都是研究重点。本课题的研究基于手持式频谱分析仪系统平台,该系统采用的是ARM、DSP、FPGA的三核架构。各核心分别完成不同的任务,然后核心间进行参数发送、数据交换,实现系统功能。设计重点是解决核心间的通信问题。

  1 ARM与DSP、FPGA通信的硬件设计

  手持式频谱仪中频信号处理板主要包括4个部分:模数转换器(AD9244)、FPGA(XS3C5000)、DSP(TMS320C6412)、ARM(AT91RM9200)。ARM在手持式频谱仪中的位置和作用如图1所示。

  

a.jpg

 

  ARM的硬件设计参考Atmel公司提供的评估板资料。主要包括以下几个单元电路的设计:电源电路、时钟电路、复位电路、启动模式选择电路、JTAG接口电路、Debug串口电路、外部扩展SDRAM电路、外部扩展NOR Flash(AM29LV320DB)电路、与DSP通信的HPI接口电路、与FPGA通信的SPI接口电路、连接温度传感器的I2C接口电路、以太网接口电路。

  1.1 HPI接口电路设计

  ARM与DSP的HPI总线采用16位数据通信,而且HPI总线是数据和地址复用的。ARM使用部分地址信号线与DSP的HPI总线控制信号相连,通过地址的变换来控制HPI总线。ARM与DSP的硬件连接如图2所示。其中ARM通过地址线A3、A2与DSP的HCNTL1、HCNTL0引脚的连接来选择对HPI C、HPIA、HPID各寄存器进行操作。通过A1与DSP的引脚HHWIL的连接来进行读写时半字的选择。通过A4与

的引脚连接来选择读写。ARM通过PB9向DSP的GP11引脚发送握手信号,DSP通过GP12引脚中断ARM开始数据传输。

 

  

b.jpg

 

  1.2 SPI接口电路设计

  SPI接口是一种串行通信接口,它由4根信号线组成,其中SPCK、MOSI、MISO为复用,ARM通过片选信号NPCS来选择与不同的从器件通信。本课题中ARM通过SPI总线分别与中频板FPGA、源扫板FPGA通信。ARM与FPGA的硬件连接如图3所示。ARM为主机模式,其SPI接口的SPCK、MIS O、MOSI分别与从机FPGA的SCLK、MOSI、MISO连接。ARM共有4根片选线。这里采用NPCS1选择中频板FPGA,NPCS2选择源扫板FPGA。

  

c.jpg

 

  2 多核间的通信机制

  2.1 ARM与DSP的通信机制

  ARM在Linux系统启动后,会先进行一系列的初始化,包括对HPI、SPI等通信接口的初始化以及重启DSP,实现时序上的同步。ARM在初始化完成后,会向DSP发送握手信号,即通过PB9向DSP的GP11口写入数据,表示ARM完成初始化,可以接收DSP的发送数据。而DSP完成数据处理以后,会等待ARM的握手信号,即不断访问GP11口是否收到数据。当DSP收到握手信号之后,会向GP12口写1以中断ARM主机的其他工作,以便ARM来读取DSP已处理好的数据。ARM收到中断信号以后,通过设置HCNTL0、HCNTL1对HPIC操作来清除中断,然后写HPIA以告诉DSP从什么位置开始进行自增读。然后DSP将数据从DMA传送到HPID中,ARM通过读HPID来获得数据。由于ARM与DSP的HPI接口是16位数据传输,所以要软件实现将两次读取的16位数据合并成32位,然后传给上层应用程序。ARM读取完数据后,向DSP的指定地址写入0xffffffff,通知DSP渎取成功,准备下次数据传输。

  ARM在接收到上层应用程序下发的命令后,通过对命令的解析、计算,得到各种参数.然后通过HPI下发给DSP。其流程是:首先通过HCNT L0、HCNTL1写HPIC寄存器,配置读写模式。然后写了HPIA寄存器,设置写入DSP的物理地址。通过连续写HPID寄存器来发送控制参数,最后写入0x5555aaaa,表示发送完毕。

  2.2 ARM与FPGA的通信机制

  ARM集成了SPI接口,通过SPI与FPGA进行数据通信。SPI总线的“单主机多从机”模式正适合本课题中ARM同时与中频板FPGA与源扫版FPG A的通信。ARM启动Linux系统后,先对SPI接口进行初始化,包括对PIO控制器编程,将SPI引脚分配给外设,配置PMC(电源管理控制器)以使能SPI时钟以及将ARM配置为主机模式。当上层软件下发命令后,ARM先将接收到的命令字进行解析,解析命令得到各种参数:经过计算后,通过SPI接口的片选NPCS来选择中频板FPGA或源扫板FPGA来下发参数。

  由于中频板FPGA和源扫板FPGA的功能各异,接收的参数也不尽相同,所以制定了不同的数据帧格式及发送规则。ARM向中频板FPGA每帧数据传送16位,传输频率为0.36 MHz。发送顺序为:路由码1、数据帧1、路由码2、数据帧2、结束码。ARM向源扫板FPGA每帧数据传送16位,传输频率为0.36 MHz。发送参数前都要先发送一个存储这个参数的虚拟地址,然后发送参数,顺序为:虚拟地址1、参数1、虚拟地址2、参数2、结束码。

3 嵌入式Linux设备驱动简介

  一套完整设备的软件系统开发可分为:应用程序、库、操作系统(内核)、驱动程序。Linux软件系统的层次关系如图4所示。驱动程序的作用存于连接软、硬件,即内核通过驱动程序来完成对硬件设备的操作。在Linux系统中,应用程序运行于“用户空间”,并不能直接操作硬件,这可以避免应用程序的错误使得整个系统崩溃。而驱动程序运行于“内核空间”,它是系统信任的一部分。所以应用程序要对硬件操作,就要首先使用库提供的系统调用来进入内核。内核匹配后,调用相应的驱动程序函数,从而完成对硬件的操作。

  

d.jpg

 

  Linux操作系统将所有的设备(而不仅是存储器里的文件)都看成文件,以操作文件的方式访问设备。应用程序不能直接操作硬件,而是使用统一的接口函数调用硬件驱动程序。在设计的驱动程序中,首先要根据驱动程序的功能完成file_operations结构中的函数实现,不需要的函数接口可以直接在file_operations结构中初始化为NULL。而file_operations结构变量会在驱动程序初始化时注册到系统内部。当操作系统对设备操作时,就会调用驱动程序注册的file_operations结构中相应的函数指针。

  对于Linux驱动的注册有两种方式:一种是直接编译到内核中,在系统启动时即对设备进行注册;另一种是以模块的方式注册设备,需要在系统启动后用命令对设备进行注册。后一种方式在系统开发期使用比较方便,不用在每次修改驱动程序后和内核一起进行编译,只需要将模块编译成后缀为,ko的模块文件,就可下载到开发板中直接使用。在本课题中,使用的是模块注册的方式,在项目开发期间可大大缩短开发时间。

  4 Linux设备驱动的实现

  对于编写一个Linux设备的驱动程序,大致的流程如下:

  ①查看原理图、数据手册,了解设备的操作方法。

  ②实现驱动程序的初始化,比如向内核注册这个驱动程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序。

  ③设计所要实现的操作,比如open、close、read、write等函数。

  ④实现中断服务(不是必须的)。

  ⑤编译该驱动程序到内核中,或者用insmod命令加载。

  ⑥测试驱动程序。

  4.1 HPI设备驱动程序实现

  4.1.1 物理地址到虚拟地址的映射

  写Linux设备驱动的第一步,是完善头文件中的宏定义,除了各种参数的定义外,主要是实现硬件寄存器的物理地址到虚拟地址的映射。对于硬件寄存器的操作,其实就是对其物理地址进行读写操作。而Linux系统提供了一种内存管理机制,在这种机制下,程序可以使用比真实物理地址大得多的地址空间,称为虚拟地址。Linux系统中程序的操作部是使用虚拟地址,所以要完成物理地址到虚拟地址的映射。本课题采用ioremap函数的方法,如下:

  #define AT91C_SMC_CSR2*(volatile unsigned long*)ioremap(0xFFFFFF78.4)

  对于ioremap函数,就是将物理地址0xFFFFFF78开始的4字节的地址映射到虚拟地址空间中,返回值即4字节虚拟地址的首地址,赋给宏定义的变量名AT91C_SMC_CSR2。对宏定义的操作即对物理地址的操作。

  4.1.2 HPI驱动的初始化

  首先是对HPI硬件的初始化以及中断初始化。对于HPI,主要是重置DSP,已完成时序的同步。设置SMC(静态存储控制器),因为ARM跟DSP的HPI通信是使用PIO线复用。最后向DSP发送握手信号,表示初始化完成。对于中断的初始化,使用:

  request_irq(AT91C_ID_IRQ0,handler,SA_INTERRUPT,”irqO”,NULL);

  此函数向内核注册中断,包括中断号和中断处理函数handler。

  对于HPI设备的注册,为HPI设备分配系统未使用的254作为主设备号,0为次设备号。通过register_chrdev_region函数向内核注册。函数cdev_init是初始化设备,其实就是建立设备与file_operations结构的对应关系。最后将设备加入内核。代码如下:

  

i.jpg

 

  上述的代码都是在驱动模块的hpi_init函数中实现。在HPI驱动被加载到内核时就完成了一系列初始化。

  4.1.3 file_operations结构中函数的实现

  设计驱动的大部分工作就是实现file_operations结构中的函数。代码如下:

  

e.jpg

 

  其中,“.owner=THIS_MODULE”表示结构属于本模块,然后是open、read等各函数的对应关系。由于初始化在hpi_init函数中实现,所以open函数并没有特别的操作,主要是在终端输出信息。函数release主要是申请中断资源的释放,使用free_irq函数。下面主要讲解read函数,write函数与之类似,不再详述。

  ssize_t hpi_read(struct file*file,char*buf,size_t count,loff_t*offp)

  其中,参数file是打开文件的标识符;参数buf和count就是要向buf指向的地址存放count字节的数据;参数offp是文件读取的位置,默认为文件头,不用设置。

  在read函数的最开始有如下代码:

  wait_event interruptible(hpi_wait,ev_start);

  down(&sem);

  ……

  up(&sem);

  其中wait_event_interruptible函数会阻塞进程,使其进入等待队列。直到DSP的数据准备好后,发来中断。HPI设备注册的中断处理函数handler会将变量ev_start置1,同时唤醒hpi_wait等待队列。read函数继续执行之后的代码,即开始从DSP的HPID寄存器读取数据到参数buf指向的地址。读取完成后向DSP指定地址写入0xffffffff,表示读取完成。函数down与up是操作二进制信号量,使渎取数据的过程为“原子”操作,避免执行过程中被打断,从而影响读取结果。read函数的流程如图5所示。

  

f.jpg
4.1.4 资源的释放

  与hpi_init函数相对应的是hpi_exit函数,实现的是资源的释放。代码如下:

  

g.jpg

 

  以上代码包括中断资源释放、映射关系释放、内存释放、没备释放。与hpi_init函数比较可看出,释放的顺序与申请注册的顺序正好相反。

  4.1.5 模块的编译、加载

  在驱动文件的最后加上如下代码,设置模块加载与释放对应的函数:

  module_init(hpi_init);

  module_exit(hpi_exit);

  完成了驱动程序的编写,将源程序文件在Linux开发环境下编译成.ko的模块文件,使用insmod和rmmod指令来加载和卸载模块。

  4.2 SPI设备驱动程序实现

  在SPI的驱动设计中,大体的框架跟HPI是相同的。包括头文件宏定义的完善、SPI设备的初始化、file_operations结构中函数的实现、资源释放,最后编译、加载。需要说明的是AT91RM9200自带了SPI接口,所以初始化时要根据芯片手册对SPI接口的I/O线、时钟、工作模式

  等进行配置,才能保证硬件的正常工作。在SPI驱动的write函数中,使用了如下代码:

  copy_from_user(Ytos,buf,count);

  在Linux的驱动设计中,经常涉及到用户空间和内核空间的通信问题,即数据的交换。copy_from_user与copy_to_user函数就是为了实现这一功能。上述代码实现的功能就是将用户空间buf的count字节的内容复制到内核中定义的数组Ytos中,从而完成用户空间和内核的数据交换。驱动的其余实现类似HPI,不再详述。

  4.3 驱动的调试

  对于程序语法的调试,在编译的过程中解决。根据Linux平台下的交叉编译器arm-linux-gcc的提示信息,修改出现的语法类错误。在保证了驱动文件的成功编译后,对于程序功能的调试,采用打印函数printk跟踪调试。在程序适当的位置加入printk打印信息,如根据设备注册函数的返回值来打印成功或者失败的信息,可以很直观的了解程序的运行情况,是很有效的调试方法。在调试过程中,利用示波器来检测某些通信端口的电平信息,可以了解到是否有数据通信。通过几种手段的结合,最后完成驱动程序的调试。

  结语

  本课题采用ARM、DSP、FPGA的三核构建的系统平台,将它们各自的优点有机的结合起来。在完成各自的数据处理后,分别通过HPI、SPI接口进行数据交换,在ARM的整体控制下,实现了系统稳定运作。而基于ARM的嵌入式Linux操作系统,还能提供友好的人机交互界面。该平台在智能仪表、信号测试分析等领域都能发挥很好的作用。

关键字:频谱仪  内核通信 编辑:神话 引用地址:频谱仪多种内核通信机制的方案设计

上一篇:USB3.0芯片开发实现方式
下一篇:高速数字电路中电子隔离应用

推荐阅读最新更新时间:2023-10-12 20:38

深入浅出剖析增益法测试噪声系数
提到增益法测试噪声系数,大家并不陌生,这是一种简洁的测试方法,精度不如Y因子法,但是在某些测试场合,比如只有频谱仪而没有噪声头,且待测件具有非常高的增益时,就可以使用增益法测试噪声系数。 增益法测试噪声系数的连接示意图如图1所示,测试思路为:DUT输入端端接50 Ohm负载,在频谱仪上测得的噪声功率被认为是DUT本身输出的功率,然后根据DUT的增益计算出其噪声系数。这种方法并没有从测试结果中消除频谱仪本身的噪声带来的影响,所以精度有限。 图1 增益法测试噪声系数示意图 下面分别从两个角度去分析增益法测试噪声系数:(1) T0 (290K)温度下测试;(2) 非T0温度下测试。增益法要求DUT的增益是已知的,假设DUT的增益
[测试测量]
深入浅出剖析增益法测试噪声系数
频谱仪维修的“八大”基本准则知多少?
随着科技发展,电子测量仪器应用领域越来越广泛,久而久之仪器不可避免的会出现一些故障问题,那么如何来排查仪器的故障呢?又该如何着手去维修仪器呢?下面跟着安泰资深频谱仪维修工程师一起来学习: 1.“先易后难” 先解决比较容易的问题,再逐步处理比较棘手的故障。 发生故障时,尤其是发生比较复杂的综合性故障,对于解决这种故障应该先从比较容易解决的故障入手,如:检修仪器的电路板,应先检查电阻、电容、电感、二极管、三极管、保险丝、接插件、指示灯、开关等,在排除这些元件故障后,再检查集成电路、大功率管、功率模块、专用传感器、微处理器IC、接口IC、存储器IC等。 2.“先简后繁” 先从简单的器件或部位下手,再进入复杂繁琐的电路或线路。
[测试测量]
基于固纬频谱仪检测的RFID读卡器应用实例解析
1. 关于RFID RFID是射频识别(Radio Frequency IdenTIficaTIon)的英文缩写,它是一种非接触式的自动识别技术,通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可识别高速运动物体并能同时识别多个标签。 最基本的RFID系统由阅读器(Reader)、电子标签(Tag)亦即应答器(Transponder) 和天线(Antenna)三部分组成。其工作原理是Reader发射一特定频率的无线电波能量给Transponder, 用以驱动Transponder电路将内部的数据送出,此时Reader便依序接收解读数据, 送给应用程序做相应的处理。发生在Reader和Transponder之间
[测试测量]
基于固纬<font color='red'>频谱仪</font>检测的RFID读卡器应用实例解析
便携式频谱仪无人机机载频谱仪解决方案
解决方案 拉脱维亚电子通信办公室(ECO)选用虹科HK-SC Compact手持式频谱分析仪开发一个安装在无人机上的完整射频测试和测量解决方案,这款无人机解决方案的开发将创建一个更有效的流程,以解决各种监管应用中日益拥挤的射频频谱问题。 这款无人机解决方案包括虹科HK-SG Compact轻型频谱分析仪以及用于方便数据收集、存储和分析的专用软件,它将有助于确保射频频谱的控制,以保障电信监管机构对监管框架的一致应用。移动创新者LMT开发的附加软件将使用人工智能(AI)识别数据传输天线,并确保无人机处于最佳位置以收集测量数据。 关于LMT LMT是一家移动技术创新者、集成商和IT公司,也是拉脱维亚领先的移动运营商。作为创新领导
[测试测量]
便携式<font color='red'>频谱仪</font>无人机机载<font color='red'>频谱仪</font>解决方案
EMI接收机与频谱仪的区别简析
EMI认证中需要使用接收机而非频谱仪,这是为什么呢?它们之间有什么不同呢? 频谱仪大多采用超外差式结构,这点与EMI接收机相同,都要显示各频率成分的幅度。接收机需要严格满足CISPR16中对于接收机的规定,而频谱仪不需要。频谱仪与接收机不同的地方主要体现在以下几个方面: 1)接收机与频谱仪在输入端对信号的处理是不同的 频谱仪的信号输入端通常有一组较简单的低通滤波器,而接收机采用对宽带信号有较强干扰能力的预选器。通常包括一组固定带通滤波器和一组跟踪滤波器,完成对信号的预选。 2)扫频信号不同 频谱仪的扫频信号源通常是通过斜波或锯齿波信号控制扫频信号源实现的,频率的变化是连续的,在预设的频率跨度内扫
[测试测量]
EMI接收机与<font color='red'>频谱仪</font>的区别简析
Agitek频谱分析仪维修小课堂之频谱仪常见故障有哪些
频谱分析仪是射频微波应用领域常用的测试仪表,通过频谱仪的测试,可以得到信号很多重要的性能参数,如信号频率,信号功率,信号带宽,杂散性能等。对于一个射频工程师来讲,经常使用频谱分析仪,难免会遇到频谱分析仪出现故障的时候,今天安泰测试就给大家分享一下频谱仪常见故障有哪些,以及使用注意事项。 频谱仪TG、信号源输出口、功率探头等反向保护能力差(10~15dBm,电压0V或10V)。大多模块与整机都是双工模式(上下行收发使用不同的频率,收发同时进行),所以,西安安泰频谱分析仪维修中心小编提示大家,在测试双工类放大器模块或设备时,为了防止反馈信号对仪器的损坏,必须在信号源、频谱仪跟踪源(TG)等输出口串接相应频段的隔离器或合适的衰减器,
[测试测量]
频谱仪测试谐波经验分享
  最近我遇到客户测试我们模块谐波不通过的情况,结合在以前测试时候遇到的一些疑问,最近研究了一下频谱仪测试谐波的一些原理,有一些心得跟大家分享一下。案例如下,下图是同一个模块的谐波测试,却相差了13dB,之前也有小伙伴询问过这个问题,当时我也没搞懂。这次可以解答一下。 图一 谐波测试(-30dBm) 图二 谐波测试(-43dBm)   上图是同一产品的谐波测试,测试结果却不一样;可以看到两次测试的不同在于Ref Level设置不一样,但是这不是主要的因素,真正的原因是在调整Ref Level过程中attenuation(衰减)也会跟着变化,这个衰减的意义在于保证输入信号不会过大。正是这个值的变化导致了我们测试结果的不一致。
[测试测量]
<font color='red'>频谱仪</font>测试谐波经验分享
如何提高频谱仪的幅度测量精度
扫频式超外差频谱仪通过混频器把输入信号变换到中频(IF),在中频进行放大、滤波和检波处理。预选滤波器(有时是低通滤波器)主要用于滤除镜像频率的信号,频谱仪屏幕上显示的参考电平和中频放大器的增益有关,该放大器只是调节信号在屏幕上显示的垂直位置,不影响输入衰减器端的电平。屏幕的横轴是频率,纵轴是测得的信号电平,一般以线形的电压Volt或对数形式的dB表示。 频谱仪的幅度精确度通常有绝对精度和相对精度两种。绝对精度指的是信号的功率电平精度,单位为dBm;而相对精度指的是测量两个信号之间差值的精度,其中的一个信号作为另一个的参考,例如测量谐波信号的时候,一般测量谐波和基波的功率比。通过测量一个幅度和频率非常准确的校准源,以上两种精度
[测试测量]
如何提高<font color='red'>频谱仪</font>的幅度测量精度
小广播
最新模拟电子文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved