基于arm_cortex-m处理器图像无线传输的应用_第1页
基于arm_cortex-m处理器图像无线传输的应用_第2页
基于arm_cortex-m处理器图像无线传输的应用_第3页
基于arm_cortex-m处理器图像无线传输的应用_第4页
基于arm_cortex-m处理器图像无线传输的应用_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要本论文主要阐述设计一款以ARMCORTEXM系列微处理器为核心的图像无线传输系统的设计方法和实现细节。论文主要针对未来对于智能家居以及安防设备的日益需求,采用迄今最为流行性能卓越的ARMCORTEXM系列嵌入式微处理器作为嵌入式智能设备的处理核心,并搭载使用MICRIUM公司的嵌入式实时操作系统UC/OSII。本论文开篇通过对智能家居和安防设备的需求分析及图像无线传输的发展现状,说明了现今以及未来人们希望图像监控能够无线获取,灵活操作和存取。接下来系统硬件设计,将介绍了图像无线传输系统的硬件组成及基本理论。然后进行系统软件设计,讲介绍了图像无线传输系统各硬件的驱动程序设计。最后实现实时操作系统应用,介绍了UC/OSII在图像无线传输系统的使用。展示了系统完成后运行效果,并指出该系统的不足及以后改进的方向。该智能设备实现了图形界面触摸操控、驱动摄像头图像的采集、对图像的无线传输、接收和存储等功能,并测试表明该设备达到了预期的稳定要求。关键字ARMCORTEXMUC/OSII无线图像传输ABSTRACTTHISTHESISDESCRIBESTHEDESIGNOFACOREARMCORTEXMSERIESMICROPROCESSORSMARTHOMESYSTEMDESIGNMETHODSANDIMPLEMENTATIONDETAILSFOCUSEDONTHEFUTUREISTHEINCREASINGDEMANDFORSMARTHOMEANDSECURITYEQUIPMENT,BYFARTHEMOSTPOPULARHIGHPERFORMANCEARMCORTEXMFAMILYOFEMBEDDEDMICROPROCESSORASAPROCESSINGCOREFOREMBEDDEDINTELLIGENTDEVICES,ANDEQUIPPEDWITHMICRIUMSEMBEDDEDREALTIMEOPERATINGSYSTEMUC/OSIITHEFIRSTPARTOFTHESYSTEMANALYSIS,THEDEMANDFORSMARTHOMEANDSECURITYEQUIPMENTANDTHEDEVELOPMENTSTATUSOFTHEWIRELESSTRANSMISSIONOFTHEIMAGE,INDICATINGTHEPRESENTANDFUTUREIMAGEMONITORINGTOWIRELESSACCESS,FLEXIBLEOPERATIONANDACCESSTHESECONDPARTOFTHESYSTEMHARDWAREDESIGN,WIRELESSIMAGETRANSMISSIONSYSTEMHARDWARECOMPONENTSTHETHIRDPARTOFTHESYSTEMSOFTWAREDESIGN,WIRELESSIMAGETRANSMISSIONSYSTEMHARDWAREDRIVERDESIGNTHEFOURTHPARTOFTHEREALTIMEOPERATINGSYSTEMDESIGNOFREALTIMEOPERATINGSYSTEMUC/OSIITRANSPLANTATIONINTHEARMCORTEXMSERIESPROCESSORSTHESMARTDEVICESTOACHIEVETHEGRAPHICALINTERFACETOUCHCONTROL,DRIVERCAMERAIMAGEACQUISITION,WIRELESSIMAGETRANSMISSION,RECEIVINGANDSTORAGE,ANDTESTSSHOWTHATTHEEQUIPMENTTOACHIEVETHEDESIREDSTABILITYREQUIREMENTSKEYWORDSARMCORTEXMUC/OSIIWIRELESSIMAGETRANSMISSION目录第1章绪论111课题背景112图像无线传输发展现状2第2章系统硬件设计321系统框图322系统硬件实现3第3章系统软件设计1431无线模块驱动程序设计1432摄像头驱动程序设计1733LCD显示驱动程序设计1934文件系统21第4章实时操作系统应用2341UC/OSII实时操作系统介绍2342在UC/OSII运行程序24第5章系统实现3151图像无线传输系统最终运行结果3152图像无线传输系统不足以及改进33结束语34参考文献35附录1各模块驱动程序一览36附录2电路原理图39第1章绪论本章通过对智能家居和安防设备的需求分析及图像无线传输的发展现状,说明了现今以及未来人们希望图像监控能够无线获取,灵活操作和存取。11课题背景如今摄像头监控、图像显示、无线数据传送和无线控制已经广泛地应用在人类生活及生产各个领域当中。如家电、汽车、交通安全、工业生产、电子电力等。在半导体集成电路芯片和数字技术没有广泛运用的过去,人类只能依赖超声波、红外传感、电磁等手段进行监控。对距离稍微远的场景使用来说,开发起来很麻烦,费工费,使用起来也不是很方便。目前,国际先进的实时监控系统都实现了图像采集,并且有部分设备实现无线收发并显示的功能。以前在安防监控系统当中需要密密麻麻的装上一大堆传感器,如今已被一个拇指般大小的、毫不起眼的数字摄像头所替代了。OV系列的数字摄像头已经根据不同应用领域的不同需求推出了多款产品,性能良好、价格低廉。使得我们对图像传感器有了足够的选择。本课题研究的是图像采集系统中的无线传输和显示。在翻阅了大量资料后,决定以CMOS摄像头应用技术和嵌入式应用技术为核心进行开发。其中,涉及到了一些嵌入式实时操作系统应用开发、ARM技术开发应用、图像采集、TFT显示、24G无线传送模块的应用等。在对上述技术问题进行充分深入地分析之后,制定了简便可行的技术方案。并且以理论分析和该技术方案为基础,在不断地实验和方案调整代码调试中,终于完成了一个可以应用在一般智能家居的图像无线传输系统的设计。完成系统设计之后,还通过一系列测试,测试结果证明,设计的图像无线传输系统,完全达到了课题预期制定的各项指标,成功地完成了课题的最终目标实现基于ARMCORTEXM系列处理器的图像无线传输系统。12图像无线传输发展现状图像无线传输具有十分广阔的应用前景,在军事、国防、工农业、城市管理、生物医疗、环境监测、危险区域等许多领域都有重要的科研价值和潜在的实用价值,已经引起了人们广泛的关注。美国技术评论杂志把图像无线传感器视为未来新兴十大技术的首位。美国早在上个世纪90年代就着手对无线传感器网络展开了先期研究,并在军方应用与推广。美国军方的远景研究计划局(DARPA)陆续支持了WINS、SMARTDUST等一系列重要的图像无线传感器项目。进入21世纪,随着传感器网络研究的深入发展,美国一些大型的IT企业(如MICROSOFT,INTEL等)也通过与高校合作的方式加入到图像无线传感器的研究队列中来。当前美国许多著名的大学在进行无线传感器方面的研究工作,如哈佛大学专注于无线传感器通信理论的研究;加州大学伯克利分校致力于传感器节点的研究与开发,目前市面上比较流行的MICA系列节点平台就是该分校的研究成果。在欧洲的一些国家,如英国、意大利也在开展该领域的研究工作。相对而言,国内对无线传感器的研究起步较晚,但是我国对无线传感器的发展也非常重视。从2002年开始,国家自然科学基金委员会已经批准了和无线传感器相关的多个课题,在国家发展改革委员会的下一代互联网示范工程中,也部署了和无线传感器相关的课题。除此以外,中科院、清华大学、北京邮电大学、浙江大学和中国科技大学等众多高等院校也积极开展对无线传感器网络的研究。由于在很多领域有广阔的应用前景,无线传感器的研究开发工作众多。当前,对WSN的研究主要集中在通信协议、能耗管理、定位算法等方面。通信协议的研究约占研究点的35;其次是能耗管理,约占16;再次是定位算法、体系结构设计和可靠性研究,三者共占研究点的24,然而在无线传感器的操作系统方面的研究相对较少。其实,WSN操作系统实现对硬件资源的抽象,并负责管理处理器、有限的内存等资源,它直接影响到系统的性能,因此研究WSN上的操作系统是很有必要的。此外,无线图像传输的研究还处于起步阶段,属于无线传感器领域内的一个新兴的研究课题,目前国内北京航天航空大学开始了这方面的研究。第2章系统硬件设计本章介绍了图像无线传输系统的硬件组成及基本理论。21系统框图摄像头模块发送端处理器ILI9325显示屏SD卡存储单元24G无线模块接受端处理器ILI9325显示屏SD卡存储单元24G无线模块能源供应部分能源供应部分图21图像无线传输工作原理框图处理器模块是整个传感器节点的核心部分,包括处理单元和存储单元,它负责控制整个节点的操作,处理所有相关数据;传感器模块是外围的设备的真正接口,负责监测区域内数据的采集和转换;无线通信模块负责与其他传感器节点进行无线通信,并传递数据;能量供应模块也就是传感器节点运行所需的电源,一般直接供电不太实际,通常采用微型电池。此外,还提供与用户的通信接口,方便与用户进行交互。图像无线传输工作原理框图见图2122系统硬件实现221ARM处理器系统核心部分采用ARM处理器。ARM公司在经典处理器ARM11以后的产品改用CORTEX命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。CORTEX系列属于ARMV7架构,这是ARM公司最新的指令集架构。ARMV7架构定义了三大分工明确的系列“A”(APPLICATION)系列面向尖端的基于虚拟内存的操作系统和用户应用,处理性能越来越接近于电脑,典型的产品有平板电脑、IPHONE、安卓手机和WINDOWSPHONE8;“R”(REALTIME)系列针面向实时系统;“M”(MICROCONTROLLER)系列面向微控制器。由于应用领域不同,基于V7架构的CORTEX处理器系列所采用的技术也不相同,基于V7A的称为CORTEXA系列,基于V7R的称为CORTEXR系列,基于V7M的称为CORTEXM系列。本系统设计便使用了CORTEXM系列的处理器。ARMCORTEXM处理器系列是一系列可向上兼容的高能效、易于使用的处理器,这些处理器旨在帮助开发人员满足将来的嵌入式应用的需要。这些需要包括以更低的成本提供更多功能、不断增加连接、改善代码重用和提高能效。CORTEXM系列针对成本和功耗敏感的MCU和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化。以更低的MHZ或更短的活动时段运行基于架构的睡眠模式支持比8/16位设备的工作方式更智能、睡眠时间更长。多个供应商之间的全球标准代码兼容性统一的工具和操作系统支持。每MHZ提供更高的性能能够以更低的功耗实现更丰富的功能。现在的面世的CORTEXM系列产品有CORTEXM0、M0、M1、M3、M4。222发射端核心部分发射端核心部分采用STM32F407VGT6处理器,STM32F407VGT6属于先进的CORTEXM4F内核,FPU浮点运算能力,增强的DSP处理指令;更多的存储空间,高达1M字节的片上闪存高达196K字节的内嵌SRAM;灵活的外部存储器接口;极致的运行速度,以168MHZ高速运行时可达到125DMIPS/MHZ的处理能力。该处理器是由ARM专门开发的最新嵌入式处理器,用以满足需要有效且易于使用的控制和信号处理功能混合的数字信号控制市场。高效的信号处理功能与CORTEXM处理器系列的低功耗、低成本和易于使用的优点的组合,旨在满足专门面向电动机控制、汽车、电源管理、嵌入式音频和工业自动化市场的新兴类别的灵活解决方案。片上资源有LCD并行接口,8080/6800模式;时钟,复位和电源管理18V至36V供电和I/O的POR,PDR,PVD和BOR4至26MHZ晶体振荡器内部16MHZ工厂调整的RC(精度为1)32KHZ振荡器作为RTC与校准内部32KHZRC与校准睡眠,停机和待机模式VBAT供应RTC,2032位的备份寄存器可选的4KB备份SRAM;3个12位,24MSPS一个A/D转换器多达24通道,三重交叉模式下的性能高达72MSPS;2个12位D/A转换器;通用DMA具有FIFO和突发支持的16路DMA控制器;多达17个定时器12个16位定时器,和2个频率高达168MHZ的32位定时器,每个定时器都带有4个输入捕获/输出比较/PWM,或脉冲计数器与正交增量编码器输入;高级连接功能USB20全速器件/主机/OTG控制器,带有片上物理层USB的20HIGHSPEED/FULLSPEED设备/主机/OTG控制器的专用DMA,片上全速PHY和ULPI10/100以太网MAC专用DMA支持IEEE1588V2的硬件,MII/RMII;14位PARALLEL照相机接口速度高达54MB/S。223接收端核心部分接收端核心部分使用STM32F103ZET6处理器,STM32F103ZET6处理器增强型系列使用高性能的ARMCORTEXM332位的RISC内核,ARM的CORTEXM3处理器是最新一代的嵌入式ARM处理器,以72MHZ主频运行时可达到120DMIPS/MHZ的处理能力,它为实现MCU的需要提供了低成本的平台、缩减的管脚数目、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。ARM的CORTEXM3是32位的RISC处理器,提供额外的代码效率,在通常8和16位系统的存储空间上发挥了ARM内核的高性能。片上资源有LQFP144脚,512K片内FLASH(相当于硬盘),64K片内RAM(相当于内存),片内FLASH支持在线编程IAP;片内双RC晶振,提供8M和32K的频率;3路共16通道的12位AD输入,2路共2通道的12位DA输出;支持片外独立电压基准;8个定时器;3个SPI接口;2个IIC接口;2个IIS接口;5个USART通信接口;1个SDIO接口;1个USB微控制器;1个CAN微控制器。所有的I/O口都可作为外部中断触发端。这些丰富的外设配置,使得STM32F103XX增强型微控制器适合于多种应用场合电机驱动和应用控制;医疗和手持设备;PC外设和GPS平台;工业应用,可编程控制器、变频器、打印机和扫描仪;警报系统,视频对讲,和暖气通风空调系统224无线模块图22NRF24L01无线模块原理图发送端和接收端的无线模块硬件原理均一致。NRF24L01是NORDIC公司最近生产的一款工作在24GHZ25GHZ的ISM频段的单片无线收发器,采用FSK调制,内部集成NORDIC自己的ENHANCEDSHORTBURST协议。可以实现点对点或是1对6的无线通信。无线通信速度可以达到2M(BPS)。无线收发器包括频率发生器、增强型“SCHOCKBURST”模式控制器、功率放大器、晶体振荡器、调制器和解调器。输出功率频道选择和协议的设置可以通过SPI接口进行设置。几乎可以连接到各种单片机芯片,并完成无线数据传送工作。从驱动控制的角度来看,只需关注NRF24L01对处理器链接的六个控制信号,分别为CE、CSN、SCK、MISO、MOSI、IRQ。CE芯片的模式控制线。在CSN为低的情况下,CE协同NRF24L01的CONFIG寄存器共同决定NRF24L01的状态。CSN芯片的片选线,CSN为低电平芯片工作。SCK芯片控制的时钟线(SPI时钟)MISO芯片控制数据线(MASTERINPUTSLAVEOUTPUT)MOSI芯片控制数据线(MASTEROUTPUTSLAVEINPUT)IRQ中断信号。无线通信过程中MCU主要是通过IRQ与NRF24L01进行通信。225发送端图像采集部分图23OV7670摄像头图27是OV7670摄像头与处理器的连接图。OV7670图像传感器,体积小、工作电压低,提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据。该产品VGA图像最高达到30帧/秒。OV7670/7171共有656X488即320128个像素,其中640X480个有效(即307200)。SDASCCB数据口;SCLSCCB始终输出口;RESET初始化所有寄存器到默认值0RESET模式1一般模式;VSYNC帧同步;PWDNPOWERDOWN模式选择0工作1POWERDOWN;HSYNC行同步;MCLCK系统时钟输入;PCLK像素时钟;D0D7数据位07;使用摄像头,尤其是采用CMOS芯片的产品时就更应该注重技巧A不要在逆光环境下使用(这点CCD同),尤其不要直接指向太阳,否则“放大镜烧蚂蚁”的惨剧就会发生在您的摄像头上。B环境光线不要太弱,否则直接影响成像质量。克服这种困难有两种办法,一是加强周围亮度,二是选择要求最小照明度小的产品,现在有些摄像头已经可以达到5LUX。C要注意的是合理使用镜头变焦,不要小瞧这点,通过正确的调整,摄像头也同样可以拥有拍摄芯片的功能。受市场情况及市场发展等情况的限制,摄像头采用CCD图像传感器的厂商为数不多,主要原因是采用CCD图像传感器成本高的影响。在MOBILEPHONE上使用的CAMREA还是以CMOS为主,不仅是价格而且体积也是影响在MOBILEPHONE上使用CCDCAMERA的另一原因。SCCB总线SCCB是欧姆尼图像技术公司(OMNIVISION)开发的一种总线,并广泛的应用于OV系列图像传感器上。SCCB是一种3线的总线,它由SCCB_E、SIO_C、SIO_D组成。在为了减少引脚的芯片上缩减为2根线,SIO_C和SIO_D。2线的SCCB总线只能是一个主器件对一个从器件控制,但3线SCCB接口可以对多个从器件控制。2线的SCCB总线需要主机具备如下条件中的一个或多个一、主机必须能够使SIO_D处于第三态,即高阻态。二、主机必须能够驱动SIO_D比正常识别电压更高或更低。图24SCCB时序图SIO_E输出(主机发出,单向),低电平有效,总线空闲时主机驱动此引脚为1,驱动为0时表示开始传输或者挂起模式(在表面没有该引脚的芯片中,该引脚默认为可用的,并且保持高电平)。它标志这数据传输的开始和结束,高电平向低电平转变表示开始传输,低电平向高电平转变表示结束传输。在数据传输过程中,SIO_E必须保持为0。SIO_C输出(主机发出,单向),总线空闲时主机驱动此引脚为1;当驱动SIO_E为0时,主机驱动此引脚为0或1;当挂起时主机驱动SIO_C为0;它表明每一个传输位;SIO_C为1时表示一个传输位;SIO_D只能在SIO_C为0时发生变化。SIO_DI/O口,双向传输线,既可以由主机驱动也可以由从机驱动。当总线空闲时保持浮动,状态不固定(0、1或三态高阻)。当系统挂起时驱动该引脚为0。为了不让该引脚产生未知的状态,主机和从机有职责保持该引脚的电平。SIO_C为1表示传输一位数据,SIO_D只能在SIO_C为0时发生变化。然而,在开始传输和结束传输时却可以存在例外。当SIO_E有效且SIO_C变为0之前,SIO_D可以被驱动为0。在SIO_E失效前,SIO_C转为1时,SIO_D也能被驱动为0。摄像头工作时序图25摄像头工作时序图当图像当中一行的数据来临之际,行中断引脚HREF0,TPHL过后HREF1,表示像素数据开始输出,在像素时钟引脚PLCK0时改变输出数据,PLCK1是通知处理器数据输出稳定,以此反复输出一行数据。226LCD显示部分图26发送端TFT屏电路原理图图27接受端TFT屏电路原理图发送端和接收端的显示屏均使用ILI9325芯片驱动的显示屏。在ARMCORTEXM系列处理器内部,是通过FSMC(静态存储器控制器)来控制ILI9325,ARMCORTEXM系列处理器把TFT模块当做一块NORFLASH来操作。使用FSMC控制器后,可以把FSMC提供的FSMC_A250作为地址线,而把FSMC提供的FSMC_D150作为数据总线。当存储数据设为16位时,地址各位对应FSMC_A240,数据位对应FSMC_D150。FSMC包括4个模块1AHB接口(包括FSMC配置寄存器)2NOR闪存和PSRAM控制器(驱动LCD的时候LCD就好像一个PSRAM的里面只有2个16位的存储空间,一个是DATARAM一个是CMDRAM)3NAND闪存和PC卡控制器4外部设备接口注FSMC可以请求AHB进行数据宽度的操作。如果AHB操作的数据宽度大于外部设备(NOR或NAND或LCD)的宽度,此时FSMC将AHB操作分割成几个连续的较小的数据宽度,以适应外部设备的数据宽度。FSMC对外部设备的地址映像从0X60000000开始,到0X9FFFFFFF结束,共分4个地址块,每个地址块256M字节。可以看出,每个地址块又分为4个分地址块,大小64M。对NOR的地址映像来说,我们可以通过选择HADDR2726来确定当前使用的是哪个64M的分地址块,如下页表格。而这四个分存储块的片选,则使用NE41来选择。数据线/地址线/控制线是共享的。FSMC提供了所有的LCD控制器的信号FSMC_D16016BIT的数据总线;FSMCNEX分配给NOR的256M,再分为4个区,每个区用来分配一个外设,这四个外设的片选分为是NE1NE4,对应的引脚为PD7NE1,PG9NE2,PG10NE3,PG12NE4;FSMCNOE输出使能,连接LCD的RD脚;FSMCNWE写使能,连接LCD的RW脚;FSMCAX用在LCD显示RAM和寄存器之间进行选择的地址线,即该线用于选择LCD的RS脚,该线可用地址线的任意一根线,范围FSMC_A250。注RS0时,表示读写寄存器;RS1,表示读写数据RAM。227片存储部分图28SD卡存储部分存储部分使用SD卡,SD存储介质是一种非易失性外部存储器,可满足许多应用场合的要求。SD格式是“多媒体卡”(MMC)格式的继承产品。SD卡存储器一般工作于33V电压,具有适度的电流要求。SD卡的容量从几百兆节到最高的几十GB不等。容量范围如此之宽,可为众多应用提供充足的外部存储空间。SD总线有6根通信线和三根电源供应线CMD命令线是双向信号线。主机和卡通过PUSHPULL模式工作。DAT03数据线是双向信号线。主机和卡通过PUSHPULL模式工作。CLK时钟是从主机到卡的信号。CLK通过PUSHPULL模式操作。VDD是所有卡的电源供应线。VSS122根地线。SD卡可以通过单数据线(DAT0)或四根数据线(DAT0DAT3)进行数据传输。单根数据线传输最大传输速率为25MBIT/S,四根数据线最大传输速率为100MBIT/S。本次课题设计的系统使用四根数据线。第3章系统软件设计本章介绍了图像无线传输系统各硬件的驱动程序的设计。31无线模块驱动程序设计发送端和接收端的无线模块驱动代码均由以上两个文件组成。对NRF24L01的操作方法见图31。对NRF24L01传送SPI数据设置NRF24L01为发送模式,指定发送速率和发送个数初始化处理器SPI接口发送指定数据发送函数是否返回0NOYES对NRF24L01传送SPI数据设置NRF24L01为接收模式,指定接收速率和接收个数初始化处理器SPI接口接收数据接收函数是否返回0NOYES图311NRF24L01发送数据操作流程图图312NRF24L01接收数据操作流程图图31NRF24L01工作在发送和接收的操作流程图对NRF24L01的操作很简单,不论是发送还是接收基本步骤都是先初始化处理器SPI接口,然后传送参数对NRF24L01进行设置,接下来便可以使用NRF24L01进行发送数据(或接收数据)。为了确保不发漏(或接漏)数据,每次发送(或接收)都通过WHILE循环检查是否发送(或接收)成功,发送(或接收)函数返回0表示无误,返回1表示还没成功或还没完成发送(或接收)。NRF24L01C提供用户使用的函数有(完整形式参见附录1NRF24L01H文件的用户函数)NRF24L01_INITNRF24L01_DETACHNRF24L01_TXMODENRF24L01_RXMODENRF24L01_TXPACKETNRF24L01_RXPACKETNRF24L01_INIT函数初始化ARM处理器的SPI接口,完成SPI初始化后检测接口上是否连接好NRF24L01无线模块。NRF24L01_DETACH函数用于解除NRF24L01无线模块对ARM处理器的SPI接口的占用,也有减低系统功耗功能。NRF24L01_TXMODE设置NRF24L01无线模块为发送模式,包括设置通讯速率,通讯字节个数,本地地址和接收地址,频道的自动答应允许是否使能,允许接受的频道号和频道个数,自动重发时间和次数,输出功率频道选择。NRF24L01_RXMODE设置NRF24L01无线模块为接收模式,包括设置通讯速率,通讯字节个数,本地地址和接收地址,频道的自动答应允许是否使能,允许接受的频道号和频道个数,自动重发时间和次数,输出功率频道选择。NRF24L01_TXPACKET发送具体数据包。具体实现代码UNSIGNEDCHARNRF24L01_TXPACKETUNSIGNEDCHARTX_BUF,UNSIGNEDCHARLENUNSIGNEDCHARSTATUS0X00NRF24L01_CE_LOWNRF24L01_WRITE_BUFRF_WRITE_REGRX_ADDR_P0,NRF24L01_ADDRESS,NRF24L01_ADR_WIDTH_5B/装载接收端地址NRF24L01_WRITE_BUFWR_TX_PLOAD,TX_BUF,LEN/装载数据NRF24L01_CE_HIGHWHILENRF24L01_IRQ0STATUSNRF24L01_READ_REGRF_READ_REGSTATUSNRF24L01_WRITE_REGRF_WRITE_REGSTATUS,STATUSIFSTATUSRETURNMAX_TXIFSTATUSRETURN0XFF/其他原因发送失败NRF24L01_RXPACKET接收具体数据包。具体实现代码UNSIGNEDCHARNRF24L01_RXPACKETUNSIGNEDCHARRX_BUF,UNSIGNEDCHARLENUNSIGNEDCHARREVALE0UNSIGNEDCHARSTA0WHILENRF24L01_IRQ0STANRF24L01_READ_REGRF_READ_REGSTATUS/读取状态寄存其来判断数据接收状况NRF24L01_WRITE_REGRF_WRITE_REGSTATUS,STA/接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志IFSTA/READRECEIVEPAYLOADFROMRX_FIFOBUFFERNRF24L01_WRITE_REGFLUSH_RX,0X00REVALERX_OK/读取数据完成标志RETURNREVALE32摄像头驱动程序设计图像采集端的摄像头驱动代码由以上两个文件组成。OV7670的操作流程如图32。初始化处理器SCCB接口和摄像头接口通过SCCB总线对OV7670写设置参数SCCB传送的数据书否完全到达OV7670启动OV7670OV7670采集图像NOYES图32对OV7670操作流程图OV7670C提供用户使用的函数有(完整形式参见附录1OV7670H文件的用户函数)OV7670_INITOV7670_STARTOV7670_DETACHOV7670_ISROV7670_INIT初始化ARM处理器摄像头接口和OV7670模块,并检测OV7670模块是否连接在ARM处理器摄像头接口上。具体实现代码UNSIGNEDCHAROV7670_INITVOIDUNSIGNEDCHARIDCMI_NVIC_INITDCIM_GPIO_INITSCCB_INITOV7670_RESETDELAY_MS5FORI0IOV7670_REG_NUMIIF0OV7670_WRITEREGOV7670_REGI0,OV7670_REGI1RETURN1RETURN0OV7670_START函数启动OV7670模块。此函数跟具体的硬件操作有关,具体实现代码VOIDOV7670_STARTVOIDLCD_WRITEREG0X0003,0X1008LCD_SETCURSOR0,319LCD_WRITERAM_PREPARERCC_AHB2PERIPHCLOCKCMDRCC_AHB2PERIPH_DCMI,ENABLEDCMI_ITCONFIGDCMI_IT_FRAME,ENABLE/DCMI中断DMA_CMDDMA2_STREAM1,ENABLEDCMI_CMDENABLEDCMI_CAPTURECMDENABLELCD_REG0X22OV7670_DETACH用于解除OV7670模块对ARM处理器的摄像头接口的占用,也有减低系统功耗功能。OV7670_ISR函数是OV7670模块中断服务函数,每当OV7670模块采集完一幅图像后便进入此函数进行关中断。此函数跟具体的硬件操作有很大关联,具体操作步骤和选用处理器有关,具体实现代码VOIDOV7670_ISRVOIDIFDCMI_GETITSTATUSDCMI_IT_FRAMERESETDCMI_CLEARITPENDINGBITDCMI_IT_FRAMELCD_SETCURSOR0,319LCD_WRITERAM_PREPARE33LCD显示驱动程序设计发送端和接受端LCD显示驱动代码由以上两个文件组成。ILI9325的操作流程如图33。通过FSMC初始化ILI9325初始化处理器FSMC接口写ILI9325的寄存器地址写ILI9325的寄存器数据图33ILI9325操作流程图ILI932XC提供用户使用的函数有(完整形式参见附录1ILI932XH文件的用户函数)LCD_INITIALIZTIONLCD_SETCURSORLCD_SETWINDOWSLCD_CLEARLCD_FONTLCD_DISPMDLCD_GETPOINTLCD_SETPOINTLCD_INITIALIZTION用于初始化ARM处理器的FSMC接口和LCD模块,有几个重要的参数需要注意0X0000,0X0001开启内部时钟0X0002,0X0700电源开启0X0050,0X0000水平GRAM起始位置0X0051,0X00EF水平GRAM终止位置0X0052,0X0000垂直GRAM起始位置0X0053,0X013F垂直GRAM终止位置第一个参数是LCD的寄存器地址,第二个值是给对应的寄存器写进对应的数值。LCD_SETCURSOR函数是设置LCD的坐标。LCD_SETWINDOWS函数是设置LCD显示得窗口大小。LCD_CLEAR函数是清除LCD并显示全屏为一种单一颜色。LCD_CLEAR函数设置LCD显示文字的字体。LCD_DISPMD函数设置LCD刷屏的方式。LCD_GETPOINT函数读取LCD屏指定像素的RGB值。LCD_SETPOINT函数是在LCD指定的像素设置其RGB值。34文件系统发送端和接受端SD存储底层驱动代码由以上两个文件组成。SDIO_SDC提供用户使用的函数有SD_ERRORSD_INITIALIZECARDSVOIDSD_ERRORSD_GETCARDINFOSD_CARDINFOCARDINFOSD_ERRORSD_GETCARDSTATUSSD_CARDSTATUSCARDSTATUSSD_ERRORSD_ENABLEWIDEBUSOPERATIONUINT32_TWIDEMODESD_ERRORSD_SELECTDESELECTUINT32_TADDRSD_ERRORSD_READBLOCKUINT8_TREADBUFF,UINT32_TREADADDR,UINT16_TBLOCKSIZESD_ERRORSD_READMULTIBLOCKSUINT8_TREADBUFF,UINT32_TREADADDR,UINT16_TBLOCKSIZE,UINT32_TNUMBEROFBLOCKSSD_ERRORSD_WAITREADOPERATIONVOIDSD_ERRORSD_WRITEBLOCKUINT8_TWRITEBUFF,UINT32_TWRITEADDR,UINT16_TBLOCKSIZESD_ERRORSD_WRITEMULTIBLOCKSUINT8_TWRITEBUFF,UINT32_TWRITEADDR,UINT16_TBLOCKSIZE,UINT32_TNUMBEROFBLOCKSSD_ERRORSD_WAITWRITEOPERATIONVOIDSDTRANSFERSTATESD_GETTRANSFERSTATEVOIDSD_ERRORSD_STOPTRANSFERVOIDSD_ERRORSD_ERASEUINT32_TSTARTADDR,UINT32_TENDADDRSD_ERRORSD_SENDSTATUSUINT32_TPCARDSTATUSSD_ERRORSD_SENDSDSTATUSUINT32_TPSDSTATUSSD_ERRORSD_PROCESSIRQSRCVOIDVOIDSD_PROCESSDMAIRQVOID由于直接操作SD卡存储数据十分复杂,因此移植了FAT文件系统来对SD卡进行管理操作。FAT文件系统是一种由微软发明并拥有部分专利的文档系统,供MSDOS使用,也是所有非NT内核的微软窗口使用的文件系统。CC936C文件是拓展了FAT文件系统对中文的支持。DISKIOC文件是FAT文件系统调用底层SD卡驱动代码的中间层。FFC文件是FAT文件系统的核心部分。FFCONFH文件是FAT文件系统的配置文件。FSEARCHC文件是FAT文件系统的路径搜索功能文件。INTEGERC文件定义了FAT文件系统自己的数据类型。第4章实时操作系统应用本章介绍了UC/OSII实时操作系统在图像无线传输系统中的应用。41UC/OSII实时操作系统介绍UC/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。UC/OSII的前身是UC/OS,最早出自于1992年美国嵌入式系统专家JEANJLABROSSE在嵌入式系统编程杂志的5月和6月刊上刊登的文章连载,并把UC/OS的源码发布在该杂志的BBS上。UC/OS和C/OSII是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将UC/OSII嵌人到开发的产品中。UC/OSII具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。UC/OSII已经移植到了几乎所有知名的CPU上。其252版本通过了美国航天航空管理局的安全认证,可靠性非常高。UC/OSII目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。本课题选用UC/OSII里最新的291版本,该版本最多可以支持256个任务,分别对应优先级0255,其中0为最高优先级。255为最低级,系统保留了4个最高优先级的任务和4个最顶优先级的任务,用户可以使用其他优先级。UC/OSII提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。系统初始化时会自动产生两个任务一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前CPU的利用率。由于UC/OSII实时性能优异,本课题我选用了该操作系统。42在UC/OSII运行程序运行任务0是否完整采集一幅图像任务1把一幅完整图像保存到SD卡任务2驱动无线模块发送图像数据系统启动建立任务0,1,2NONOYESYES驱动摄像头采集图像发邮箱通0知任务1图像是否发送完成返回任务0发邮箱通1知任务2图41发送端程序流程图见图41,描述了发送端UC/OSII的整体运行流程。UC/OSII启动后,建立了任务0,任务1,任务2。任务0负责采集图像和显示采集图像,当一幅图像采集完成后,任务0发邮箱通知任务1保存图像到SD卡,任务1保存好后CPU返回任务0,任务0发邮箱通知任务2驱动无线模块发送图像数据,每发送20字节后等待接收端应答信号,再发送下一组20字节,知道一幅图像发送完成。发送端代码如下/发送端主函数/INTMAINVOIDOSINIT/初始化UC/OSII,实时内核OSTASKCREATEAPP4_TASK0,VOID0,OS_STKOSTASKCREATEAPP4_TASK1,VOID0,OS_STKOSTASKCREATEAPP4_TASK2,VOID0,OS_STKOSSTART/启动操作系统RETURN0OS_EVENTAPP4_MBOX2/定义两个事件邮箱指针/任务APP4_TASK0负责摄像头图像采集和显示/STATICOS_STKAPP4_TASK0_STK512STATICVOIDAPP4_TASK0VOIDP_ARGCHARMSG11,MSG22WHILEOSTASKDELREQ30OS_ERR_TASK_NOT_EXISTOSTIMEDLY10WHILEOV7670_INITOV7670_STARTVOIDP_ARGWHILEOS_TRUEIFDCMI_GETFLAGSTATUSDCMI_FLAG_FRAMERISETDCMI_CLEARFLAGDCMI_FLAG_FRAMERIOV7670_DETACHOSMBOXPOSTAPP4_MBOX0,VOIDOSMBOXPOSTAPP4_MBOX1,VOIDOV7670_START/任务APP4_TASK1负责图像无线传输/STATICOS_STKAPP4_TASK1_STK512STATICVOIDAPP4_TASK1VOIDP_ARGCHARMSG1UNSIGNEDCHARERRAPP4_MBOX0OSMBOXCREATEVOID0VOIDP_ARGWHILEOS_TRUEMSG1OSMBOXPENDAPP4_MBOX0,0,IFERROS_ERR_NONEIFMSG11IMAGE_TRANSMIT/任务APP4_TASK2负责图像保存/STATICOS_STKAPP4_TASK2_STK512STATICVOIDAPP4_TASK2VOIDP_ARGCHARMSG2UNSIGNEDCHARERRUNSIGNEDINTN0APP4_MBOX1OSMBOXCREATEVOID0VOIDP_ARGWHILEOS_TRUEMSG2OSMBOXPENDAPP4_MBOX1,0,IFERROS_ERR_NONEIFMSG22WHILEGUI_PRTSCREENPHOTOG_PATHN第一个函数是主函数,初始化操作系统,创建了任务APP4_TASK0、任务APP4_TASK1、任务APP4_TASK2,最后启动系统。第二个函数是任务APP4_TASK0,初始化摄像头,启动摄像头,并在没采集一幅图像后发送系统邮件给任务APP4_TASK1、任务APP4_TASK2。第三个函数是任务APP4_TASK1,建立系统邮件0,并在接收到任务APP4_TASK0发来的系统邮件后开始发送图像。第四个函数是任务APP4_TASK2,建立系统邮箱1,并在接收到任务APP4_TASK0发来的系统邮件后保存图像到SD卡中。任务0把一幅完整图像保存到SD卡任务0驱动无线模块接收图像数据系统启动建立任务0图像是否接收完成NOYES图42接收端程序流程见图42,描述了接收端UC/OSII的整体运行流程。UC/OSII启动后,建立了任务0,当无线模块接收到数据时,它会通知CPU去读取数据,每读完20字节就答应发送端一次,然后发送端再发送下一组20字节数据。当节后完整的一幅图像后,任务0把接收的图像保存到SD中。接受端代码如下/接收端主函数/INTMAINVOIDOSINIT/初始化UC/OSII,实时内核OSTASKCREATEOS_TASKCREATE,VOID0,OS_STK/启动实时内核前必须创建一个任务OSSTART/启动操作系统RETURN0/接受端的任务APP5_TASK0完成图像的接受和保存/STATICOS_STKAPP5_TASK0_STK1024STATICVOIDAPP5_TASK0VOIDP_ARGUNSIGNEDINTN0WHILEOSTASKDELREQ30OS_ERR_TASK_NOT_EXISTOSTIMEDLY10WHILENRF24L01_INITNRF24L01_RXMODENRF24L01_PLOAD_WIDTH_20B,NRF24L01_SPEED_2MBPSVOIDP_ARGWHILEOS_TRUEIMAGE_RECEIVEWHILEGUI_PRTSCREENPHOTOG_PATHN第一个函数是主函数,初始化操作系统,创建了任务APP4_TASK0、任务APP4_TASK1、任务APP4_TASK2,最后启动系统。第二个函数是任务APP5_TASK0,初始化无线模块后便开始等待数据,当有数据来临便开始接收数据,保存数据到SD卡。第5章系统实现本章展示了系统完成后运行效果,并指出该系统的不足及以后改进的方向。51图像无线传输系统最终运行结果本课题设计的操作系统和软件程序的开发设计选择在ARMMDK45开发环境下完成。ARMMDK前身是KEILC51,KEIL公司2005年由ARM公司收购,用于调试ARM7,ARM9,CORTEXM内核。由于ARMMDK对ARMCORTEXM处理器的良好支撑,对软件代码的高性能优化和ARMMDK友好的人机交互界面和易于使用,ARMMDK被我选择作为主要的开发工具,得到了良好的开发效率。本人初初接触ARM时使用的开发环境是ADS12,由于MDK的编译器是RVCT,ADS12是ARM很早的产品,因此,MDK整体性能要好于ADS12。实际使用中,MDK支持的ARMCORE比ADS12多(ADS12支持ARM7、ARM9、ARM10,ARM10已经被INETL买断成为XSCALE架构,目前市面上很少有ARM10的产品,可以忽略,可以说ADS12只支持ARM7和ARM9,而MDK支持ARM7、ARM9和CORETEXM/R)。MDK的调试功能也比ADS12强。综上所述,ADS12无论从价格和性能都落后MDK。而RTOS原本开头使用的是现今国产十分优秀的开源免费操作系统RTTHREAD(102版本),在开发的过程当中,发现SPI和FSMC等总线工作速度较慢,LCD刷屏和摄像头采集图像迟钝,但也不以为然。到完成整体系统后,便把各模块驱动移植到UC/OSII(291版),发现外设模块工作速度有明显的提升,最明显的是ARMCORTEXM4在UC/OSII下采用UCGUI的刷屏测试程序时每秒10089万像素。而RTTHREAD为每秒30万像素,采集LCD触摸功能的SPI总线在UC/OSII也比RTT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论