飞思卡尔单片机 ECT学习资料.docx

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
飞思卡尔单片机 ECT学习资料

9S12?系列单片机的ECT?(Enhanced?Capture?Timer?Module)模块是在原68HC12?的?Standard?Timer?module?基础上加以增强功能形成的。ECT?模块主要由以下几部分组成,参看图1:一个带可编程预分频的16位向上计数的自由运行计数器8个独立的定时器通道,每个通道具备输入捕捉/输出比较功能4个8位脉冲累加器,也可设置成2个16位脉冲累加器一个带可编程预分频的16位的向下计数的计数器????从上面示意图中可以就看出,ECT?模块相当的复杂,不是简单的几句话就能说明白的。我也是通过很长时间的学习实践,才逐步掌握了ECT模块的使用。本文将通过一系列的实例,从最简单的功能开始,逐步展开。一步一步的展示ECT?模块的强大功能。实验1:自由运行计数器(TCNT)与溢出中断????自由运行计数器(TCNT)也称为自由运行主定时器,是一个16位的计数器,可以说是ECT的核心。在系统复位时,这个自由运行计数器的初值为$0000。当ECT?模块运行时,自由运行计数器从$0000~$FFFF?循环递增计数。当计数器溢出复零时,会置位中断标志。利用这个计数器,可以产生一个周期的中断信号。TCNT?的输入时钟也是可以选择的,图2?给出了TCNT?的时钟源的示意图。可以看出,TCNT的输入时钟可以来源于总线时钟、总线时钟经过预分频、外部引脚输入的脉冲、外部引脚输入脉冲经过脉冲累加器分频这四种选择。当然,选择哪个时钟源其实就是在程序中设置一下相应的寄存器这么简单。????了解了上面的介绍,就可以开始本文的第一个例子了,这个例子非常简单,将BUS?CLOCK?分频后作为TCNT?的输入时钟,使能?TCNT?溢出中断。在开始代码之前,还需要介绍几个程序中用到的寄存器。TCNT寄存器(Timer?Count?Register)这个寄存器其实已经介绍过了,它是一个16?位的只读寄存器。在每个时钟输入下计数值会自动加1,当计数值为?0xFFFF?后下一个时钟脉冲会使计数器溢出为?0x0000。程序中可以随时读取?TCNT?的值,唯一需要注意的是?TCNT?是个16位的寄存器,读取时要一次将其读出,如果分为高低两个字节读取,读到的数据不一定能拼接成一个有效的计数值。图?3?TCNT?寄存器TFLG2寄存器?(Main?Timer?Interrupt?Flag?2)这个寄存器只有最高位TOF?是有意义的。当TCNT?溢出时会置位?TOF?位,程序中可以轮询这一位来判断TCNT?是否溢出了。当然这种轮询的方法效率很低,更实用的方法是利用?TCNT?溢出中断。向TOF?位写?1?会清除TOF,在?TCNT?溢出中断中就必须清除?TOF,否则就不会响应下一次溢出中断。图?4?TFLG2?寄存器TSCR2?寄存器(Timer?System?Control?Register?2)这个寄存器由三部分功能组成。TOI?位是?Timer?Overflow?Interrupt?Enable?的简写。TOI?位为?0时表示禁止?TCNT?溢出中断,这时只能通过轮询?TOF?位来判断是TCNT计数器是否溢出了。TOI?位为?1?表示使能?TCNT溢出中断。TCRE?位是?Timer?Counter?Reset?Enable?的简写。TCRE?位为?0表示TCNT自由运行,TCRE?位为1表示当TCNT?=?OC7?时复位。PR2、PR1、PR0?是总线时钟的预分频因子。当?PR2-0?组成的三位?2进制数为?N?时,表示将?BUS?CLOCK?分频?2^N。图?5?TSCR2?寄存器TSCR1寄存器(Timer?System?Control?Register?1)TEN?位为0时?ECT模块被禁用。TEN?位为1时?ECT模块被使能。TSWAI(Timer?Module?Stops?While?in?Wait)?位为0时,ECT?模块在?STOP?模式下仍旧运行。TSWAI位为1时,ECT?模块在?STOP?模式停止运行。TSFRZ?(Timer?and?Modulus?Counter?Stop?While?in?Freeze?Mode),这一位与?TSWAI?位类似。TFFCA?(Timer?Fast?Flag?Clear?All)我还没仔细研究,作用不明。图?6?TSCR1?寄存器有了上面这些介绍,就可以很容易的看懂下面的代码了。在我的实验板上,晶振频率为16.384MHz,因为没有开启PLL,BUS?CLOCK?为8.192MHz,内核频率为16.384MHz。8.192MHz被128预分频后为?64KHz,16位计数器溢出频率为0.98Hz(64000/65536)[cpp]?view plaincopy#include?hidef.

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档