请教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. }
复制代码


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
dirtwillfly
1楼-- · 2019-07-24 20:48
你是要捕获方波的周期还是占空比?
baimiaocun2015
2楼-- · 2019-07-25 02:34
要一直处于捕获状态的。。这相当于一个中断的。。
vcxz_1982
3楼-- · 2019-07-25 02:58
dirtwillfly 发表于 2015-11-19 13:56
你是要捕获方波的周期还是占空比?

占空比.

这个传感器模块:

1个周期100mS, 代表0~100级别.
高电平代表1, 比如如果维持了10毫秒的高电平, 那么就代表10级别.
vcxz_1982
4楼-- · 2019-07-25 07:14
baimiaocun2015 发表于 2015-11-19 13:56
要一直处于捕获状态的。。这相当于一个中断的。。

问题是我的程序还要读取其他传感器, 这个传感器模块只是其中一种.

这个传感器是在不停的输出方波.
如果一直处于捕获状态, 会不会影响其他代码运行?
精彩人生sun
5楼-- · 2019-07-25 12:45
 精彩回答 2  元偷偷看……
vcxz_1982
6楼-- · 2019-07-25 16:13
精彩人生sun 发表于 2015-11-19 14:56
没见你清除中断标志。应该中断中清标志了吧

我现在主要问题是, 总是进入中断, 但是没有进入case 2

一周热门 更多>