【嵌入式】Freescale MK30 使用注意事项(二)-定时器篇(一)
0赞今天终于有点时间来调试我的Mk30的板子了。上来写点心得。大家别拍砖啊!呵呵。和大家一起进步感觉很不错。
在这里先谢谢jicheng0622朋友。我没有购买开发板,要不是看了他有关于kinetis的博文,也不可能进步的很快。呵呵毕竟Freescale的数据手册看起来还是比较慢的,而且...。
今天要实验的内容是定时器。
我之前用的是systickclock,这个是与厂牌无关的cortex内核提供的基本24bit定时器,定时器使用cpuclock工作。关于详细的systickclock的详细内容请大家参考cortex-M3(4)的参考资料,这里不限详细描述。注意kinetis中, systickclock是没有校准过的,所以不能够提供准确的定时。
看了数据手册以后,发现kinetis的定时器有点超乎寻常的复杂。除了Cortex-M4内核自带的systickclock以外,Freescale还自己定义了4种类型的定时器!!分别是PDB(Programmable Delay Block)、FTM(FlexTimer Module)、PIT(Periodic Interrupt Timr)、LPTMR(Low-Power Timer)。
刚开始看上去的时候一下子懵了,本来想定时器不过就是一个小玩意,分分钟搞定的事情,怎么一下子冒出来这么多!!!后来仔细看了一下才明白Freescale的良苦用心!呵呵,下面简单介绍一下这4种定时器的功能和用途。
1. PDB 模块。 可编程延时计数器(我的英文不太好,有不妥的地方欢迎大家多拍几砖!)
这个模块很有意思,从字面理解就是一个delay模块,感觉没有用的。但是看了详细资料以后才发现,这个模块其实很有用,它可以帮助完成需要同步等待的系统延时,而不需要使用任何CPU资源。数据手册上面也详细的说明了一下PDB于trigger的关系。这个模块对于ADC和DAC的同步都是很有必要的。当然,这个模块也可以将trigger输出给其它的硬件模块,比如DMA等等。
所以PDB其实是一个时间同步定时器。
2. FTM。这个模块才是我们常说的定时器。这是一个非常成熟的定时器模块,它是HCS08单片机TPM的加强版本。有用过HCS08单片机的朋友,可以想想一下它的功能----绝对的强大!
这个模块的软件设计结构有点类似于一个金字塔,可以有程序员任意的搭建想要完成的目标设计。
这个模块有一个致命的缺点:16bit的定时长度计数器。但是它可以使用trigger来激活启动,也可以产生trigger给其他的模块,所以这些定时器是可以“级联”的。
当然,如果将FTM用来做一般的定时任务,你会发现有点大材小用了。因为FTM的主要任务其实是完美的完成PWM控制。它特有死区控制功能,可以节省大量的防死区代码。
所以FTM是PWM定时器。
3. PIT。这是一个长时定时器。完整的32bit定时器,它可以产生trigger给其他的硬件模块。这个模块是FTM 16bit缺陷的一个补充。没有什么特别的地方,它是一个标准的周期定时器,可以用来激活一些周期任务,比如电池检测,数据备份等等。
所以PIT,是一个周期定时器。
4. LPTMR。没设么说的了,这四一个可在低速时钟模式使用的定时器。用来给系统一个可以周期检测并唤醒的条件。对于使用电池的MK30系统,这个定时器很有用。例如:无线的数据采集。使用这个定时器可以完成唤醒-采样-计算-数据发送-睡眠。既节省了电力又完成了数据采样计算的任务。
所以LPTMR,睡眠唤醒定时器。
以上是定时器概述,有不准确的地方,希望大家批评指正。
有关于详细的使用描述,等我调试完成。在与大家分享。
调试代码去了...
