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;
- }
-
复制代码
占空比.
这个传感器模块:
1个周期100mS, 代表0~100级别.
高电平代表1, 比如如果维持了10毫秒的高电平, 那么就代表10级别.
问题是我的程序还要读取其他传感器, 这个传感器模块只是其中一种.
这个传感器是在不停的输出方波.
如果一直处于捕获状态, 会不会影响其他代码运行?
我现在主要问题是, 总是进入中断, 但是没有进入case 2
一周热门 更多>