网站大量收购闲置独家精品文档,联系QQ:2885784924

嵌入式Linux下ARM处理器与DSP的数据通讯.docx

嵌入式Linux下ARM处理器与DSP的数据通讯.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux下ARM处理器与DSP的数据通讯 基于核心处理器的系统以其自身资源丰盛、功耗低、价格低廉、支持厂商众多的缘故,越来越多地应用在各种需要复杂控制和通信功能的嵌入式系统中。 内核源码开放的与ARM体系处理器相结合,可以发挥Linux系统支持各种协议及存在多进程调度机制的优点,从而使开发周期缩短,扩展性增加。作为数字处理专用,的数字信号处理能力非常强大,但对诸如任务管理、通信、人机交互等功能的实现较为困难。 假如将这三者结合起来,即由DSP结合采样电路采集并处理信号,由ARM处理器作为平台,运行Linux操作系统,将经过DSP运算的结果发送给用户程序举行进一步处理,然后提供应图形化友好的人机交互环境完成数据分析和网络传输等功能,就会最大限度的发挥三者所长。 2 系统结构 该系统硬件由二部分组成,其中一部分为若干块DSP板,各自自立承接数据采集和信号处理。另一部分为以ARM为核心处理器的CPU板。系统硬件框图1所示(仅接口部分)。 3 接口硬件部分设计 3.1 HPI接口简介 HPI接口是TI公司新一代、高性能DSP上用以完成与主机或其他DSP之间数据交换的接口,这里主要介绍实际电路中用法的控制引脚和时序。 HCNTL0和HCNTL1为拜访控制挑选。用来确定主机(ARM)毕竟对TMS320C6711中的哪一个HPI寄存器举行处理。详细功能如表1所列。 HR/W:读写挑选控制。为“1”表示是从DSP中读,反之则为写。 HHWIL:半字节定义挑选,与H寄存器中的HWOB位举行协作可以挑选当前传输的是高半字还是低半字。低电平是第一个半字,高电平是其次个半字。 HCS:选通脉冲(Strobe),与HDS1、HDS2互相协作完成内部信号HSTROBE的生成。规律关系2所示。 将HDS1、HDS2分离固定为高电平和低电平,这样HCS就和HSTROBE彻低全都。 HSTROBE读时序3所示。 3.2 接口电路 ARM处理器通过DSP的HPI接口与DSP举行衔接的硬件原理4所示(以单板DSP为例)。其中SN74LVTH16245为16位(二个8位)双向三态,主要起总线驱动和方向控制的作用同时也保证在不对HPI口举行操作时数据总线锁闭。AT91RM9200为公司生产的ARM9为核心的处理器,其中引脚D0-D15为数据总线,A2-A8为地址总线的一部分,CS3为片选信号线,当ARM对总线地址范围为0x40000 0000~0x4FFF FFFF的外部设备举行操作时,会在该引脚产生一个片选信号。同时该信号控制SN74LVTH16245的使能端,避开在读写其他地址时对HPI端口造成影响。TMS320C6711D是TI公司生产的DSP,每秒可以完成15亿次浮点运算,数据处理功能非常强大。引脚D0-D15为数据总线。其余端口是HPI接口的控制引脚。 4 驱动程序设计 4.1 Linux驱动程序简介 在Linux操作系统下有二种方式将驱动程序装入操作系统内核:一种是挺直将驱动程序编译进内核,另外一种是将驱动程序构建为驱动程序模块后采纳insmod/rmmod指令将模块加载内核中。因为是在嵌入式系统中举行程序开,所以笔者选用了模块加载方式。这样,在囫囵程序的调试过程中不必由于修改某处而反复编译囫囵内核,只需编译驱动程序模块并重新加载。 本例中Linux下的驱动程序主要用来完成文件(Linux把外部设备也认为是文件)的打开、关闭、读、写等操作。也就是对如下结合的填充。 Static struct file_operations fops= {open:hpi_open, release:hpi_release, mmap:hpi_mmap, }; 其中,open和release完成设备的打开和关闭。mmap为内存地址映射操作。由于采纳的是模块加载方式,所以还应当加上int init_module(void)和void cleanup_module(void)函数,以完成模块的注册和卸载。 4.2 驱动程序中映射的实现 因为驱动程序的内存空间是在内核空间中,因此首先应解决内核空间与用户空间的交互问题。这里采纳最挺直的方式将内核空间和用户空间联系起来实现映射,即利用remap_page_range内核函数(通过mmap系统调用实现)。 函数原形如下: int remap_page_range(unsigned long virt_add,unsigned long phys_add,unsigned long size,pgprot_tprot); 函数的功能是构造用于映射一段物理地址的新页表。函数返回的值通常是0或者一个负的错误码。函数参数确实切含义如下: virt_add:重映射起始处的用户虚拟地址。phys_add:虚拟地址所映射的物理地址。Siz

文档评论(0)

别拿青春赌明天 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档