今天带着大家学习飞思卡尔MC9S12X TIME模块中的输入捕获,TIME模块之前介绍过了在这里就不重复了。
首先先大家介绍下什么是输入捕获
【
输入捕捉
】
输入捕捉
(
I
nput
C
apture
,
IC
)
:通过捕获自由运行计数器的计数值来检测外部事件和记录选定的输入信号跳变边沿的时间。
当外部事件发生或信号发生变化时,指定的输入捕捉通道对应的引脚上产生一个规定的跳变沿(上升沿或下降沿)。定时器输入通道根据相应引脚上的电平变化,将当前自由运行计数器中的计数值捕捉到通道寄存器中。
如果此时允许输入捕捉中断,则产生一次输入捕捉中断申请,利用中断服务程序可读取通道计数器数值,获得事件发生的时刻或信号变化的时刻。
原理如下图所示
TIME控制寄存器如下所示:
TIM模块的输入捕捉功能及寄存器设置
S12XS
系列
MCU
的
TIM
具有
8
个输入捕捉
/
输出比较
(IC/OC)
通道
IOC0
~
IOC7
,对应于端口
PT0
~
PT7
。由于输入捕捉与输出比较通道共享引脚、通道寄存器和中断逻辑,因此,每个通道同一时刻只能启用其中一个功能,可以通过设置定时器输入捕捉
/
输出比较选择寄存器
TIOS
中的
IOSn
位,选择输入捕捉
/
输出比较功能。
TIM模块输入捕捉功能
输入捕捉功能通过捕获自由运行计数器来监视外部事件。
当通道设置为输入捕捉功能时,自由运行定时器启动后,边沿检测器开始监视引脚事件,一旦引脚电平出现设定的有效跳变,便将自由运行计数器寄存器
TCNT
的当前值捕捉到捕捉寄存器
TCn
(
n=0
~
7
)。
有效跳变边沿可以是上升沿、下降沿或任意跳变,由定时器控制寄存器
TCTL3
和
TCTL4
中的
EDGxB
和
EDGxA
位确定。
也可设置位
EDGxB:EDGxA
=00
,关闭边沿检测器,停止通道捕捉。
TIM模块输入捕捉功能
由于同步电路原因,引脚输入的最小脉宽要求大于
2
个总线时钟周期。
捕捉完成后,将置位主定时器中断标志寄存器
TFLG1
中的中断请求标志位
CnF
,如果定时器中断允许寄存器
TIE
中的中断允许位
CnI
=1
,且
CCR
寄存器中的控制位
I=1
,则产生一次输入捕捉中断申请,转向
TCn
中断服务程序。
如果不采用中断方式响应引脚事件,可以置
CnI
=0
,通过软件查询标志位
CnF
来进行处理。各个
IC/OC
通道可以单独发出中断请求,或关闭中断。
事件处理完成后,通过向
TFLG1
寄存器的对应位写入
1
,以清除标志
CnF
。
TIM
模块输入捕捉通道中断标志位
C0F
~
C7F
的置位条件如图所示。
v
S12XS
系列
MCU
的
8
路输入捕捉通道都不带缓冲寄存器,也没有覆盖控制寄存器,因此,发生一次输入捕捉事件后,
TC
寄存器会立即写入新值。
v
如果发生新的捕捉事件时,上一次的数值还没有被读出,上一次捕捉的值将被新值所覆盖。
v
另外,
TIM
的输入捕捉没有延迟计数器,不可以通过延迟给定的时间间隔产生输出脉冲的方法来避免窄脉宽的影响。
v
S12XS
系列
MCU
的
IC
模块事件触发信号只能来自于本通道的输入引脚。
v
当输入引脚出现有效事件时,引脚电平变化时刻主定时器的计数值将被捕获到相应通道的捕捉寄存器中。
具体的寄存器的配置,我们就直接上代码,根据数据手册进行配置
如需获取相关源码,请关注微信公众号“嵌入式软件开发学习圈”,
留言“飞思卡尔time”,即可免费获取相关学习资料。
微信公众号内有其他嵌入式学习经验分享。需要朋友们可以关注下微信公众号
如有相关嵌入式学习问题或疑问,欢迎在微信公众号留言.
