xs128TIM之输入捕捉

   PS:第一篇相关的文章就从最近的学习模块写起,以前学的会找时间补过。

    输入捕捉作为timer一个重要的分支,有着其重要的作用,据我理解,其主要作用是计算脉冲宽度,作为有效数据供芯片及其他模块处理。

    一个资料中这样说:

    XS128的输入捕捉用于捕捉跳变沿,可以单独捕捉上升沿或下降沿,也可以同时捕捉上升沿和下降沿。其实输入捕捉和外部中断差不多。

  百度知道里面一个人对输入捕捉的回答:

    输入捕捉:如具有此功能的一个管脚,定时器在内部时钟的作用下在运行,这时管脚来了个中断,假如上升沿吧。在中断的作用下,定时器停止工作,此时可以读出定时器的数值,读出后再开启定时器,等待下次中断,再读取一次定时器数值, 两次相减,就可求出二次中断的间隔时间。

    相关的重要寄存器介绍:


控制寄存器

xs128TIM之输入捕捉_第1张图片

输入捕捉是属于定时器模块的,所以需要在定时器使能的条件下才可以。TEN是定时器的总开关,写1使能。

输入捕捉/输出比较选择寄存器


xs128TIM之输入捕捉_第2张图片


XS128的输入捕捉和输出比较各有8个通道,标号相同的通道共用T口对应的引脚。通过设置该寄存器就可以对其进行选择。1为输出比较,0为输入捕捉。

输入捕捉控制寄存器捕捉沿选择


xs128TIM之输入捕捉_第3张图片



xs128TIM之输入捕捉_第4张图片



如图,2位组合决定捕捉沿变,比如EDG0B = 0 , EDG0A = 1表示仅捕捉上升沿。

定时器中断使能寄存器


xs128TIM之输入捕捉_第5张图片


该寄存器决定输入捕捉和输出比较是否允许产生中断。1为允许中断,0为禁止中断。

定时器中断标志位


xs128TIM之输入捕捉_第6张图片


产生输入捕捉或输出比较的时候,该位会置1。写1可以清零。在中断函数结束时要写1清零。

   代码参考:

/*********************************
*   TIM 输入捕捉 Input Capture
*   线路连接:PT0接PA4
*    LED循环闪烁
*********************************/
#include       /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
uint time1,time2,delaytime;
void IC_Init(){
    TSCR1=0x80;   //模块使能
    TIOS_IOS0=0;  //选择0通道为输入捕捉
    TCTL4=0X01; //上升沿捕捉
    TIE=0x01;   //允许中断
    TSCR2=0X07; //总线时钟:8MHZ TIM时钟周期:1/(8/2^7)=16us 
    TFLG1=0xff; //清除标志位
    TFLG2=0xff;
}
void IO_Init(){ 
    DDRB=0xff;  //B口为输出
    DDRA=0xff;  //A口为输出
    PORTB=0xff; //初始灯全灭
}
void Delay_ms(uint ms){  //16MHZ ms级延时
    uint i,j;
   if (ms<1) ms=1;
   for(i=0;i

      




你可能感兴趣的:(飞思卡尔)