飞思卡尔MC9S12XS TIME输入捕获

今天带着大家学习飞思卡尔MC9S12X  TIME模块中的输入捕获,TIME模块之前介绍过了在这里就不重复了。

首先先大家介绍下什么是输入捕获

输入捕捉
      输入捕捉(InputCaptureIC):通过捕获自由运行计数器的计数值来检测外部事件和记录选定的输入信号跳变边沿的时间。
      当外部事件发生或信号发生变化时,指定的输入捕捉通道对应的引脚上产生一个规定的跳变沿(上升沿或下降沿)。定时器输入通道根据相应引脚上的电平变化,将当前自由运行计数器中的计数值捕捉到通道寄存器中。
      如果此时允许输入捕捉中断,则产生一次输入捕捉中断申请,利用中断服务程序可读取通道计数器数值,获得事件发生的时刻或信号变化的时刻。

 原理如下图所示

飞思卡尔MC9S12XS TIME输入捕获


TIME控制寄存器如下所示:

飞思卡尔MC9S12XS TIME输入捕获

TIM模块的输入捕捉功能及寄存器设置

S12XS系列MCUTIM具有8个输入捕捉/输出比较(IC/OC)通道IOC0IOC7,对应于端口PT0PT7。由于输入捕捉与输出比较通道共享引脚、通道寄存器和中断逻辑,因此,每个通道同一时刻只能启用其中一个功能,可以通过设置定时器输入捕捉/输出比较选择寄存器TIOS中的IOSn位,选择输入捕捉/输出比较功能。


 TIM模块输入捕捉功能

输入捕捉功能通过捕获自由运行计数器来监视外部事件。
当通道设置为输入捕捉功能时,自由运行定时器启动后,边沿检测器开始监视引脚事件,一旦引脚电平出现设定的有效跳变,便将自由运行计数器寄存器TCNT的当前值捕捉到捕捉寄存器TCnn=07)。
有效跳变边沿可以是上升沿、下降沿或任意跳变,由定时器控制寄存器TCTL3TCTL4中的EDGxBEDGxA位确定。
也可设置位EDGxB:EDGxA=00,关闭边沿检测器,停止通道捕捉。

TIM模块输入捕捉功能

由于同步电路原因,引脚输入的最小脉宽要求大于2个总线时钟周期。
捕捉完成后,将置位主定时器中断标志寄存器TFLG1中的中断请求标志位CnF,如果定时器中断允许寄存器TIE中的中断允许位CnI=1,且CCR寄存器中的控制位I=1,则产生一次输入捕捉中断申请,转向TCn中断服务程序。
如果不采用中断方式响应引脚事件,可以置CnI=0,通过软件查询标志位CnF来进行处理。各个IC/OC通道可以单独发出中断请求,或关闭中断。
事件处理完成后,通过向TFLG1寄存器的对应位写入1,以清除标志CnF
TIM模块输入捕捉通道中断标志位C0FC7F的置位条件如图所示。 

飞思卡尔MC9S12XS TIME输入捕获


vS12XS系列MCU8路输入捕捉通道都不带缓冲寄存器,也没有覆盖控制寄存器,因此,发生一次输入捕捉事件后,TC寄存器会立即写入新值。
v如果发生新的捕捉事件时,上一次的数值还没有被读出,上一次捕捉的值将被新值所覆盖。
v另外,TIM的输入捕捉没有延迟计数器,不可以通过延迟给定的时间间隔产生输出脉冲的方法来避免窄脉宽的影响。
vS12XS系列MCUIC模块事件触发信号只能来自于本通道的输入引脚。
v当输入引脚出现有效事件时,引脚电平变化时刻主定时器的计数值将被捕获到相应通道的捕捉寄存器中。


具体的寄存器的配置,我们就直接上代码,根据数据手册进行配置

飞思卡尔MC9S12XS TIME输入捕获


飞思卡尔MC9S12XS TIME输入捕获


如需获取相关源码,请关注微信公众号“嵌入式软件开发学习圈”,
留言“飞思卡尔time”,即可免费获取相关学习资料。

微信公众号内有其他嵌入式学习经验分享。需要朋友们可以关注下微信公众号

如有相关嵌入式学习问题或疑问,欢迎在微信公众号留言.

飞思卡尔MC9S12XS TIME输入捕获