基于ARM的数字油耗仪设计_第1页
基于ARM的数字油耗仪设计_第2页
基于ARM的数字油耗仪设计_第3页
基于ARM的数字油耗仪设计_第4页
基于ARM的数字油耗仪设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

-基于ARM的数字油耗仪设计【摘要】:本论文设计了一种基于ARM的数字油耗器,其中包括硬件电路设计、硬件电路调试、软件设计、软件调试以及对于整体程序调试后结果的总结与探讨。设计的主要部分在于ARM芯片选择和USB传输以及上位机部分软件设计。该电路系统主要应用了高性价比,低能耗的ARM处理器STM-32,通过压力传感器输出的几毫伏电压经过运放放大倍数后经A/D转换变为数字信号再由ARM芯片控制USB的数据传输,再通过Labview软件设计的上位机程序读取数字信号,最后根据信号值与油耗的线性关系显示油耗的重量值。该论文巧妙利用ARM芯片的处理功能,加上上位机软件的桥梁作用,实现信号完整的显示在屏幕上。整体目标要求所设计的油耗仪具有很高的经济性、可靠性、稳定性、可实现性以及安全性。【关键词】:ARM;数字油耗;上位机;-i-Abstract:ThispaperpresentsadigitalfuelconsumptiondevicebasedonARM,includinghardwarecircuitdesignanddebuggingofhardwarecircuit,softwaredesign,softwaredebuggingandfortheoverallprogramdebuggingresultsummaryanddiscussion.ThemainpartofthedesignliesinthechoiceoftheARMchipandUSBtransmissionpartandtheuppermachinesoftwaredesign.Thiscircuitsystemismainlyusedforcost-effective,low-powerARMprocessorSTM-32,throughseveralmillivoltpressuresensoroutputvoltageafterop-ampmagnificationbyA/DconverterintodigitalsignalandthencontrolledbyARMchipsofUSBdatatransfer,throughthePCapplicationreadsthedigitalsignaloftheLabviewsoftwaredesign,accordingtothesignalvalueandtheweightofthefuelconsumptionaccordingtothelinearrelationshipbetweenthefuelconsumptionvalue.ThecleveruseofprocessingfunctionofARMchip,theroleofabridgeandPCsoftware,torealizethesignalintegrityofthedisplayonthescreen.Fuelconsumptioninstrumentdesignoverallobjectivesofhighereconomy,reliability,stability,feasibilityandsafety.Keywords:,ARM;thedigitalfuelconsumption;uppermachine-ii-目录前言.2第1章系统方案与分析.3第1.1节整体思路.3第1.2节系统整体结构分析.3第1.3节系统的各模块的设计思想.3第2章硬件电路设计.5第2.1节ARM芯片.5第2.2节A/D转换模块.6第2.3节接口模块.7第2.4节传感器.8第2.5节电源模块.8第3章软件电路设计.11第3.1节Labview软件.11第3.2节Kiel软件.11第3.3节程序流程图.12第4章系统测试与问题.13第4.1节Kiel的运行.13第4.2节整个上位机测试过程.13第4.3节正确的调试结果.14第4.4节测试结果误差分析.15结论.16参考文献.17致谢.18附录.19附录1:实物照片说明.19附录2:部分源程序.21第0页前言随着时代的进步,改革开放的迅速的发展,小汽车走进千家万户,而对于汽车的油耗显示也越发的重要。降低油耗已经成为小汽车主要潮流,而对于油耗的测量精确要求也更加的重要。ARM(AdvancedRISCMachines)是微处理器行业的一家知名的现代化企业,企业自1990年成立以来,因为设计高性能、高性价比、低功耗的32位RISC处理器、相关技术及软件而被众所周知。因为其技术在全世界闻名软件、半导体和OEM厂商的迅捷推行与遍及,衍生出一类各具特色的低功耗高性价比微处理器,ARM同样成为这种处理器和技术的代名词。智能手机的普及也是ARM发展的催化剂,由于智能手机对于处理要求的增加。几乎每一款智能手机都是用ARM芯片。同时ARM与因此确立了自己的地位。由于对ARM强大的运算能力的支持,我们丰富的外围设备,良好的技术,逐步降低价格机制,今天已成为嵌入式系统开发的首选。ARM处理器依据其体系结构和运算能力的不同分为ARM7、ARM9、ARM9E、ARM10等众多系列。而目前国内外汽车工业发达国家更加注重环保和节能减排。他们的汽车油耗比较先进,投入的财力和人力比较多。而且他们采用微电脑技术,正在开放智能型的油耗仪。第1页第1章系统方案与分析第1.1节整体思路设计要求:设计一个油耗记录并显示油耗的系统。电压传感器的输出信号(几毫伏)通过放大器放大,然后转换成数字信号的模数转换,通过手臂控制USB数据传输。通过上位机软件读取以上数字信号。由于AD转换的结果和油耗的线性关系,最后通过上位机软件读取并显示油耗的重量值。第1.2节系统整体结构分析如图1-1所示,采用ARM-STM32为主控,通过液位传感器获得模拟信号,然后通过运放放大,A/D转换转换采集数据信息再通过ARM控制USB数据传输,通过电脑中的上位机软件读取信号,得出结果。USB传输图1-1模块图根据图1-1所示,可知系统的整体工作流程如下:测量好的油耗结果由液位传感器变为模拟信号,而模拟信号不能直接被ARM直接处理。同时由于产生的模拟信号只有几毫伏,所以要经过运放单元进行放大然后经过A/D转换电路得到数字信号。再由ARM-STM32控制USB进行数据传输,最终由于线性关系得出油耗的多少。至此可以得出油耗的多少。第1.3节系统的各模块的设计思想首先通过对ARM-STM32各个端口的设置,以及选择合适的定时器工作方式和串行口工作方式,为了实现ARM与各功能模块之间的通信,初始化设置定时器和串行端口。用以实现设定ARM和各个功能模块芯片之间通讯联络。在主程序模块中,工作的环节要使ARM初始化同时交代程序中各个变量和分派地址空间。而且判断各模块之间串接口是否相互通信。其中对ARM中最为关键的是连接子程序的各个标准模块。1.3.1.A/D转换单元液位传感器放大A/D转换ARM上位机软件笔记本显示单元第2页ARM收到传感器的电信号为模拟信号,模数变换即A/D转换,或简称ADC,寻常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。而本设计中,是使用软件部分对于模拟信号转变为数字信号。使得A/D模块更加简单、方便。1.3.2.ARM控制USB传输单元利用ARM芯片对A/D测量的数值进行处理和传输,USB控制器有2类,一种是单片机所控制的USB接口。如Cypress公司所出产的EZ2USB(基于8051)系列芯片CY7C68013、CY7C64613等;另一种是独立的USB控制器,如Philips公司的PDIUSBD12、ISP1581,NetChip公司的NET2888,National公司的USBN9603等。第一个开发工具,虽然简单,但需要购买一个开发系统,特殊的投资是巨大的,和供应链管理绩效有限。特点是便宜的芯片,连接方便,可靠性高,但电影没有CPU,必须选择微处理器的协议处理和数据交换。本系统选择了片上不带CPU的性价比较高的USB2.0控制芯片ISP1581,其完全符合USB2.0样板,传输率可达480Mbps,采纳ISP1581能够快速开发出高性能的USB2.0设备,同时为了满足他的速度要求,主控器芯片选择了高性能、低功耗的ARM芯片STM-32。1.3.3.上位机显示上位机是指能够直接发出操控指令的计算机,屏幕上显示各种数字信号变化数值(液压,水位,温度等)。下位机是可以直接控制设备获取相关设备状况的计算机,一般是指PLC/单片机singlechipmicrocomputer/slave,computer/lowercomputer中之类的。计算机发送指令到下位机的第一,然后根据计算机解释成相应的命令序列信号,直接控制相应的设备。下位机不间断的阅读设备状态数据(通常是模拟),转换成数字信号并反馈给主机。总之,在千差万别的实际情况,但不能背离了上下位机的编程的需要,已经开发了专门的相关系统。利用LABVIEW软件的设计一个上位机的界面,显示出ARM控制的USB传输过来的数字信号。转换成对应的数值量。第3页第2章硬件电路设计第2.1节ARM芯片2.1.1.ARM公司ARM是英国的一家芯片策划公司,其最厉害的莫过于在32位嵌入式CPU核-ARM系列,最常用的是ARM7和ARM9,ARM公司主要提供IP(知识产权的核心的核心知识产权)的核心,是CPU内核,只包括最核心的部分,而并不是完整的处理器部分。2007年6月ST发表了她的第一款基于Cortex-M3并内嵌32K128K闪存的STM32微控制器系列产品,2007年6月公布了STM32。随着客户群的不断增加,ST将借助新产品系列巩固其在32位微控制器市场的地位。新产品系列的发表,将加快微控制器原件产品向高端的32位产品改观,并被越来越多的人们所了解。Cortex-M3是一个32位处理器核心。内部数据路径是一个32位,32位寄存器,存储器接口为32位。CM3采纳了哈佛布局,具有单独的指令总线和数据总线,能够让取指与数据访问大同小异。这样一来数据访问再也不占用指令总线,从而提高了机能。为了实现这一目标,立方厘米含有多种总线接口,各为自己的应用程序进行了优化,并且他们可以并行工作。2.1.2.STM-32组成STM-32主要由215K字节的Flash、2至5的USART、1至3的SPI、1到2的IC、2至4个的16位定时器、主振荡器、内嵌RC振荡器、实时钟、两个看门狗、复位电路、通道DMA以及I/O口所组成。2.1.3.STM-32优点最新的ARMCortex-M3内核的使用,先进的体系结构,实时性能和卓越的,杰出的功率控制。有优秀的创新的外设,易发展的最大程度的整合,可以使产品进入市场。而本设计所需求的对于ARM芯片的要求基本满足,所以本设计选择ARM-STM32.对于芯片ARM-STM32模块如图3-1所示,其中电源部分VDD接入USB接口,电源电压为3.3V。而VSS接地,对应的的PC1接液位传感器。而CAN部分接RS-232,对应其中的接口部分。PA10和PA11即对应接口读入与写出。第4页BOT06NRS7C_I/PD5U1A-WK2389JMLEV?FX.v图2-1ARM芯片第2.2节A/D转换模块2.2.1.A/D作用A/D是传感器信号和ARM之间的枢纽,只有通过A/D转换才能使得信号被ARM芯片读取。其功能是将模拟信号传换为数字信号,因为ARM只能识别数字信号。2.2.2.ARM芯片中A/D的几大特征一12位分辨率二模数转换结束,注入转换结束跟发生模拟看门狗事件时,中断三单次以及连续转换模式第5页四从通道0到通道n的自动化扫描模式五自校准六带内嵌的数据一致数据对齐七通道之间通常采样间隔的可编程八规则转换以及注入转换均含有外部触发选项项九间断模式十双重模式(带2个或以上ADC的器件)十一ADC转换时间2.2.3.A/D的开关控制通过设置adc_cr1寄存器ADON比特功率对ADC。当第一集ADON点,它会唤醒ADC从断电状态。ADC电延时一段时间后(tSTAB),重新开始设置ADON位变化。通过去除ADON点可以停止转换,和ADC被放置在电源关闭模式。在这种模式下,ADC几乎不消耗功率。第2.3节接口模块本设计所使用的是接口RS-232,因为RS-232适合短距离通信。而且价格便宜,使用方便。他适合数据的传输率在0至20000Bit/S的范围内通信。而ARM-STM32的接口通信2.5兆/S满足设计要求。而RS-485虽然传输率高,但是价格比较贵。而PC机默认只带RS-232接口。所以最后选择RS-232接口,进行数据的传输部分。134678U?LT9.vCKRAN_XJIP图2-2接口电路对于接口模块中如图2-2,LT1796是过压故障保护CAN收发器,保护数据的收发以及电源电压的稳定。后面的SIP2是一个数据包传送接口,保证RS-232的数据传输。第6页第2.4节传感器2.4.1.传感器的选择油耗传感器的油耗传感器是控制在开关磁簧开关触点,将测量到的输出信号的变化,水平和线性测量设备高度(水位)。其优点是精度很高,耐腐化和磨损;抗震性强,免维持,利用的寿命长;不起电火花,安全以及可靠,安装方便。但是由于油耗传感器的价格昂贵,所以不选择它。压力传感器的原理是将压力值转换为电信号输出的传感器。压力传感器正常由弹性的敏锐元件和位移的敏感元件所组成的。弹性敏感元件的功能是使被测压力作用于某个面积上并转换为应变量,之后由位移敏感的元件或应变计转换为与压力行成一定联系的电信号。有时把这两种元件的功能结合集于一体。我们选择压力传感器中的液位传感器。直接利用电信号代替传感器部分使得对于油耗存在不可知所以直接不选择。2.4.2.传感器的原理本论文中所选择的是液位传感器,型号为v2.0。所选择的传感器在前面有所比较。而所选的v2.0价格便宜,使用率高。如图2-3所示,传感器1端口接地,2端口为电压5V,而3端口接入A/D模块部分。然后通过一个运放进行发大,最后用运放做一个设计跟随器,使得电信号稳定,减少前后电路之间的影响,启一定的缓冲作用。R?10KR?10kR?10kR?10k321411U?AComment:LM324A567U?BLM324AR?100RAD_IN1C?104PC15v123J?sensorAD_IN15v图2-3传感器部分第2.5节电源模块2.5.1.电源电路第7页Vin1GND2+53U?940uFCSpJO下vot.KResLE6PHadrXA图2-4电源电路电源模块,如图所示的2-4,stm-32工作电压(VDD)是2.0-3.6v,稳压器稳压芯片所需的电压。其中ADC使用一个独立的电源供电。而电源器件部分LED是电源部分接入时,图中LED发光。提示电源已经接通。2.5.2.时钟电路8Mzf_ITZ图2-5外部晶振图2-6RTC晶振如图2-5和2-6所示,前者是外部晶振,后者是RTC晶振。由于外部晶振比较稳定。此中RTCCLK时钟源能够通过HSE/128、LSE或LSI时钟供应。而外部晶体振荡器是直流电能转换为交流电以一定的频率,产生一个时钟信号。实时时钟晶体是ARM芯片晶体振荡器,定时控制电路,由时钟配置寄存器的时钟(rcc_cfgr)MCO2:0位置控制在。复位以及启动模式第8页1243S?WDIP-.v0KRBOT3.3v10KR?Res2S?SW-PB100nfC?NRST1234567891011121314151617181920JTAG?3.3vNRSTPA13/TMSPA14/TCKPA15/TDIPB3/TDOPB4/TRST3.3v图2-7复位电路图2-8启动电路图2-7为ARM的复位电路,当SW-PB按下电路进入复位状态,数据寄存器的值变为0x00000000。在系统复位后,第4个SYSCLK的上升沿来临,锁存BOOT管脚的值。用户通过设置boot1和boot0销,复位后在启动模式(如图2-8)选择。当退出待机模式,引导销锁的价值。因此,在待机模式下,启动引脚应该保持的启动配置要求。在启动延迟,CPU将从0x00000000地址的地址上,并从存储器的起始地址0x00000004指示的执行代码。2.5.3.串口通信电路由于潜在的计算机串口RS-232是用正负10V,手臂一般水平低于5V。如图2-9所示,所以利用MAX-232进行电平转换,形成所需要的电平。MAX-232具有单5V的工作电源,有两个驱动器和两个接收器。C+1C-3V+2C2+4C2-5V-6T2OUT7R2IN8VCC16GND15R2OUT9T2IN10T1IN11R1IN13T1OUT14R1OUT12U?3.3v0.1uFC?0.1uFC?0.1uFC?0.1uFC?0.1uFC?RS232_2_TXRS232_2_RXPA3/USART2_RXPA2/USART2_TXPA9/USART1_TXPA10/USART1_RXRS232_1_RXRS232_1_TX0R?0R?123J?USART1123J?USART2RS232_1_TXRS232_1_RXRS232_2_TXRS232_2_RX图2-9串口通信第9页第3章软件电路设计第3.1节Labview软件美国仪器(NI)公司自立研制开发的Labview是一个对于流程开发的环境,类似于C语言和BASIC建设环境同样。但是Labview是图形化的编辑言语G编写程序,产生的程序通常是框图的形式。Labview软件是NI设计的平台的焦点,亦然开发衡量和控制系统的采取。Labview开发情况集成了工程师和科学家的急剧构建各种利用所需的所有工具,旨在辅助工程师和科学家解决问题、提高生产力和不断创新。首先打开一个全新的前面板窗口部分,再由Controls到AllControl然后numeric选取Thermometer放到前面板过程中,通过Labview软件设计一个简单的上位机界面,通过数值显示知道测量结果。图3-1Labview编辑的上位机界面如图3-1,首先打开一张前面板。同时,打开工具模块、控制模块和功能模块。在标签文本框输入“容器”,得到一个容器。在前面板部分加入Numbercontrol控件(数据输入控件)和一个NumberIndicator控件(数据显示)。在后面板程序连接成计算线性关系的程序,创建数组功能函数。加入一个移位寄存器,通过存储数据的迭代,显示出字符,然后得出测量的液位的数值。第3.2节Kiel软件Kiel是我们所学过的一个软件,在电路和仿真一块比较简单方便。Kiel软件方便了我的毕业设计。使得我更能贴近CPU本体,以及与他相关的产品。而且它运行起来比汇编语言更加简单。现在的大多仿真公司都选择Kiel进行相关的仿真工作。本设计主要利用Kiel将源程序变成机器码写入ARM中去。第10页第3.3节程序流程图NO图3-2软件部分流程图根据图3-2对软件部分进行编写与仿真,保证软件部分正确运行。使得上位机软件能直观了解数据。开始使用上位机设计一个界面利用Kiel将程序写入ARM中对写入的ARM进行仿真和调试对上位机界面进行调试正确结束第11页第4章系统测试与问题第4.1节Kiel的运行4.1.1.uVision2本身自带项目管理器,其开发流程步骤如下:(1)、uVision2开放,建立项目文件和设备数据库,选择设备的实际使用。(2)、建立一个新的源文件,并且把这个中源文件添加到工程中去。(3)、为ARM添加并且设置启动代码。(4)、设置硬件相关的选项。(5)、编译整个工程,生成下载到ARM芯片的内存中去。第4.2节整个上位机测试过程4.2.1.第一个问题当打开上位机软件然后调试程序时,驱动安装出现问题I/O端口COM只能显示COM3然后从网页上下载了一个驱动助手,进行安装调试。上位机程序在PC串口通信出现了接口错误的问题,最后显示出了COM4号的I/O端口。4.2.2.第二个问题将软件的数值都调节完成然后进行运行,上位机显示出现如图5-1的问题。通过重复检查与分析,发现接口电源部分的USB线忘记连接。导致上位机显示不出数值。图4-1问题图形第12页第4.3节正确的调试结果4.3.1.无液位图4-2无液体上位机显示当没有液体时,液位显示为零。4.3.2.少量液位图4-3少量的液位当有一定的液位时,显示的液位为108。4.3.3.满刻度液位第13页图4-4满液体的刻度当液位是满的时候,液位显示的是999。第4.4节测试结果误差分析在实际的测量中,在液位传感器自身的灵敏度存在一定的误差。同时,在将液位传感器放入所测液体中时,数据传输以及A/D转换都存在相应的误差。测量结果与实际情况的误差是不可避免的,我们只有在不断的测量结果后才知道结果。第14页结论本实验以ARM-STM32处理单元为核心,通过液位传感器读取电信号,再通过运放的放大作用试其放大,然后经过A/D转换器将模拟信号转换为所需的电信号,再用ARM控制USB的数据传输,最后通过上位机软件显示油耗的重量值。本实验主要就是根据传感器的变化值的线性关系有上位机显示所测量的油耗值。由于主观原因,可能实验存在系统误差,测量结果存在一定的误差。但是由于是线性关系所以系统误差相对较小。每次看到结果如预期一样的时候,一种兴奋和激动总是涌上心头,这不是骄傲,是忙碌后成功的喜悦。但由于能力以及时间的关系,总是觉得有许多不尽人意的地方。不计其数的不合理不足,外观粗糙,下面的代码。然而,我会有点自恋的安慰自己。但是我还是对我的设计充满信心。做一件事,不要在意结果,难能可贵的是收获的全过程。通过本次实验的学习与运用,对于我们所学习课程知识有了更深层次的了解。对于芯片以及模块的选择是以后相关工作中所必须经历的。动手能力是毕业设计至关重要的部分,硬件电路和软件电路模块相互嵌套使得整个电路完美瑕接。虽然经历的问题和困难很多,但是毕业设计方便了我们应届毕业生与社会工作的接轨。这次试验为以后工作打下了结实的基础,让我们进一步的了解到电子器件所带来的乐趣。第15页参考文献1.侯冬晴,李建锋,朱长城等著ARM技术原理与应用M北京:清华大学出版社,北京交通大学出版社,2009年01月01日:ISBN:978-7-81123-517-32.吴金数字油耗仪设计科技广场,2013,(1).3.彭舰,陈良银嵌入式系统设计重庆:重庆大学出版社,2008年01月01日:ISBN:978-7-5624-4470-14.田泽.嵌入式系统开发与应用M.北京:北京航空航天大学出版社,2005.5.纪宗南著集成A/D转换器应用技术和实用线路M中国电力出版社,2009年01月01日:ISBN:97875083747416.高峰.无线传感器网络作物水分状况监测系统的上位机软件开发M.浙江:农业工程学报,2010,26(5).7.周立功,ARM嵌入式系统软件开发实例(一)M北京:北京航空航天大学出版社,20048.骆鹤松基于ARM的嵌入式内燃机车油耗计量系统的设计J甘肃:甘肃科技纵横,2011,40(3)9.周立功,等ARM嵌入式系统基础教程M北京:北京航空航天大学出版社,200810.张弘USB接口设计M陕西:西安电子科技大学出版社,2002年12月1日:ISBN:9787560611846第16页致谢大学四年里的生活一晃而过,回首曾经和同学一起走过的岁月,心中的思想倍感充实。当我静静地写完这篇论文的时候,注定了我大学的最后一步即将完成。首先真诚的感谢我的论文指导老师彭静玉老师。在她忙碌的教学工作时间中挤出时间来检查、并帮助修改我的论文。以及丁建强老师在最初教我们ARM芯片课程时细心讲解,每次问他问题时他总是微笑着帮我们解决问题。所有的老师都教我,你一丝不苟,严谨细致的风格已经在我今后的工作中,在一个模型中的研究。他们追随孜孜不倦,不拘一格的想法,给我的启示与思考。谢谢你四年,我的朋友们,同学们。感谢他们对我提出的建议和意见。感谢他们为我,提出的有意的建议和意见。在他们的鼓励,支持和帮助,我可以活四年的大学生活。同时,也感谢我的父母。他们总是一往无前的支持我和鼓励我。在我最困难的时候引导我走出困境,面对困难并战胜困难。最后,再次对关心、帮助我的老师以及同学表示由衷地感谢!第17页附录附录1:实物照片说明第18页Vin1GND2+53U?9407uFCSpJO下vot.KResLE6PHadrXA8Mzf_ITZW-B=/km:第19页附录2:部分源程序*filecore_cm3.c*briefCMSISCortex-M3CorePeripheralAccessLayerSourceFile*versionV1.30*date30.October2009*note*Copyright(C)2009ARMLimited.Allrightsreserved.*par*ARMLimited(ARM)issupplyingthissoftwareforusewithCortex-M*processorbasedmicrocontrollers.Thisfilecanbefreelydistributed*withindevelopmenttoolsthataresupportingsuchARMbasedprocessors.*par*THISSOFTWAREISPROVIDEDASIS.NOWARRANTIES,WHETHEREXPRESS,IMPLIED*ORSTATUTORY,INCLUDING,BUTNOTLIMITEDTO,IMPLIEDWARRANTIESOF*MERCHANTABILITYANDFITNESSFORAPARTICULARPURPOSEAPPLYTOTHISSOFTWARE.*ARMSHALLNOT,INANYCIRCUMSTANCES,BELIABLEFORSPECIAL,INCIDENTAL,OR*CONSEQUENTIALDAMAGES,FORANYREASONWHATSOEVER.*/#include/*definecompilerspecificsymbols*/#ifdefined(_CC_ARM)#define_ASM_asm/*!asmkeywordforARMCompiler*/#define_INLINE_inline/*!inlinekeywordforARMCompiler*/#elifdefined(_ICCARM_)#define_ASM_asm/*!asmkeywordforIARCompiler*/#define_INLINEinline/*!inlinekeywordforIARCompiler.OnlyavaiableinHighoptimizationmode!*/#elifdefined(_GNUC_)#define_ASM_asm/*!asmkeywordforGNUCompiler*/#define_INLINEinline/*!inlinekeywordforGNUCompiler*/#elifdefined(_TASKING_)第20页#define_ASM_asm/*!asmkeywordforTASKINGCompiler*/#define_INLINEinline/*!inlinekeywordforTASKINGCompiler*/#endif/*#CompilerspecificIntrinsics#*/#ifdefined(_CC_ARM)/*-RealViewCompiler-*/*ARMarmccspecificfunctions*/*briefReturntheProcessStackPointer*returnProcessStackPointer*Returntheactualprocessstackpointer*/_ASMuint32_t_get_PSP(void)mrsr0,pspbxlr/*briefSettheProcessStackPointer*paramtopOfProcStackProcessStackPointer*AssignthevalueProcessStackPointertotheMSP*(processstackpointer)Cortexprocessorregister*/_ASMvoid_set_PSP(uint32_ttopOfProcStack)msrpsp,r0bxlr/*briefReturntheMainStackPointer*returnMainStackPointer*ReturnthecurrentvalueoftheMSP(mainstackpointer)第21页*Cortexprocessorregister*/_ASMuint32_t_get_MSP(void)mrsr0,mspbxlr/*briefSettheMainStackPointer*paramtopOfMainStackMainStackPointer*AssignthevaluemainStackPointertotheMSP*(mainstackpointer)Cortexprocessorregister*/_ASMvoid_set_MSP(uint32_tmainStackPointer)msrmsp,r0bxlr/*briefReversebyteorderinunsignedshortvalue*paramvaluevaluetoreverse*returnreversedvalue*Reversebyteorderinunsignedshortvalue*/_ASMuint32_t_REV16(uint16_tvalue)rev16r0,r0bxlr/*briefReversebyteorderinsignedshortvaluewithsignextensiontointeger*paramvaluevaluetoreverse*returnreversedvalue*Reversebyteorderinsignedshortvaluewithsignextensiontointeger*/_ASMint32_t_REVSH(int16_tvalue)第22页revshr0,r0bxlr#if(_ARMCC_VERSION400000)/*briefRemovetheexclusivelockcreatedbyldrex*Removestheexclusivelockwhichiscreatedbyldrex.*/_ASMvoid_CLREX(void)clrex/*briefReturntheBasePriorityvalue*returnBasePriority*Returnthecontentofthebasepriorityregister*/_ASMuint32_t_get_BASEPRI(void)mrsr0,basepribxlr/*briefSettheBasePriorityvalue*parambasePriBasePriority*Setthebasepriorityregister*/_ASMvoid_set_BASEPRI(uint32_tbasePri)msrbasepri,r0bxlr/*briefReturnthePriorityMaskvalue*第23页*returnPriMask*Returnstateoftheprioritymaskbitfromtheprioritymaskregister*/_ASMuint32_t_get_PRIMASK(void)mrsr0,primaskbxlr/*briefSetthePriorityMaskvalue*parampriMaskPriMask*Settheprioritymaskbitintheprioritymaskregister*/_ASMvoid_set_PRIMASK(uint32_tpriMask)msrprimask,r0bxlr/*briefReturntheFaultMaskvalue*returnFaultMask*Returnthecontentofthefaultmaskregister*/_ASMuint32_t_get_FAULTMASK(void)mrsr0,faultmaskbxlr/*briefSettheFaultMaskvalue*paramfaultMaskfaultMaskvalue*Setthefaultmaskregister*/_ASMvoid_set_FAULTMASK(uint32_tfaultMask)msrfaultmask,r0第24页bxlr/*briefReturntheControlRegistervalue*returnControlvalue*Returnthecontentofthecontrolregister*/_ASMuint32_t_get_CONTROL(void)mrsr0,controlbxlr/*briefSettheControlRegistervalue*paramcontrolControlvalue*Setthecontrolregister*/_ASMvoid_set_CONTROL(uint32_tcontrol)msrcontrol,r0bxlr#endif/*_ARMCC_VERSION*/#elif(defined(_ICCARM_)/*-ICCCompiler-*/*IARiccarmspecificfunctions*/#pragmadiag_suppress=Pe940/*briefReturntheProcessStackPointer*returnProcessStackPointer*Returntheactualprocessstackpointer*/uint32_t_get_PSP(void)第25页_ASM(mrsr0,psp);_ASM(bxlr);/*briefSettheProcessStackPointer*paramtopOfProcStackProcessStackPointer*AssignthevalueProcessStackPointertotheMSP*(processstackpointer)Cortexprocessorregister*/void_set_PSP(uint32_ttopOfProcStack)_ASM(msrpsp,r0);_ASM(bxlr);/*briefReturntheMainStackPointer*returnMainStackPointer*ReturnthecurrentvalueoftheMSP(mainstackpointer)*Cortexprocessorregister*/uint32_t_get_MSP(void)_ASM(mrsr0,msp);_ASM(bxlr);/*briefSettheMainStackPointer*paramtopOfMainStackMainStackPointer*AssignthevaluemainStackPointertotheMSP*(mainstackpointer)Cortexprocessorregister*/void_set_MSP(uint32_ttopOfMainStack)_ASM(msrmsp,r0);_ASM(bxlr);第26页/*briefReversebyteorderinunsignedshortvalue*paramvaluevaluetoreverse*returnreversedvalue*Reversebyteorderinunsignedshortvalue*/uint32_t_REV16(uint16_tvalue)_ASM(rev16r0,r0);_ASM(bxlr);/*briefReversebitorderofvalue*paramvaluevaluetoreverse*returnreversedvalue*Reversebitorderofvalue*/uint32_t_RBIT(uint32_tvalue)_ASM(rbitr0,r0);_ASM(bxlr);/*briefLDRExclusive(8bit)*param*addraddresspointer*returnvalueof(*address)*ExclusiveLDRcommandfor8bitvalues)*/uint8_t_LDREXB(uint8_t*addr)_ASM(ldrexbr0,r0);_ASM(bxlr);/*briefLDRExclusive(16bit)*param*addraddresspointer第27页*returnvalueof(*address)*ExclusiveLDRcommandfor16bitvalues*/uint16_t_LDREXH(uint16_t*addr)_ASM(ldrexhr0,r0);_ASM(bxlr);/*briefLDRExclusive(32bit)*param*addraddresspointer*returnvalueof(*address)*ExclusiveLDRcommandfor32bitvalues*/uint32_t_LDREXW(uint32_t*addr)_ASM(ldrexr0,r0);_ASM(bxlr);/*briefSTRExclusive(8bit)*paramvaluevaluetostore*param*addraddresspointer*returnsuccessful/failed*ExclusiveSTRcommandfor8bitvalues*/uint32_t_STREXB(uint8_tvalue,uint8_t*addr)_ASM(strexbr0,r0,r1);_ASM(bxlr);/*briefSTRExclusive(16bit)*paramvaluevaluetostore*param*addraddresspointer*returnsuccessful/failed*第28页*Excl

温馨提示

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

评论

0/150

提交评论