请教MSP430F5438A 的 P7.3 如何捕捉方波? 我 这个代码问题在哪儿?

2019-07-24 16:27发布

MSP430F5438A 的 P7.3接了个PWM输出的模块, 对应的是TA1.2, 请问如何用这个口捕捉方波? 我下面你的代码无法进入中断 Case 2.
另外, 请问Read函数如何写最好呢? 是根据标志位判断
Read()
{
1. 开启捕捉
2. 等待标志位=1, 得到结果
3. 关闭捕捉
}
这样写对吗? 还是让他一直捕捉?




  1. ulong start= 0;
  2. ulong end= 0;
  3. ulong diff= 0;
  4. uint overflow=0;
  5. uchar cap_flag= 0;

  6. #pragma vector=TIMER1_A1_VECTOR
  7. __interrupt void TIMER1_A1(void)
  8. {
  9.        
  10.         switch(__even_in_range(TA1IV,14)) //向量查询
  11.                
  12.         {
  13.         case 2: //捕获中断
  14.         {
  15.                 if(TA1CCTL2&CM0) //上升沿
  16.                 {
  17.                         cap_flag= 0;
  18.                         TA1CCTL2=(TA1CCTL2&(~CM0))|CM1; //更变设置为下降沿触发
  19.                         start=TA1CCR2; //记录初始时间
  20.                         overflow=0; //溢出计数变量复位
  21.                 }
  22.                 else if (TA1CCTL2&CM1) //下降沿
  23.                 {
  24.                         TA1CCTL2=(TA1CCTL2&(~CM1))|CM0; //更变设置为上升沿触发
  25.                         end=TA1CCR2; //用start,end,overflow计算脉冲宽度
  26.                         diff= end-start;
  27.                         cap_flag= 1;
  28.                 }
  29.         }
  30.         break;
  31.                
  32.         case 10: //定时器溢出中断
  33.                 overflow++;
  34.                 break; //溢出计数加1

  35.         default:
  36.                 break;
  37.                
  38.         }
  39.        
  40. }


  41. void Init_Timer1_A3(void)
  42. {

  43.         P7SEL|=BIT3;//选择p7.3第二功能
  44.         P7DIR &=~BIT3;//选择p7.3方向为输入
  45.         TA1CCTL2&=~(CCIS1+CCIS0); // 捕获源为P7.3,即CCI0A(也是CCI0B)
  46.         TA1CCTL2|=CM0+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式

  47.         // TA1CCTL0|=CCIE; //允许捕获比较模块提出中断请求
  48.         TA1CCTL2|=CCIE; //允许捕获比较模块提出中断请求
  49.         // TA1CCTL2|=CCIE; //允许捕获比较模块提出中断请求

  50. //        TA1CTL|=TASSEL_2; //选择时钟SMCLK
  51. //        TA1CTL|=TACLR; //定时器清零,      
  52. //        TA1CTL|=MC_2;//定时器开始计数(连续计数模式0~0xFFFF) TBCTL|=MC_2;

  53.                 TA1CTL = TASSEL_1 + MC_2 + TACLR + TAIE;
  54. }
复制代码


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。