查看: 1871|回复: 0

定时器多通道输入捕捉

[复制链接]

该用户从未签到

13

主题

34

帖子

0

注册会员

Rank: 2

积分
149
最后登录
2022-6-14
发表于 2018-3-28 15:52:49 | 显示全部楼层 |阅读模式
尝试使用XS128定时器的输入捕捉采集正脉宽的时间,目前开启了CH0、CH1输入捕捉但是中断只响应CH0,但是单独没各通道输入捕捉功能正常。不知道为什么望有经验的大牛对症下药。

  1. #include <hidef.h>      /* common defines and macros */
  2. #include "derivative.h"      /* derivative-specific definitions */

  3. /*********************************
  4.     *   TIM 输入捕捉 Input Capture
  5.     *   线路连接:PT0接PA4
  6.     *    LED循环闪烁
  7. *********************************/


  8. uint time1 = 0,time2 = 0,delaytime0 = 0,time11 = 0,time21 = 0,delaytime1 = 0;

  9. int Plug = 0;

  10. void IC_Init()
  11. {  
  12.         TSCR1 = 0x80;   //模块使能
  13.          
  14.         TIOS_IOS0 = 0;  //选择0通道为输入捕捉
  15.         TIOS_IOS1 = 0;  //选择1通道为输入捕捉
  16.          
  17.         //TCTL4 = 0X05; //上升沿捕捉
  18.         TCTL4_EDG0A = 0x01;
  19.         TCTL4_EDG0B = 0x00;
  20.         
  21.         TCTL4_EDG1A = 0x01;
  22.         TCTL4_EDG1B = 0x00;
  23.         
  24.         TIE_C0I = 0x01;   //允许中断
  25.         TIE_C1I = 0x01;
  26.          
  27.         //TSCR2 = 0X07; //总线时钟:8MHZ TIM时钟周期:1/(8/2^7)=16us
  28.         TSCR2 = 0X03; //总线时钟:8MHZ TIM时钟周期:1/(8/2^3)=1us
  29.             
  30.         TFLG1 = 0xff; //清除标志位  
  31.         TFLG2 = 0xff;  
  32. }  
  33. void IO_Init()
  34. {   
  35.         DDRB = 0xff;  //B口为输出  
  36.         DDRA = 0xff;  //A口为输出  
  37.         PORTB = 0xff; //初始灯全灭  
  38. }


  39. #pragma CODE_SEG __NEAR_SEG NON_BANKED

  40. interrupt 8 void ICI0_ISR(void)
  41. {  
  42.       static int log = 0;

  43.       //if(TFLG1_C0F==1)  
  44.       TFLG1_C0F = 1;   //清除标志位
  45.       
  46.       time1 = time2;
  47.       time2 = TC0;

  48.       log++;
  49.       if(log > 1)
  50.       {
  51.          log = 0;
  52.          TCTL4 = 0X01; //上升沿捕捉  
  53.       }else
  54.       {
  55.          TCTL4 = 0X02; //下降沿捕捉
  56.       }
  57.          
  58.       
  59.       delaytime0 = time2 - time1;  //可用于显示或其他作用,时间:delaytime*16us  
  60.       PORTB_PB1 = ~PORTB_PB1;
  61.       
  62. }

  63. interrupt 9 void ICI1_ISR(void)
  64. {
  65.      static int log = 0;
  66.      
  67.      //EnableInterrupts;
  68.      TFLG1_C1F = 1;   //清除标志位
  69.      
  70.      log++;
  71.      if(log > 1)
  72.      {
  73.          log = 0;
  74.          TCTL4 = 0X04; //上升沿捕捉  
  75.      }else
  76.      {
  77.          TCTL4 = 0X08; //下降沿捕捉
  78.      }
  79.       
  80.      time11 = time21;
  81.      time21 = TC1;
  82.      
  83.      delaytime1 = time21 - time11;  //可用于显示或其他作用,时间:delaytime*16us
  84.      PORTB_PB3 = ~PORTB_PB3;
  85. }
  86. #pragma CODE_SEG DEFAULT


  87. void Delay_ms(uint ms)
  88. {  //16MHZ ms级延时  
  89.         uint i,j;  
  90.        if (ms<1) ms=1;  
  91.        for(i=0;i<ms;i++)  
  92.          for(j=0;j<1335;j++);  
  93. }

  94. void main(void) {
  95.   /* put your own code here */
  96.   
  97.   IO_Init();  
  98.   IC_Init();

  99.         EnableInterrupts;

  100.   
  101.   for(;;)
  102.   {  
  103.         
  104.       PORTB_PB0 = ~PORTB_PB0;//提供脉冲源  
  105.       Delay_ms(100);  
  106.       _FEED_COP();
  107.       
  108.   }
  109.   /* please make sure that you never leave main */
  110. }
  111.    
  112.    
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-8-1 04:24 , Processed in 0.101673 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表