基于Cortex-M4的配电终端实时应用平台软件设计报告.doc_第1页
基于Cortex-M4的配电终端实时应用平台软件设计报告.doc_第2页
基于Cortex-M4的配电终端实时应用平台软件设计报告.doc_第3页
基于Cortex-M4的配电终端实时应用平台软件设计报告.doc_第4页
基于Cortex-M4的配电终端实时应用平台软件设计报告.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

基于Cortex-M4的配电终端实时应用平台软件设计报告1 设计背景看了网络上有多篇介绍基于飞思卡尔Kinetis的FTU设计方案,笔者对飞思卡的kinetis系列芯片也有所关注,在飞思卡尔与万利共同设计推出的MAPS-K64开发套件初期心理痒痒地就不由自主地购入了一套,由于专注工作等原因一直没空把这板子用起来。目前笔者手头还有NXP LPC1768,IMX.287, STM32F4,CC2530,MSP430F等开发板,这些板子也仅使用过一段时间后就闲置在工具箱里躺着了。当下创客是一个充满活力与希望年轻群体,李总理大力推进“大众创业万众创新”,高度关注并为创客们点赞。当看着这一大堆用真金白银购入的板子还闲置在工具箱里,某天心头来劲一定不能白瞎花这个钱得把它们折腾起来,咱也要用实际行动向创客精神致敬。首当其冲被选中是MAPS-K64开发套件,一是因为K64强悍的性能,二是开发套件提供的外设资源较为丰富,基于它设计一个FTU软件方案实现最为强劲的实时响应性能,因为笔者热钟于RTOS的应用设计,码农当用上RTOS后完全不想回到“裸奔”时代,配电网的FTU软件设计一直崇尚“裸奔”,对此我只想以本设计报告来证实应用RTOS实时效果更为优越。笔者手中没有飞思卡尔官方设计的FTU方案软件源码,本软件方案纯属按个人思路进行全新设计,不存在如有雷同的情形,笔者崇尚开源精神,恪守职业道德,首选应用开源软件代码,本方案未采用任何与FTU相关公司的商业代码(可以说完全拥有自主知识产权,嘿嘿,开个玩笑,本软件方案未申请经有关部门审核颁布认证_),包括MAPS-K64开发套件提供的例程都未使用,它的部分例程还是完全不能用的,各模块均按照统一规范进行设计验证。芯片驱动采用飞思卡尔Kinetis最新的软件开发包KSDK V1.2,其它中间库则采用开源软件代码(除emWin外,仅个人学习评估使用,未用于商业用途)。由于资源、时间等因素受限,现阶段未具有交流采样板、开入开出板,专业试验设备等无法模模拟馈线故障,因而本期主要成果是搭建FTU软件设计平台,具备FTU基础应用功能,在软件设计上以极致高效的设计,力求在实时响应上实现最高性能,达到实时应用评估目的,在II期则补充实现FTU其余软件功能,形成一个完整的软件实现方案。本方案预期分为三个阶段实施,I期为软件开发平台搭建,具备FTU基础功能,II期为故障判断,标准通信协议,数据存储,超低功耗BLE的应用,基于Qt的维护配置工具的实现,III期为设计交直流和开入开出板验证,项目众筹等(大胆臆想,不一定具备实施条件)。本文为I期开发已基本完成的情况作一个总结报告,主要目的有如下三个方面:1、基于Cortex-M4和RTOS的实时响应特性展现;2、阐述个人对FTU软件框架设计的理解与其高效程序设计的一些思想;3、杜绝闭门造车自我感觉良好的局面,与人分享吸纳各方改进提升建议。2 配电网监控终端介绍智能配电网是智能电网的重要组成部分,其主要实现配电系统正常运行及事故情况下的监测、保护、控制、用电和配电管理的智能化。智能配网系统配用电自动化系统由主站、通信系统、自动化监控终端设备三大部分构成,形成一个完整的信息传输与处理系统,实现对配电网运行的远程管理。其中自动化监控终端设备包括馈线终端(Feeder Terminal Unit,FTU)、站所终端(Distribution Terminal Uint, DTU)、配电变压器终端(Transform Terminal Unit, TTU)等。FTU主要安装在10kV馈电线路上,对柱上开关(断路器、负荷开关、分段开关)进行监控,完成遥信、遥测、遥控,故障检测功能,并与配电自动化主站通信,提供配电系统运行情况和各种监测信息,包括开关状态、电能参数、相间故障、接地故障以及故障时的参数,可执行配电主站下发的命令,对配电终端进行调节和控制,实现故障定位、故障隔离和非故障区域快速恢复供电功能。DTU一般安装在常规的开闭所(站),环网柜、小型变电站、箱式变电站等处,完成对开关设备的位置信号、电压、电流、有功功率,无功功率、功率因数、电能量等数据采集与计算,对开关进行分合闸操作,实现对馈线开关的故障识别、隔离和对非故障区间的恢复供电。TTU主要用于监测并记录配电变压器运行工况,记录并保存一段时间内监测参数的整点值,电压、电流的最大值、最小值及其出现的时间,供电中断及恢复时间,形成数据表。本文主要构建侧重于FTU的配电网实时应用平台,DTU和TTU的实现亦是通用的。FTU一般功能介绍: 交流量采集:采集三相交流电压和电流(3U3I),本平台软件模拟(3U3I+U0I0)共8个交流输入通道; 实现电压、电流、零序电压、零序电流、有功功率、无功功率、功率因数,频率的测量和计算; 直流量采集:2路直流输入; 状态量采集:开关状态、接地刀闸状态采集; 113次谐波分量计算、三相不平衡度的分析计算; 遥信输入(无源,24V)和遥控输出(合、分闸、常开触点); 事件顺序记录、历史记录、主站下发信息可当地存储; 支持IEC60870-5-101、 IEC60870-5-104、 MODBUS等常用规约; 支持多种通信方式、提供多路通信接口,提供2路RS 232或2路RS 485串行通信口,2路10/100M自适应以太网口; 配置GPRS模块; 具备故障检测及故障差别功能:过流,过负荷; 配备后备电源,当主电源供电不足或消失时,能自动无缝投入; 具备对时功能,支持SNTP等对时方式,接收主站或其它时间同步装置的对时命令,与系统保持同步。3 硬件评估板介绍目前暂缺手头暂缺完整的FTU硬件平台,只能借助于飞思卡尔联合万利电子推出的MAPS四色板平台作为本次评估开发板,其具有丰富的通用接口,具有良好的扩展性,目前开发套件由MCU主板和通用外设板构成。MAPS-K64主板MAPS-K64主板特性: 飞思卡尔K64微控制器-MK64FN1M0VLQ12; 10/100M自适应以太网接口; FlexBus扩展1Mx16 PSRAM,带地址锁在器; FlexBus扩展2.8英寸彩色LCD(QVGA 240x320); 标准的2.54mm 20pin SWD调试接口; Full Speed USB Device, Micro B接口供电; 支持RTC功能,3.0V锂电池给VBAT供电; CN3,CN6扩展接口,可与通用外设板对接,提供丰富的扩展功能; 排针座引出微控制器所有IO口,方便扩展MK64FN1M0VLQ12微控制器特性: ARM Cortex-M4内核 + DSP,120MHz主频,单周期MAC,单指令多数据(SIMD)扩展,单精度浮点运算单元(FPU); 集成1MB Flash、256KB SRAM、128KB FlexNVM、4KB FlexRAM,FlexBus接口用于连接外部存储器; 两个16位SAR ADC、两个12位DAC、3个模拟比较器、内部参考电压 8两个8通道定时器(PWM/电机控制),两个两通道定时器、实时时钟等; 10/100 M以太网MAC、CAN、USB OTG(支持无晶振USB设计); 3个SPI模块、3个I2C模块、6个UART模块、SDHC接口、I2S模块,最大支持100个GPIOs口; 多种低功耗模式,工作电压:1.713.6V,工作功耗最低可低至250uA/MHz,工作温度-40105。MAPS通用外设板MAPS-DOCK板的外设资源非常丰富,主要包括: 飞思卡尔K20微控制器,基于Cortex-M4处理器,作为板载调试器; 一个Micro-SD卡插槽、一个8Mbit SPI Nor Flash、一个2Kbit EEPROM; I2S音频编解码器,支持一路立体声耳机输出,两路Speaker输出,一路麦克风输入; 板载USB调试器, 支持CMSIS-DAP协议,同时支持USB转UART功能; USB全速接口、红外收发接口、两个UART接口、一个CAN接口; 一个DAC/PWM Audio输出接口; 两路单端或一路差分ADC输入; 一个128x64单色LCD屏,SPI接口; 四个物理按键、四个LED显示、一个五向按键、六个触摸按键。4 实时响应特性验证汽车冲撞气囊在汽车发生碰撞时是否能及时弹出是一个实时响应的最好例子,若在发生碰撞后某一截止时刻后才弹出,则无法起到应有的保护作用,这是丧失实时响应导致的后果。配电网馈线终端具备故障定位、故障隔离和非故障区域快速恢复供电功能,若故障检测实时性得不到保证,最终故障是能识别,但已超过切除故障的理想时间,馈线上的故障有可能引发更大范围的故障。所以笔者认为要能快速进行故障定位,就必须提供故障定位的实时响应特性,为此在FTU软件设计非常有必要结合RTOS的进行软件设计。下图是FTU对1路馈线的所有遥测量模拟计算结果,这么多项计算结果是不是有点震撼效果,总共137个遥测值/馈线的计算量,还有3个直流量计算(后两者转换系数为1.0,即实际ADC采样值),几乎可以囊括所有的测量值。遥测值的计算过程极为复杂,包括64点采样值的FFT信号处理,有效值的开平方计算,相角的反正切计算,高精度频率计算,这些计算都是极为消耗MCU使用率的。然后再看看MCU的利用率统计结果:简直是逆天了,这么繁重的计算任务竟然仅占用MCU的33%使用率,还有66%的空闲时间,其实FTU最繁重的遥测计算是在App Core Task那个任务而已,神马情况,才19%,是的,你一点都没有看错,仅仅占用MCU 19%的使用率即可完成一路馈线137个测量值的计算,还包括3个直流量计算以及9路遥信处理,再看下图。第一通道为AD周期采样每5ms输出上升脉冲,配电网正常工频周期为20ms,本平台每周期采样64个点,即每次完成16个点(四分之一周波)采样值输出脉冲,下降沿是在计算任务完成瞬时遥测值完毕后输出的,可通过第一通道的脉宽看出故障判断固有延迟时长。第2通道的脉冲上升时刻为每次开始进行瞬时遥测值计算时输出的,下降沿为结束本次遥测计算时输出的,其中各次脉宽不一要等长,是因为遥测值处理有选择地进行滤波计算所致,每次计算都是以本次采样所得的四分之一周波数据与前四分之三数据进行组合计算的,这样的滑动数据窗的数据方式,确保以最完整的信息进行FFT信息处理。通过观察第1通道,时标100ms-200ms间共严格地出现了20个脉冲,T1-T2时长为99.998750ms,说明采样完成按照每5ms触发App Core Task进行遥测计算。局部放大某一上升沿进行两个通道对比图如下可以清晰地看到,T1-T2时差仅为11.750us,意味着每5ms采样完四分之一周波后触任务进行计算,任务实时响应仅仅只需要11.750微秒而已,请特别注意是11.750微秒,对于这样实时响应特性,技艺超众的码农设计裸奔程序也很难达到如此快速的实时响应,以后则可以十分有底气地说,FTU结合RTOS进行软件设计实时响应特性更好。再看看下图:通道1的脉冲宽度:0.649500ms,这意味着从每5ms采样完成触发计算到瞬时遥测计算完毕,仅仅只需要0.649500ms,这意味着故障判断的固有延时为:0.65ms左右,完全小于1ms的节奏啊,所以最为理想的情况是故障在1ms内就能够被检测出来,最坏的情况是故障被延时5+0.65ms被检测出来。笔者还有另一手段进行上述时间的对比计时测量,是应用MCU的以120MHz为时钟源的计数器进行消耗时钟计数,求最小值、平均值、最大值,测试结果与上述IO脉冲测量相差无几,在此就不重复阐述了。下图为板上按键模块开入进行遥信处理生成的SOE,以及网络Ping结果,同样具备良好的实时响应效果:5 程序设计思想Bob大叔认为在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。软件系统的质量好坏,归根结义还是需要代码来告知。代码优劣不仅直接决定了软件的质量,还将直接影响软件成本。软件成本由开发成本和维护成本组成,而往往维护成本远高于开发成本,这其中耗费的主要成本就是理解代码和修改代码造成的,代码的质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好的基础。细节决定成败,思路清晰、言简意赅的代码让程序员一目了然;而格式凌乱、拖沓冗长的代码让程序员一头雾水。除了可以正确运行以外,优秀代码必须具备良好的可读性,编写的代码要使人能在最短的时间内理解才行。编码不仅仅只是一们技术,也是一门艺术,编写可读性高的代码尤其如此。代码最重要的读者不是编译器、解释器或者电脑,而是人,写出的代码能让人快速理解、轻松维护、容易扩展的程序员才是专业程序员。精简、高效、稳定、可靠是嵌入式程序设计过程所应该力争实现的,把有限的资源用到极致发掘出SOC卓越的性能。除可编程器件的程序外,程序运行时是严格按顺序执行,只有简单、高效设计的程序才能快速响应事件,并非应用RTOS的程序就具备实时响应功效了。工业应用的嵌入系统还要求实现无间断超长时间进行精准监控,因而务必在程序设计中排除各类不稳定因素,比如严格按MISRA-C(汽车制造业嵌入式C编码标准)进行程序设计。省内存、模块化、可配置、可移植的设计也在嵌入式程序设计具有重要意义。虽然微控制器的内存资源有很大的提升,相对来说还是比较匮乏的,用最少的内存实现既定的功能可缩减栈空间的大小,提升程序的高效性。模块化的程序设计可最大程度地减少程序的耦合性,抽象封装优良的模块可移植性强,可用于多个应用平台。可配置则实现程序维护升级的极大便利性,通过修改一些配置属性即可实现特定的需求,减少程序的维护成本,如FreeRTOSConfig.h, lwipopt.h等均设计有可配置选项,使其得到广泛地应用,Micrium公司出品的uCOS-III其代码堪称最为规范而且整洁的程序。软件设计中的关键思想:代码应该是易于理解的,遵循统一的编程规范,实现高效整洁稳健的程序设计。要充分借鉴C+的分类设计思想,把功能按模块进行分类,最大程序减小模块间的耦合,同时把通用的功能函数封装好,做好一经验证正常后续则可到处快速使用目的。6 软件架构本平台软件架构划分为5个层次,分别为用户应用层App,通用接口层Common,应用支持层Asp,中间层Mid,驱动层Drv。用户应用层AppAppOS、 ComApp、 HmiApp、 MainApp、 NetApp、 ShellApp、SoeApp、 WinApp、 YcApp、 YxApp、 YkApp通用接口CommonCommon、 DbgPrintf、 SoftClock、 StrLib、 StrPrintf应用支持层AspExterRam、 FlexBus、 FramFlash、 HwTicker、 I2CBus、LcmDisp、 NorFlash、 GpioPin、 PinMux、 RTC、 SerialCom、SpiBus、 System、 Watchdog中间层MidFreeRTOS V8.20、 LwIP V1.41、 emWin V5.26驱动层DrvKSDK V1.26.1 驱动层驱动层为整个软件架构的最底层,采用飞思卡专门为Kinetis系列设计软件开发套件KSDK V1.2,Kinetis软件开发套件由强大的外设驱动、堆栈、中间件和示例应用组成,旨在简化和加速基于所有Kinetis MCU的应用开发。随MAPS-K64开发套件发布的是V1.1,两个版本在程序接口上不兼容,应用支持层则调用的是KSDK提供的编程接口,用户应用层则使用应用支持层的编程接口,使得这三者保持独立性,便于用户应用层程序无缝移植到其它厂家的MCU上运行,而仅需移植应用支持层即可。6.2 中间层中间层由FreeRTOS、LwIP和emWin构成,除emWin外,其余两者均为开源代码,emWin为MDK自带的图形用户接口,鉴于工业应用安全可靠要求目前暂未找到具备掉电保存,支持磨损平衡特性的开源嵌入式文件系统,开源软件easyFlash是后续理想的替代方案。FreeRTOS是Real Time Engineers Ltd.推出的市场领先实时操作系统,支持30多种架构。它拥有专业的开发、严格的质量控制、稳定可靠的特点和完善的支持,可免费在商用产品中使用。LwIP是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。主要应用于嵌入式领域的开源TCP/IP协议栈,它的实现同BSD的实现有很大的相似性,可以作为TCP/IP协议的典型代表,它的功能完备,除了实现TCP/IP的基本通信功能外,还支持DNS、SNMP、DHCP、IGMP等高级功能应用。LwIP实现的重点是保证在嵌入式设备RAM、ROM资源有限的情况下实现TCP协议的主要功能,因此它具有自己独到的一套数据包和内存管理机制,使之更适合于在代端的嵌入式系统中使用。emWin是市场上最有效、最全面的GUI产品之一,它和国内流行的uCGUI类似,它以ANSI C语言编写,支持任何显示控制器、显示器和CPU,本平台已成功移植emWin用于驱动彩色LCD,后期做用户图形界面开发。6.3 应用支持层应用支持层相当于板级驱动包(BSP),统一向上为应用层提供支持服务,故叫应用支持层,是对片上及板上外设资源进行访问接口的实现,使应用层更为便利地访问片上及板上的资源,把应用层与DRV层完全隔离,增强整个工程程序地可移植性,若移植工程到不同厂家的芯片时,仅需重新实现ASP层的函数接口即可,APP层的程序可实现无缝移植,与此同时按照现代方法的C语言程序设计,可兼容应用于不用的编译器,如ARMCC, IAR, GCC等。6.4 通用接口层通用接口层是用户应用层公共通用的功能函数集,主要包含工程通用头文件定义,仿printf标准格式字符串转换,累加计数式算法的软时钟日历实现等。6.5 用户应用层用户应用层主要包含与RTOS相关功能整体实现,各个功能模块的模块化程序设计等,下文一一详述。7 应用支持层(ASPs) 应用支持层结构图UNIX具有标准API模型open-read-write-close,Linux受益于该模型使得它的应用程序无障碍地与Unix程序友好共存,因而程序设计分为应用程序设计与驱动程序程序,驱动程序设计与芯片硬件资源配置较为紧密,需要更为高效的程序执行效率。在微控制器程序设计中则极少严格划分驱动程序和应用程序,这就造成了应用程序设计与芯片完全绑定的恶果,导致应用程序无法移植应用于其他厂家的芯片上,最为悲的情况是按芯片应用程序得重写。ARM公司推出ARM Cortex的同时还有一个与之配套的标准-CMSIS(微控制器软件接口标准),是Cortex-M处理器系列的芯片与供应商无关的硬件抽象层。使用CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间,同时方便将现有软件迁移到新设备。这个标准为供应商设计硬件抽象层软件接口提供了更为权威的依据,但到目前为止只能说各厂家的软件接口逐渐趋于统一,但还无法达到无缝衔接的地步。为此在本工程中参照上述思想,结合微控制器的通用处理过程形成了Init-Read-Write的应用支持层总体设计思想。按此思路设计各个功能模块,在init中是根据各功能模块的属性配置表进行初始化配置,在系统上电复位后统一进行各模块初始化,然后就可以为用户应用层各模块提供友好地Read/Write服务。虽然无法与CMSIS相比较,但经过这样层次划分后,应用程序与各厂家的硬件抽象层完全隔离,具备良好的移植性,非常有利于在各个厂家的芯片中进行评估。注:鉴于大多数编程语言都是基于英语的,而且要求很多程序中用英语注释,文件的函数名及变量定义禁止一切形式的简拼,流行的开源软件也都是清一色的英文doc,所以程序员学好英语也是很有必要的,因为看懂datasheet,用好User Guide是非常重要的技能。为了与世界接轨,笔者英文水准虽然很蹩脚,但抱着多用多学不断提升的愿憬常用英文,下文中注释语法或用词可能不正确,但是关键信息已经装在变量名及函数名中,看函数名不用猜测就知道其功能,这已经是可读代码的艺术了,函数头注释那只是使格式更为规范而已了。此外用英文注释的程序在哪个浏览器都不会在在乱码,不存在UTF-8或GBK编码导致显示乱码问题。7.1 ExterRam模块ExterRam模块为片外扩展RAM的初始化配置及应用访问接口实现,主要提供如下访问接口函数:/!=/!brief Initializes the SDRAM device./!param void./!retval None./!note ./!=extern void vExterRamInit(void);/!=/!brief Reads an mount of data from the SDRAM memory in polling mode./!param IulAddr - Read start address./!param O*pulData - Pointe to the read data buffer./!param IulSize - Size of read data from the memory./!retval API_NULL / API_SUCC./!note 仅测试使用,在应用中使用地址自动定位技术将变量定义于片外内存中./!=extern int16_t iExterRamReadData(uint32_t ulAddr, uint16_t *puiData, uint32_t ulSize);/!=/!brief Writes an mount of data to the SDRAM memory in polling mode./!param IulAddr - Write start address./!param I*pulData - Pointer to data to be written./!param IulSize - Size of written data from the memory./!retval API_NULL / API_SUCC./!note 仅测试使用,在应用中使用地址自动定位技术将变量定义于片外内存中./!=extern int16_t iExterRamWriteData(uint32_t ulAddr, uint16_t *puiData, uint32_t ulSize);7.2 FlexBus模块FlexBus模块为片外护展总线的初始化配置的实现,以及可访问地址空间的定义,主要提供初始化配置接口函数:/!=/!brief Flex Bus Initial./!param void./!retval None./!note ./!=extern void vFlexBusInit(void);/!=/!brief Wrtie data to NorFlash./!param ulAddr - FlexBus Address./!param bIncr - the address increase or not./!param *puiData - pointer on the write data buffer./!param ulWordNum - the num of word data buffer./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iFlexBusWrite(uint32_t ulAddr, uint8_t bIncr, uint16_t *puiData, uint32_t ulWordNum);/!=/!brief Read data from FlexBus./!param ulAddr - FlexBus Fix Address./!param bIncr - the address increase or not./!param *puiData - pointer on the read data buffer./!param ulWordNum - the num of word data that expect to read./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iFlexBusRead(uint32_t ulAddr, uint8_t bIncr, uint16_t *puiData, uint32_t ulWordNum);7.3 FramFlash模块FramFlash模块为铁电Flash,EEROM等无需擦除即可直接写入的Falsh提供驱动初始配置,以及读写访问接口函数,提供的接口函数:/!=/!brief FramFlash Initial./!param void./!retval None./!note ./!=extern void vFramFlashInit(void);/!=/!brief Read data form FramFlash./!param I uiAddr - address of FramFlash./!param O *pucBuff - point to the output data buffer./!param IO*puiLen - input the expect to read datas lenght, /! output the real read lenght./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iFramFlashRead(uint16_t uiAddr, uint8_t *pucBuff, uint16_t *puiLen); /!=/!brief Wrtie data to FramFlash./!param I uiAddr - address of FramFlash./!param O *pucBuff - point to the write data buffer./!param IO*puiLen - input the expect to write datas lenght, /! output the real write lenght./!retval API_NULL / API_FAIL / API_SUCC./!note ./!=extern int16_t iFramFlashWrite(uint16_t uiAddr, uint8_t *pucBuff, uint16_t *puiLen);7.4 HwTicker模块HwTicker模块主要功能是为应用程序提供周期性定时中断服务,主要基于片上的定时器实现,为了有区别于曾被广泛应用的HwTimer而取名HwTicker,寓意滴答时钟。基于可配置程序设计思想,HwTicker的定时属性是可配置的,在不同的使用场合,仅需要更改其中的配置即可达到所需的定时周期服务,而无需进行其他的同步更正。提供的访问接口如下:typedef enum _HwTickerLogicNoDef kHwTickerNo0 = 0, /* 1ms计时. */ kHwTickerNo1, /* AD采样计时. */ HwTickerNo_t;/!=/!brief Hardware ticker initial./!param void./!retval None./!note ./!=extern void vHwTickerInit(void);/!=/!brief Starts the hardware ticker counting./!param ucTickerNo - logitc ticker No./!retval API_FAIL / API_SUCC./!note ./!=extern int16_t iHwTickerStart(uint8_t ucTickerNo);/!=/!brief Stops the hardware ticker counting./!param ucTickerNo - logitc ticker No./!retval API_FAIL / API_SUCC./!note ./!=extern int16_t iHwTickerStop(uint8_t ucTickerNo);/!=/!brief get hardware ticker count value./!param void./!retval ticker count value./!note 0毫秒起累加计时./!=extern inline uint32_t ulHwTickerCountGet(void);/!=/!brief Reads the hardware ticker current counting value./!param IucTickerNo - logitc ticker No./!param O*pulCount - pointer to the output valeue./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iHwTickerCountGet(uint8_t ucTickerNo, uint32_t *pulCount);/!=/!brief Read the hardware ticker period in units of count./!param IucTickerNo - logitc ticker No./!param O*pulPeriod - pointer to the output value./!retval API_NULL / API_SUCC./!note us = (*pulPeriod + 1) / Fre./!=extern int16_t iHwTickerPeriodGet(uint8_t ucTickerNo, uint32_t *pulPeriod);/!=/!brief Sets the hardware ticker period in units of count./!param ucTickerNo - logitc ticker No./!param ulSetCount - period count value./!retval API_NULL / API_SUCC./!note ulPeriod = (us * Fre / 1000000 - 1)./!=extern int16_t iHwTickerPeriodSet(uint8_t ucTickerNo, uint32_t ulSetCount);/!=/!brief Read the hardware ticker source frequence./!param IucTickerNo - logitc ticker No./!param O*pulFre - pointer to the output value./!retval API_NULL / API_SUCC./!note ./!=extern int16_t iHwTimerFreGet(uint8_t ucTickerNo, uint32_t *pulFre);/!=/!brief Hardware timer initialization./!param void./!retval None./!note Use for RTOS Run Time Statistics./!=extern void vHwTickerTimeStampInit(void);/!=/!brief Get hardware time counter value./!param void./!retval None./!note Use for RTOS Run Time Statistics./!=extern uint32_t ulHwTickerTimeStampGet(void);/!=/!brief CPU Time Stamp Initial./!param void./!retval None./!note ./!=extern void vCPU_TimeStampInit(void);/!=/!brief Get CPU Time Stamp./!param void./!retval None./!note 以系统时钟为时钟源的32位计数器,可作为应用层高精计时测量用./!=extern inline uint32_t ulCPU_TimeStampGet(void);7.5 I2cBus模块I2cBus为片上I2C外设总线进行统一配置和访问管理,主要提供初始化配置及发送、接收接口,在此主要作为主机解色使用。typedef enum _I2CBusNoDef kI2cBus

温馨提示

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

评论

0/150

提交评论