MSP430F5438A 的 P7.3接了个PWM输出的模块, 对应的是TA1.2, 请问如何用这个口捕捉方波? 我下面你的代码无法进入中断 Case 2.
另外, 请问Read函数如何写最好呢? 是根据标志位判断
Read()
{
1. 开启捕捉
2. 等待标志位=1, 得到结果
3. 关闭捕捉
}
这样写对吗? 还是让他一直捕捉?
- ulong start= 0;
- ulong end= 0;
- ulong diff= 0;
- uint overflow=0;
- uchar cap_flag= 0;
- #pragma vector=TIMER1_A1_VECTOR
- __interrupt void TIMER1_A1(void)
- {
-
- switch(__even_in_range(TA1IV,14)) //向量查询
-
- {
- case 2: //捕获中断
- {
- if(TA1CCTL2&CM0) //上升沿
- {
- cap_flag= 0;
- TA1CCTL2=(TA1CCTL2&(~CM0))|CM1; //更变设置为下降沿触发
- start=TA1CCR2; //记录初始时间
- overflow=0; //溢出计数变量复位
- }
- else if (TA1CCTL2&CM1) //下降沿
- {
- TA1CCTL2=(TA1CCTL2&(~CM1))|CM0; //更变设置为上升沿触发
- end=TA1CCR2; //用start,end,overflow计算脉冲宽度
- diff= end-start;
- cap_flag= 1;
- }
- }
- break;
-
- case 10: //定时器溢出中断
- overflow++;
- break; //溢出计数加1
- default:
- break;
-
- }
-
- }
- void Init_Timer1_A3(void)
- {
-
- P7SEL|=BIT3;//选择p7.3第二功能
- P7DIR &=~BIT3;//选择p7.3方向为输入
- TA1CCTL2&=~(CCIS1+CCIS0); // 捕获源为P7.3,即CCI0A(也是CCI0B)
- TA1CCTL2|=CM0+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式
-
- // TA1CCTL0|=CCIE; //允许捕获比较模块提出中断请求
- TA1CCTL2|=CCIE; //允许捕获比较模块提出中断请求
- // TA1CCTL2|=CCIE; //允许捕获比较模块提出中断请求
-
- // TA1CTL|=TASSEL_2; //选择时钟SMCLK
- // TA1CTL|=TACLR; //定时器清零,
- // TA1CTL|=MC_2;//定时器开始计数(连续计数模式0~0xFFFF) TBCTL|=MC_2;
-
- TA1CTL = TASSEL_1 + MC_2 + TACLR + TAIE;
- }
-
复制代码
- <p>ulong start= 0;
- ulong end= 0;
- ulong diff= 0;
- uint overflow=0;
-
- #pragma vector=TIMER1_A1_VECTOR
- __interrupt void TIMER1_A1(void)
- {</p><p> switch(TA1IV) //向量查询
- {
- case TA1IV_TA1CCR2: //捕获中断
- {
- if(TA1CCTL2&CM0) //上升沿
- {
- TA1CCTL2=(TA1CCTL2&(~CM0))|CM1; //更变设置为下降沿触发
- start=TA1CCR2; //记录初始时间
- overflow=0; //溢出计数变量复位
- }
- else if (TA1CCTL2&CM1) //下降沿
- {
- TA1CCTL2=(TA1CCTL2&(~CM1))|CM0; //更变设置为上升沿触发
- end=TA1CCR2; //用start,end,overflow计算脉冲宽度
- TBCTL|=TBCLR;
- diff= ((overflow*65536) + end-start)/1000;
- // cap_flag= (end>=start);
- }
- }
- break;
-
- case TA1IV_TA1IFG: //定时器溢出中断
- overflow++;
- break; //溢出计数加1</p><p> default:
- break;
-
- }</p><p>
- }</p><p>
- void Init_Timer1_A3(void)
- {
- P7SEL|=BIT3;//选择p7.3第二功能
- P7DIR &=~BIT3;//选择p7.3方向为输入
-
- TA1CCTL2 = CCIS0; // 捕获源为P7.3 CCI2B
- TA1CCTL2|= CM1+SCS+CAP; //下降沿捕获,同步捕获,工作在捕获模式
- TA1CCTL2|= CCIE;
-
- TA1CTL = TASSEL_2+ID_3+TACLR+TAIE+MC_2;
- // 先捕获下降沿 CM1. 然后再中断里面的下降判断中设置捕获上升沿.
- }
-
- </p><p> </p>
复制代码感谢您的帮助! 把代码贴出来分享一下. 8M晶振.一周热门 更多>