完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1嵌入式机器视觉系统总体方案
采用ARM+DSP结构的机器视觉系统总体结构如图l所示。以三星公司高性能ARM处理器S3C2440作为主控制器,配置并移植Linux操作系统,同时以TI公司的DSP芯片TMS320C5402为图像处理的协处理器,通过对DSP芯片自带的HPI接口的硬件连接方案和驱动程序设计,将二者有机地结合起来,各自发挥其独特优势,协调配合,完成目标采集、处理与视觉跟踪。 首先由智能摄像机采集现场运动目标的图像,由ARM控制将数据存放在ARM与DSP的公共存储区域中,并通知信号处理模块DSP调用各种算法(帧间差分、图像分割、特征提取、形心计算等)对视频图像进行处理,完成目标的识别与定位,并将结果信息传给ARM处理器,由ARM控制步进电机,调整PTZ摄像机位姿(水平转动P-Pan、垂直转动T-Tilt、景深伸缩Z-Zoom),使其对准运动目标,实现实时跟踪。此外,ARM处理器还负责多任务管理、人机交互及中断报警等。 作为双核系统,双核各自拥有很好的性能,于是主机ARM与协处理器DSP之间能否进行快速可靠的数据交换,直接决定机器视觉系统的运行效率。在硬件设计方面,采用主机并行接口HPI实现主机ARM与协处理器DSP之间的硬件直连,设计简单方便,时钟频率可达到DSP时钟频率的1/5,能够支持DSP与主机之间的高速数据传输。在软件设计方面,则移植嵌入式Linux操作系统,将HPI看作字符设备完成了驱动程序的设计。 2双机通信硬件设计 2.1HPI接口简介 主机接口(HPI)是TI公司C54x系列定点信号处理器(DSP)内部自带的接口部件,通过它可以方便地实现DSP与其他主机连接。C54x中的主机接口主要有3种类型:标准8位主机接口HPI-8,增强8位主机接口HPI-8,增强16位主机接口HPI-16。增强型的HPI可以允许主机访问DSP所有的片上RAM单元,而标准主机接口只允许访问固定的2 K片上RAM。本文中用到的TMS320C5402拥有增强HPI-16主机接口。它由以下5部分组成: 1)HPI存储器(DARAM) 传送主机与DSP之间的数据,在一个机器周期内能被访问2次,可以用作通用的双导址数据RAM或者程序RAM。 2)HPI地址寄存器(HPIA) 只有主机能对其进行直接访问。该寄存器中存放着当前寻址的HPI存储单元的地址。 3)HPI控制寄存器(HPIC) 地址002CH,主机和DSP都能对他直接访问,用来保存HPI操作的控制和状态位。 4)HPI数据锁存器(HPID) 只有主机能对它进行直接访问。如果当前进行的是读操作,则HPID中存放的是要从HPI存储器中读出的数据;如果当前进行写操作,则HPID中存放的是将要写到HPI存储器的数据。 5)HPI控制逻辑 处理HPI与主机之间的接口信号。 2.2接口电路及其工作原理 |
|
|
|
3软件设计
3.1Linux驱动程序 Linux操作系统引入设备文件的概念,即把每一个设备都看作一个文件,像对待文件一样对设备进行操作。在Linux操作系统下,设备文件主要有3种类型:字符设备、块设备、网络设备,各自对应一种类型的设备驱动程序。本文设计的HPI接口的驱动程序属于字符设备驱动程序。 Linux下的驱动程序是为相应的设备编写多个基本函数,填充file_operations结构体。其中定义了实现各种操作函数。如下所示: 其中,open和release完成设备的打开和关闭。mmap为内存地址映射操作。驱动程序的设计是通过实现个中操作函数的基本功能,为相应的设备在应用层提供统一的接口。 下面是本文中的HPI接口的驱动程序的设备入口hpi_open函数,它负责打开、准备设备。 任何时候对字符设备(HPI)接口进行打开操作,都会调用设备的open入口点(hpi_open)。所以open函数(hpi_open)必须对将要进行的I/O操作(对DSP读写数据)做好必要的准备工作,例如设备是独占的,则open函数(hpi_open)必须将设备标记成忙状态,如上面例程中的①处两行所示。 3.2驱动程序中映射的实现 由于在Linux系统中,用户应用程序不能直接对驱动程序的内存空间进行操作,因此必须用到内存映射机制。内存映射是指把内核中的特定的内存空间映射到用户空间的内存中去。对驱动程序来说,内存映射可以提供给用户程序直接访问设备内存的能力。 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),这是从应用程序传过来的参数,以确定写数据区域的起始地址。自增写的代码和注释如下: |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:19 , Processed in 1.177311 second(s), Total 85, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号