输入捕捉是用来检测外部的事件或输入信号的变化。当外部事件发生或输入信号发生变化时,在相应的输入捕捉引脚上产生一个指定的边沿跳变(通过TPMxSC寄存器的ELSnB:ELSnA位设定),定时器捕捉到特定的边沿跳变后把计数器的当前值锁存到通道值寄存器中,如果通道允许中断则系统会自动产生一次输入捕捉中断。输入捕捉功能的结构框图如图8-2所示,可以看出输入捕捉功能是由16位计数器、16位通道值寄存器、输入边沿检测逻辑和中断逻辑组成。
图8-2 输入捕捉功能的结构框图
1.输入捕捉执行过程
当通道被配置为输入捕捉模式时(CPWMS=0,MSnB:MSnA=00,ELSnB:ELSnA≠00),通道引脚TPMxCHn引脚被作为TPM的边沿有效输入。ELSnB:ELSnA控制位决定触发输入捕捉事件的极性和边沿。基于总线时钟的同步器会将输入边沿同步到总线时钟上,这意味着在一个输入捕捉引脚上能被可靠检测到的最小脉冲宽度是总线时钟周期的4倍。此时TPM会把这个引脚当作输入捕捉的输入而忽略端口数据和数据方向控制。
当一个有效边沿触发了输入捕捉通道时,TPM自动将当前计数器寄存器的值锁存到通道值寄存器中。通道值寄存器TPMxCnVH:TPMxCnVL是16位寄存器,分为高8位字节和低8位字节。在输入捕捉模式下,对通道值寄存器写数据是无效的,读取其中的任意一个字节都触发寄存器的“互锁机制”,因而当读取TPMxCnVH或TPMxCnVL时发生了另外一次特定的边沿跳变时,此时读取的仍是上一次捕捉到的数值,而不受本次捕捉的影响,只有当两个字节的数据全部读取完成时才会释放缓冲器。因此一个读取通道值寄存器的操作应该是连续的两个字节的读取。(www.xing528.com)
2.输入捕捉应用
通过输入捕捉记录输入信号的连续边沿跳变,就可以通过软件算法得到输入信号的周期和脉宽,也可以简单捕捉信号电平跳变的次数。例如,为了测量信号周期只要捕捉两个相邻的上升沿或者下降沿的时间,两者相减就可得到信号周期(无溢出的情况下)。为了测量输入信号的脉宽就要记录相邻的两个不同极性的边沿跳变时间,当测量的脉宽小于定时器的溢出周期时只需要将两次值直接相减即可(看成无符号数);但如果测量值大于定时器的溢出值,那么在两次输入捕捉之间计数器的计数值就会溢出翻转,这时直接将两次捕捉到的值简单相减就没有任何意思,所以在处理时需要增加一个对定时器溢出次数的记录,最终的脉宽值应该是定时器定时溢出时间与两次捕捉到的时间差的和值。
图8-3表示了输入捕捉过程示意图。假设触发方式是下降沿触发,在图中,时刻1模块将计数器的值锁存到通道值寄存器中,在输入捕捉中断中将其保存到一个内存单元,以防止第二次捕捉将内容覆盖;在图中的时刻2捕捉到第二次有效边沿,模块会再次保存当前计数器值并进入中断,此时将通道值寄存器中的内容与内存单元值相减就可得到低电平持续的时间。
图8-3 输入捕捉过程示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。