积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式硬件 >> 相关文章
  相关分类: 相关文章 | ARM | 新产品 | 下载 | MIPS | X86 |
基于AT91R40008微处理器的软件定时器设计
 
作者:赵艳萍,粟秋硕   来源:中电网    点击数:103   更新时间:2008-7-4
您可以添加到网摘 让更多人关注此文章:

    

0引言


当前,嵌入式系统的软件代码日趋复杂。然而,由于存储器、定时器等硬件资源仍然相对有限。如何在不影响系统整体性能的情况下,为嵌入式系统提供优异的定时性能,使系统能够高效运行,已是一个值得关注的问题。


1软件定时器


软件定时器是一组定时器实体的集合,是一种针对不同定时服务进行统一管理的多任务链表类型数据结构。软件定时器可使系统在某一确定时刻执行指定操作。它以可编程定时/计数器或单稳延时电路为基础。利用硬件定时器产生的定时中断来实现。虽然软件定时器也需要占用CPU时间,但是相对于硬件定时器来说,它的资源多,定时时间长,使用灵活,实现起来简单方便,因而在复杂系统或定时器工作方式比较复杂的应用场合更能体现其价值。 对定时器的组织和管理常用的有多队列式和单链表式。前者通过将定时器划分成不同时长的队列来减少每次参与计数的定时器个数。这种组织方式在空负载检查时存在很多冗余操作,而真正有效的操作只占少部分。后者则通过将定时器采取先进先出方式来组织定时器队列,这种方式使用起来虽然比较简单,但存在以下两个问题:一是定时器队列太长。找到所有到点定时器的时间开销难以接受;二是在当时钟中断发生时,需要对所有的定时器的时长域进行减法操作,而这部分的时间性开销很大。 本文采用的是单链表定时器队列,但在定时器队列组织方式上,根据各个定时器节点的定时值,对其按升序进行排序,然后按照后一个定时器的值是前面所有定时器值加上本身值的规则对此节点重新赋定时值。以使所有的到点定时节点集中于队列的前面。由于所有定时器节点的隐含值均递减,故可形成一个相对时长定时队列。这样,在每次产生时钟中断时,只需修改第一个定时器节点的值即可,从而大大降低了时钟中断处理函数的工作量。当需要添加新的定时器节点时,可在插入定时器进入列表前,根据第一项来修改超时值。对于这样的组织管理方式,由于第一个节点就是当前定时器链表中定时时间最短的节点,且对链表的到期操作只需要集中在第一个节点上,故能减少对定时器链表多余的冗余操作,也免去了查找定时节点的开销。 2 AT91R40008微处理器


AT91R40008是美国ATMEL公司推出的一款基于ARM7TDMI嵌入式微处理器的16/32位微处理器。该器件的定时器/计数器模块含有三个完全相同的16位定时器/计数器通道。每个通道都能独立编程来完成多种功能(如频率测量、事件计数、时间间隔测量、脉冲产生、延迟和脉冲宽度调制等)。每个通道有三个外部时钟输入、5个内部时钟输入和2个可由用户配置的多功能I/O。此外,每个通道还可驱动一个内部信号,以通过A-IC(先进中断控制器)产生处理器中断。AT91R40008器件中的定时器/计数器模块有两个控制所有通道的全局寄存器。其中模块控制器寄存器可以使三个通道由同一条指令同时启动,而模块模式寄存器则为每一个通道定义了外部时钟输入,并允许它们级联。每一个定时器/计数器都可以独立工作于两种模式,分别是捕获模式和波形模式。前者用于对信号的测量,后者则允许产生波形。通过TC通道模式寄存器的WAVE位可以控制定时器/计数器的工作模式。定时器的重新设定和启动可由触发条件决定。每个模式下通常有三种类型的内部触发和一个外部触发。其内部的三种触发类型分别是:


(1)软件触发


每个通道有一个软件触发,可通过设定TC通道控制寄存器的SWTRG来得到。


(2)SYNC触发


每个通道有一个同步触发。该信号被响应和同一个软件的一般效果触发相同。所有通道的同步信号均可通过设定TC模块控制寄存器的SYNC来同时响应。


(3)RC比较触发


如果CPCTRG在TC通道模式寄存器被置位,那么,RC将在每个通道中执行,此时如果计数器与RC寄存器中的数值相匹配,则将得到一个RC比较触发。


事实上,定时器通道也能配置成一个外部触发器。在捕获模式中,外部触发器信号能在TIOA和TIOB之间被选择而执行一个触发。而在波形模式中,外部事件则可通过TIOB、XC0、XC1或XC2编程来执行一个触发。如果产生一个外部触发,那么,脉冲周期必须比系统时钟周期更长才能保证该触发被检测到。


3软件定时器的实现


由于AT91R40008中的三个定时器/计数器都是16位,所以每个计数器的值只能从0x0000增加到0xFFFF,在溢出中断以后,这个值将重新从0x0000开始。该特性限制了定时器/计数器单次最长的定时时间。为此,本文采用改进的单链表方式组织定时器链表,这样,在定时器中断上,硬件定时器不再周期性地产生中断请求,而只在用户预先指定的时刻产生,同时将下一次中断发生时间动态写入硬件定时器。


软件定时器的实现可通过各种函数来实现,主要有定时器驱动函数、定时器的初始化函数、定时器任务函数、定时器的启动和关闭函数、定时器的添加和删除函数以及定时器中断处理函数等。


3.1定时器的驱动


软件定时器可通过一个16位定时器/计数器来提供定时中断,然后关闭定时器/计数器相应的中断并设置相关参数,然后打开相应的中断来完成。定时器驱动流程图如图1所示。







3.2定时器初始化


定时器初始化函数主要是初始化定时器单链表,给定时器单链表分配一块内存单元;该函数将设置一个头结点,这个头结点包含定有时器链表中定时器单元个数、定时器单元句柄以及指向单链表队列的头指针。然后创建一个定时器任务,以作为定时器到期时的执行函数。


3.3定时器的启动和关闭


定时器启动函数可通过设置定时器寄存器TC_RC(TC寄存器)和TC_CCR(TC通道控制寄存器)来实现,而定时器关闭函数则可通过TC_CCR(TC通道控制寄存器)和TC_SR(TC状态寄存器)来执行。


3.4定时器的添加和删除


在定时器添加函数中,需要判断新加的定时器所要插入的位置。插入时,如果链表为空,则直接插入第一个节点位置;否则,需要将新加的定时器值与链表中其余元素做一个比较,以找到新加的定时器在链表中的合适位置,同时相应修改自身的定时值。其示意性代码如下:



3.5定时器中断处理

在定时器中断处理函数中,首先要求得逝去的定时器ticks值。然后将这个值与定时器队列的第一个定时器节点做比较,以判断第一个定时器节点是否定时时间到。这个函数的示意性代码如下:


3.6定时器任务


在定时器任务中设置有一个无限循环等待,可创建一个定时器等待消息队列,以等待定时消息的到来。定时器消息到时,即执行这个定时消息所对应的任务,同时释放该函数定时器所占用的定时器单元节点,然后开始下一轮循环。


4软件定时器应用实例


为了检验上述算法的可行性和可靠性,笔者采用RC比较触发方式来对定时器报文进行了设计。其中时钟信号选择为MCK/1024,即MCK为50MHz,ticks为62500,也就是每1.28s产生一次定时器中断,设置定时时间为5s。运行该应用程序后,用Sniffer抓包软件抓获的报文如图2所示。






由图2可以看出,取平均值后,定时器任务间隔时间约为5.000 207s,完全可以达到设计要求,满足设计需要。

5 结束语


本文介绍了一种在AT91微处理器上通过单链表实现的软件定时器的设计方法。虽然创建时,该定时器的到期时间是乱序的,但启动后的定时器则会严格按照到期时间的先后顺序形成定时器单链表,并依次进入定时中断同时发出对应消息。经过测试。利用此定时器队列管理机制,能够简单有效地满足系统对定时器的需求,同时节省了嵌入式系统定时管理所需要的计算资源。




[1]



相关文章
· 基于Lonworks总线的嵌入式智能节点的设计[10]
· VxWorks下实时多任务程序的实现[8]
· 一种基于以太网的嵌入式数字监控系统[17]
· 嵌入式操作系统Windows CE研究[16]
· 便携式设备动态电源管理的Linux技术[22]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
Camstar帮助中国医疗器械制造商
中华英才网将被全盘收购
破国外垄断 中国移动存储标
IC设计面临三重挑战 ED
手机电视芯片方案需求多变
北京德尔威科技有限公司与台湾佳营电子
全球手机芯片市场战局将出现重大变革
北京奥运安保系统首次成功运用射频识别
英特尔开发空气传电技术
IBM生产出首个22纳米工艺SRAM
 
热门下载 [更多]
 
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
[ ] 实用电源电路集锦
 
论坛新帖 [更多]
 
液晶问题...
[原创]本公司长期批发各种滑冰...
[原创]本公司长期超低价批发各...
[原创]本公司长期超低价批发种...
[原创]本公司长期批发各种酒、...
[原创]本公司长期低价批发各种...
[原创]长期低价批发各种母婴用...
[原创]本公司长期批发各种饮料...
[推荐]通讯上通用的一个GSM...
用两个电容代替一个?...

 
赞助商 [更多]
 


ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网