嵌入式时钟管理器的设计方案与实现

最新更新时间:2013-08-19来源: 21ic关键字:嵌入式  时钟管理器 手机看文章 扫描二维码
随时随地手机看文章

目前,在嵌入式产品的研发中,低档微处理器软件多采用裸机开发模式实现。在这种开发模式中,常有如下需求:

  (1) 在经历特定的时间段后,执行特定操作;

  (2) 根据给定周期执行特定操作。

  传统的作法是利用前后台方式:设定硬件定时器,使其在后台以特定周期对各相关操作的标志变量作计数操作;前台则不断对各标志变量巡回查询,若发现标志变量达到预定值,则执行特定操作。可见,上述需求需直接操作硬件定时器实现,其过程繁琐,且需要用户对相关硬件有深入了解。因此,本文设计、实现了一种使用方便的低端系统时钟管理器。

  本时钟管理器适用于可提供至少一个硬件定时器的处理器。其为用户提供了有益、友好的裁剪途径,以满足不同目标系统的实际需要。通过裁剪,该时钟管理器的目标代码最小可至100B以下,最大也不超过1KB。

  时钟管理器在实现中,将与硬件密切相关的部分组成一独立模块(文件)。针对不同的目标系统处理器,更换该模块即可。为使表述不过抽象,本文以8051系列单片机为目标系统处理器、C51为工具语言阐述该嵌入式时钟管理器的设计与实现。

  1 设计

  


 

  该时钟管理器模块(文件)结构如图1所示。

  (1) configClk.h定义了有关系统裁剪、配置的可调参数,通过对configClk.h中相关宏参数的配置,即可实现对该时钟管理器系统的配置和裁剪。

  (2) clk_impl.*功能模块用来封装目标系统的一个硬件定时器,以屏蔽不同处理器间的硬件差异,起到HAL(HardwareAbstractLayer)作用。系统时钟在此构建。

  (3) clk.*模块在clk_impl.*提供的HAL基础上进一步封装,通过一个钩子(Hook)函数,为系统提供时钟脉冲,且脉冲宽度可调(配置configClk.h中的相关宏参即可)。

  (4) WdLib.*模块为用户应用提供多个软件定时器。

  2 实现

  2.1硬件定时器的底层封装

  硬件定时器底层封装在图1所示的clk_impl.*中实现。其中定义了一个初始化接口函数和一个定时器中断的ISR(InterruptServiceRoutine)。令选用的硬件时钟为定时器0(可在configClk.h中配置)。

  (1) 初始化接口函数void_clkInit(void){}

  用户通过调用该接口函数,可周期性地执行相应的ISR—clkTick_ISR,从而形成逻辑上的系统时钟。另外,本接口函数不为用户直接访问,而在上层模块clk.*中被调用。

  (2) 定时器0的ISR—clkTick_ISR

  voidclkTick_ISR(void)interrupt1usingREG_GRP_FOR_

  SYS_CLK{}

  其中:REG_GRP_FOR_SYS_CLK为定义于configClk.h中的可调参数,用来设定本ISR的工作寄存器组。 2.2 时钟脉冲的提供

  时钟脉冲在图1所示的clk.*中实现。

  本文提供三个用户接口函数和一个用户可修改、但不可调用的钩子函数(clkTick_ISR_hook仅能在clkTick_ISR中被调用)。其用户接口声明如下:

  externvoidconstructClk(void);

  externvoiddestructClk(void);

  externUINT8getClkRate(void);

  其中:constructClk用以构建系统时钟,要使用本文所述的时钟管理器,需首先通过调用_clkInit(定义于clk_impl.*模块)实现对本函数的调用;destructClk用以解析业已构建的系统时钟;getClkRate用以获取系统当前的时钟节拍率(即定义于configClk.h中的宏SYS_CLK_RATE的当前值)。

  clkTick_ISR_hook由系统声明,用户可修改其定义,其最终仅为系统作周期性调用。用户可将自己需进行的周期性操作放于其中,后面叙述的软件定时器的“守护”例程(wdDaemon)正是置于此处而被周期调用。由于置于其中的操作将在中断执行,所以这些操作应尽可能简短、省时。

  2.3 软件定时器的提供

  本功能在图1所示的wdLib.*中实现。

  其为用户提供了可快速、便捷地实现用户定时需求的接口函数和一个被周期性调用的定时器守护例程wdDaemon。

  externvoidconstructWDOG(void);//为使用定时器系统作初始化操作

  externvoiddestructWDOG(void)//置定时器系统为初始态

  externWDOG_IDwdCreate(void);//建立一个定时器,并返回其ID

  externSTATUSwdCancel(WDOG_IDwdId);//终止指定定时器并复位

  externSTATUSwdDelete(WDOG_IDwdId);//删除指定定时器

  externSTATUSwdStart(WDOG_IDwdId,UINT16ticks,VOIDFUNCPTRwdr);//启动指定定时器,它会在指定时间后触发给定操作

  其中:WDOG_ID为定时器ID类型,即UINT8。传送给wdStart的参数“UINT16ticks”指明定时时间长度,单位为系统时钟节拍,1节拍=1/SYS_CLK_RATE(s)。因该参数的类型定为UINT16,故定时器的最大定时长度为216×(1/SYS_CLK_RATE),即216/SYS_CLK_RATE(s)。

  定时器的实现方案有静态数组法和delta列表法两种方法。这两种方法各有优缺点:前者逻辑简单,ROM用量小,但效率较低(与定时器数目相关);后者逻辑复杂,ROM用量大,但效率较高(与定时器数目无关)。应用中使用哪种方案,可在configClk.h中配置选择。

  2.3.1 静态数组法

  静态数组法的数据结构如下:

  structwdNode{

  BOOLflag;//标明本结点是否已被使用

  UINT16ticks;//用以定时的节拍数

  VOIDFUNCPTRrout;//定时到时需执行的操作

  }datawdList[_MAX_WDOG_NUM_];

  其中:_MAX_WDOG_NUM_指出了系统中允许的最大定时器数,其值决定于应用需求及系统资源量,可在configClk.h中设定。一个定时器结点占用5B的RAM空间。具有给定数据结构的静态数组是方案实施的基础。

  另外,该静态数组作为软件定时器的全局变量而存在,当系统中有多个定时器活动时,它们都将访问该全局静态数组。重要的是:它们的活动是异步的,所以,对该静态数组(临界资源)的访问需作临界保护。对于51系统,应采用开关中断的方式实现,且应确保不会影响关中断前的中断状态。

  (1)用户接口定义

  上述用户接口皆基于该静态数组进行,限于篇幅,这里给出关键接口wdStart的定义。

  STATUSwdStart(WDOG_IDwdId,UINT16ticks,

  VOIDFUNCPTRwdr){

  if(wdId<_MAX_WDOG_NUM_){

  if(wdList[wdId].flag){//判断给定定时器ID有效否

  RTX_ENTER_CRITICAL();//进入临界区

  wdList[wdId].ticks=ticks;//操作静态数组中的特定定时结点

  wdList[wdId].rout=wdr;
RTX_EXIT_CRITICAL();//退出临界区

  returnOK;//定时器启动成功

  }

  }

  returnERROR;//给定定时器ID无效

  }

  调用该接口函数,即可启动已创建(wdCreate)的软件定时器。当经历ticks节拍后,给定函数wdr将被执行,以完成用户的定时需求。

  (2)定时器守护例程

  

 

  定时器守护例程wdDaemon被置于前述的钩子函数clkTick_ISR_hook中,以使其周期性执行。由于本例程自身的特点,它应作为clkTick_ISR_hook的最后一个调用函数。本例程是软件定时器实现的核心,而其关键又是对系统栈的调整,为说明其实现流程,给出了如图2所示的wdDaemon的栈(stack)结构。

  由图2可知:wdDaemon的返回地址没有入栈,因其为clkTick_ISR_hook中的最后一个函数调用,故其返回地址被优化掉。wdDaemon将栈顶的8B数据上移2B,然后将定时器指定函数的地址插入腾出的栈空间(2B)中。如此,该地址将会被IRET弹入IP中。由于IRET指令的执行而使中断系统复位以重新响应外部中断,同时也使定时器指定函数在非中断态执行,从而不过分影响系统的响应速度。

  2.3.2 delta列表法

  delta列表法仅维护有效定时器的链表,且链表中的定时器结点按定时剩余时间由小到大排列,使距timeout点最近的定时器作为链表的首结点。链表中定时器结点的顺序由其独特的结点插入算法决定:如有5个定时器,其定时长度分别为10、14、21、32和39,当其组成delta列表时,定时值最小的结点为首结点,其定时存储值为10,而后依序排列,其定时存储值分别为4、7、11、7,即后一个定时器的定时存储值由自己的实际定时值与相邻的前一个定时器的实际定时值相减而得。可见,除首结点外的所有定时器的计数操作在其插入delta列表时就已完成。因而当定时器守护例程确定timeout的定时器时,只需对首结点进行减1或删除的操作,而不需遍历整个列表,从而使delta列表的操作与定时器数量无关。这使delta列表法在大量定时器管理中大显其能。

  该法在系统中实现的数据结构为一静态双向链表:

  structwdNode{

  BOOLflag;

  UINT16ticks;

  VOIDFUNCPTRrout;
 UINT8prior;

  UINT8next;

  }idatawdList[_MAX_WDOG_NUM_];

  UINT8headIdx;//索引首结点

  有了delta列表法的思路及其实现的数据结构,在静态数组法具体实现的基础上,便可得此法的具体实现。

  应用中如果目标系统ROM较小,且系统中启用的定时器少,则用静态数组法;若目标系统ROM较大,且系统中用到的定时器较多,则用delta列表法。

  3 应用

  针对前述的嵌入式系统中的定时需求,利用定时器管理系统给出其实现代码。

  假定“特定操作”为voidspecFunc(void),“特定时间段”长度为10分钟。

  (1)在经历特定的时间段后,执行特定操作。

  #include″clk.h″

  #include″wdLib.h″

  voidmain(void){

  WDOG_IDwdId;

  constructClk();constructWDOG();

  wdId=wdCreate();

  wdStart(wdId,10*ONE_MINUTE,specFunc);

  while(1);

  }

  (2)以给定周期周期性地执行特定操作。

  基于前者,只需在voidspecFunc(void)函数体的最后加入下述代码即可:

  wdStart(wdId,10*ONE_MINUTE,specFunc);

  注:该给定周期为10分钟。

  由于本时钟管理器只需一个硬件定时器的支持,所以其具有广泛的适用性。使用时,只需进行简单的配置,即可为裸露的目标系统加以简单的软件抽象层。其友好的用户接口有效降低了嵌入式系统的开发难度,提高了目标系统的可靠性。笔者已在实际项目中多次使用了该时钟管理器。基于该时钟管理器的目标系统运行稳定、可靠,从而充分说明该时钟管理器设计的实用性和科学性。

关键字:嵌入式  时钟管理器 编辑:探路者 引用地址:嵌入式时钟管理器的设计方案与实现

上一篇:采用CPLD的臭氧电源控制系统的软硬件设计
下一篇:DSP的DTMF信令的产生分析与检测

推荐阅读最新更新时间:2023-10-12 22:25

嵌入式DSP访问片外SDRAM的低功耗设计研究
DSP有限的片内存储器容量往往使得设计人员感到捉襟见肘,特别是在数字图像处理、语音处理等应用场合,需要有高速大容量存储空间的强力支持。因此,需要外接存储器来扩展DSP的存储空间。 在基于DSP的嵌入式应用中,存储器系统逐渐成为功耗的主要来源。例如Micron公司的MT48LC2Mx32B2-5芯片,在读写时功耗最大可以到达924 mW,而大部分DSP的内核功耗远远小于这个数值。如TI的 TMS320C55 x系列的内核功耗仅仅为0.05 mW/MIPS。所以说,优化存储系统的功耗是嵌入式DSP极其重要的设计目标。本文主要以访问外部SDRAM为例来说明降低外部存储系统功耗的设计方法。 1 SDRAM功耗来源 SDRAM内部一般分为多
[嵌入式]
<font color='red'>嵌入式</font>DSP访问片外SDRAM的低功耗设计研究
嵌入式开发arm技术JTAG接口解读
通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug;一般支持JTAG的CPU内都包含了这两个模块。 一个含有JTAG Debug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,象UART,Timers,GPIO等等的寄存器。 上面说的只是JTAG接口所具备的能力,要使用这些功能,还需要软件的配合,具体实现的功能则由具体的软件决定。 例如下载程序到RAM功能。了解SOC的都知道,要使用外接的RAM,需要参照SOC DataShe
[单片机]
未来十年工业需要什么样的嵌入式处理器
浩瀚的芯片海洋中能被人记住的寥寥无几,因其本就是幕后英雄,加之摩尔定律下技术的飞速发展。那些在人们脑海中留下印记的往往是踩中了时代的脉搏,得以彻底改变了人们的生活或是一个产业,而时代也造就了一些明星。 本文中,我们会探讨中国工业自动化产业的变革以及基于 ARM® 的高性价比处理器是如何推动这种演进的。 热血年代 如今我国已形成独立完整的现代工业体系,但在 2001 年中国加入 WTO,开启驶向“世界工厂”的高速通道时,没人能想象出今天中国“制造强国”的模样,因为那时作为工业生产的基石的我国的自动化产业尚处于萌芽期,外资占据绝对主导地位。只不过敏锐的本土企业已经开始尝试从点至面的突围,日后被誉
[嵌入式]
未来十年工业需要什么样的<font color='red'>嵌入式</font>处理器
基于CPCI的嵌入式单板计算机电源的设计方案
嵌入式运行速度高,系统较复杂,常常集成超大规模FPGA器件、DSP器件、DDR存储器以及各种接口电路。这对电源的输出电压值、功耗、电压精度、上电顺序以及电源完整性提出更高的要求。 这里介绍一种基于CPCI的嵌入式单板计算机电源的设计方案。该设计主要应用于航空设备和军用车载设备。 2、系统电源需求分析与器件造型 图1为系统整体结构框图。该系统由CPU和与其相连的DDR储存器、PCI接口、时钟、电源、EBC总线以及外部接口电路组成。CPU采用AMCC公司的PowerPC 440EPx。 2.1 系统电源需求 该系统电源较复杂,有多达8种不同的电源电压值,其中5 V和3.3 V由CPCI
[工业控制]
基于CPCI的<font color='red'>嵌入式</font>单板计算机电源的设计方案
华为发布麒麟960开发板
华为发布麒麟960开发板:1699元。该开发板还支持Google ASOP(安卓开源项目)、Khronos OpenCL 2.0、Vulkan API,非常适合安卓平台开发,尤其是需要硬件载体的 嵌入式 开发者。下面就随嵌入式小编一起来了解一下相关内容吧。 华为发布麒麟960开发板 HiKey960不但支持了通过新的和现有的传感器、网络安全技术及其协议和其他外围硬件和软件和创新功能实现,而且为在数字标牌、POS机、机器人和其他传统移动AOSP产品之外的差异化产品提供了支持。 以上是关于嵌入式中-华为发布麒麟960开发板的相关介绍,如果想要了解更多相关信息,请多多关注eeworld,eeworld电子工程将给大家提供更全、更详
[嵌入式]
基于DM9000AE的S3C2440嵌入式系统的以太网接口设计
本文介绍了一个基于三星ARM9芯片S3C2440嵌入式系统的以太网接口电路设计方案,采用了工业级以太网控制器DM9000AEP成功实现了嵌入式系统网络数据交换。论文在重点阐述了网络接口电路基础之上,对Windows CE系统控制软件部分DM9000AEP的驱动程序和注册表项进行了具体分析。 随着微电子技术和计算机技术的发展,嵌入式技术得到广阔的发展,已成为现代工业控制、通信类和消费类产品发展的方向。以太网在实时操作、可靠传输、标准统一等方面的卓越性能及其便于安装、维护简单、不受通信距离限制等优点,已经被国内外很多监控、控制领域的研究人员广泛关注,并在实际应用中展露出显著的优势。本文提出了一种基于DM9000AE网络接口芯片和32位
[单片机]
基于DM9000AE的S3C2440<font color='red'>嵌入式</font>系统的以太网接口设计
PowerPC家族新贵 IBM推高性能嵌入式CPU
   导语: PowerPC是一种精简指令集(RISC)架构的CPU,其基本的设计源自IBMPowerPC601微处理器POWER架构。被命名为PowerPC476FP的新款处理器内核的的出现让IBM和LSI有了在嵌入式方面的合作。并且,这一新型的PowerPC内核在其下一代网络应用的多核平台架构中使用。IBMPowerPC系列处理器,嵌入式处理器以及内核是IBMPower架构家族产品的一部分,其应用范围广泛,小到消费类电子,大到超级计算机。IBMPower架构作为开放式的微处理器架构,提供高性能以及低功耗应用。近期,IBM发布了堪称业界最高性能嵌入式处理器PowerPC476FP,使得这一新型的PowerPC系列处理器更好应用网
[嵌入式]
PowerPC家族新贵 IBM推高性能<font color='red'>嵌入式</font>CPU
莱迪思推出业界首款集成USB的小型嵌入式视觉FPGA
— 业界首款拥有硬核USB的人工智能&嵌入式视觉应用FPGA,拓展小型、低功耗FPGA产品系列 — 中国上海——2023年9月27日—— 莱迪思半导体公司,低功耗可编程器件的领先供应商,今日宣布推出莱迪思CrossLinkU™-NX FPGA产品系列,这是业界首款同级产品中集成USB器件功能的FPGA。 CrossLinkU-NX FPGA通过硬核USB控制器和物理层(PHY)、独特的低功耗待机模式和一整套参考设计,加速设计配备了USB的系统并简化散热管理。CrossLinkU-NX FPGA拓展了莱迪思在嵌入式视觉传感器与USB主机接口领域的领先地位,旨在满足不断增长的客户需求,简化计算、工业、汽车和消费电子市场应用中
[嵌入式]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved