微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式机器视觉系统中ARM与DSP的数据通信方法

嵌入式机器视觉系统中ARM与DSP的数据通信方法

时间:11-20 来源:21IC电子网 作者:毛晓波 刘国栋 陈铁军 黄云峰 点击:

内存映射是指把内核中的特定的内存空间映射到用户空间的内存中去。对驱动程序来说,内存映射可以提供给用户程序直接访问设备内存的能力。

mmap系统调用映射一个设备,意味着使用户空间的一段地址关联到设备内存上,这使得只要程序在分配的地址范围内进行读取或者写入,实际上就是对设备的访问。

mmap方法是file_operations结构的一部分,要实现映射必须分两步:

1)调用内核中的remap_page_range函数,它的功能是:构造用于映射一段物理地址的新页表,实现了内核空间与用户空间的映射,其原型如下:

函数参数的确切含义如下:unsigned long virt_add为重映射开始处的虚拟地址。这个函数为虚地址空间virt_add和virt_add+size之间的范围构造页表。unsigned long phys_add为虚拟地址应该映射到的物理地址。unsigned long size为被重映射的区域的大小,以字节为单位。pgprot_t prot为新VMA所请求的"保护"属性。驱动程序不必修改保护,在vma->vma_page_prot中找到的参数可以不加改变地使用。
本课题中使用mmap调用的代码如下:

这样就为DSP的HPI接口所对应的总线物理地址:0x10000000(对应nGCS2)在vma->vm_start和vma->vm_end之间构造了新的页表。

hpi_mmap_add=mmap(NULL,length,PROT_READ|PROT_WRITE,MAP_SHARED,hpi_fd,0)其中参数start指明描述字fd对应的"文件"(也就是/dev/hpi设备)在进程地址空间内的映射区的开始地址,必须是页面对齐的地址,通常设为NULL,让内核去自动选择开始地址。任何情况下,mmap的返回值为内存映射区的开始地址。这样通过对hpi_mmap_add操作,实现对起始地址为0x10000000的内存段操作。

3.3 驱动程序的内核加载方式

在完成了嵌入式Linux驱动程序的编写测试工作后,下一步就是将编写好的驱动程序加载到系统内核,完成驱动硬件的工作。通常有以下两种做法:

1)驱动程序直接编译入内核 采用这种方式编译的驱动程序在内核启动时就已经在内存中,运行时不需要再自行加载驱动,可以保留专用的存储器空间。

2)驱动程序的模块加载 采用模块加载方式的驱动程序将会以模块形式存储在文件系统里,需要时动态载入内核即可,使得驱动程序按需加载,不用时节省内存,并且驱动程序相对独立于内核,升级灵活,授权方式灵活。本文就采用此种方式。

因为采用的是模块加载方式,所以还需要借助两个重要的函数init_module()和cleanup_module(),完成模块的注册和卸载。具体源码可以参见/usr/src/linux/kemel/module.c。在2.3版本以后采用了新的方法命名这两个函数,定义exampie_init()代替init_module()函数,example_cleanup()代替cleanup_module()函数。在程序的最后用下面两行代码进行声明:

module_init(S3C2440_HPI_init);
module_exit(S3C2440_HPI_exit);

3.4 接口具体应用的设计方法

利用编写好的驱动程序,用户可以编写出不同的应用接口程序。下面给出自增写的方法:
根据图2的接口电路,A2,A3,A4,A5对应的接口分别是HCNTI0,HCNTL1,,HHWIL,当自增模式写低半字时,它们的值应该分别是:HCNTL0=0,HCNTL1=1,,HHWIL=O,即A[5:2]=0010,在HPI_VA_BASE上增加偏移就可以对控制口线控制。所以自增写第一半字时,加00000100即:0x04,当自增模式写高字节时,它们的值应该是HCNTL0=0,HCNTL1=1,,HHWIL=1,即A[5:2]=1010。所以自增写第二半字时,加00101000即:0x28。对HPI控制寄存器写地址用如下宏定义:


另外,在自增写过程中,对于作为接收端的DSP处理器,需要明确:1)是否准备就绪,可以进行写入数据,HPI-16中可以通过HPIC寄存器查询HRDY的状态,当HRDY为1时,即表明HPI已经准备就绪;2)指明要写数据的区域址,即dsp_add_w=(hpi.hpi_dsp_add),这是从应用程序传过来的参数,以确定写数据区域的起始地址。自增写的代码和注释如下:

4 结束语

通过一个嵌入式机器视觉系统工程实例,阐述了嵌入式系统中,用ARM+DSP的双核结构加载Linux操作系统,通过HPI接口进行通信和交换数据的设计方法,设计了HPI接口连接的硬件电路和Linux环境下的驱动程序,描述了该接口的具体应用设计方法。

ARM+DSP的双核系统是新型的嵌入式机器视觉系统构建方法,而这里设计的通过HPI接口交换数据的双机通信方法,在机器视觉系统项目中被成功地应用证明,传输数据速度达到10 Mb/s,能够满足嵌入式系统对实时性的要求,具有广阔的应用前景。但在应用中需要注意的是:HPI接口的读写过程都涉及

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top