2247|3

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430 捕获ACLK 出错 [复制链接]

我是新手 用msp430 timerA想实现一个捕获功能  用一根导线将CCI0A和ACLK连接起来 想测量ACLK的频率 结果进不去中断  以下是代码
求大神帮忙

#include  
uint ccr[100];
void main( )
{

  WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset
  BCSCTL2=0x88; //选择XT2振荡器作为SMCLK时钟源,MClK为XT2
  P1SEL=0x02; //使能p1.1为 CCI0A
  P2SEL=0x01;//使能p2.0为ACLK输出
  P2OUT=0x01;//使能输出
  CCTL0=CM_1+SCS+CAP+CCIE+CCIS_0; //上升沿捕获,选择捕获单元输入为CCI0A(P13),同步捕获,使能捕获中断
  while(1){
     TACTL=TACLR;//请计数器的值
     TACTL=TASSEL_2+MC_2;//SMCLK 连续増计数
     _EINT();
     LPM0;

}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  ccr [ i ]=CCR0;
  i++;
  
if(i==100){
    i=0;
    CCTL0=CM_1+SCS+CAP+CCIS_0;
    LPM0_EXIT;
   }
}


[ 本帖最后由 romanchann 于 2013-10-22 10:13 编辑 ]

最新回复

#include uint ccr[100]; void main( ) { WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset BCSCTL2=0x88; //选择XT2振荡器作为SMCLK时钟源,MClK为XT2 P1SEL=0x02; //使能p1.1为 CCI0A P2SEL=0x01;//使能p2.0为ACLK输出 P2OUT=0x01;//使能输出 CCTL0=CM_1+SCS+CAP+CCIE+CCIS_0; //上升沿捕获,选择捕获单元输入为CCI0A(P13),同步捕获,使能捕获中断 TACTL=TACLR;//请计数器的值 TACTL=TASSEL_2+MC_2;//SMCLK 连续増计数 _EINT(); LPM0; } #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { ccr [ i ]=CCR0; i++; TACTL=TACLR;//请计数器的值 TACTL=TASSEL_2+MC_2;//SMCLK 连续増计数 if(i==100){ i=0; CCTL0=CM_1+SCS+CAP+CCIS_0;//LZ的意思是关掉中断使能吗?实际上这段代码没有实现测试频率的过程 } } 复制代码上面的代码我帮你理了下结构,但是最后的功能我没有写完,LZ需要的是计数器的计数值。最好测多次后求一个平均  详情 回复 发表于 2013-10-22 22:20
 
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
求解答啊
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

板凳
 
有个道理LZ必须了解,中断触发后,MCU就自动的唤醒,执行完中断服务函数就会休眠。
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

4
 
  1. #include
  2. uint ccr[100];
  3. void main( )
  4. {
  5. WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset
  6. BCSCTL2=0x88; //选择XT2振荡器作为SMCLK时钟源,MClK为XT2
  7. P1SEL=0x02; //使能p1.1为 CCI0A
  8. P2SEL=0x01;//使能p2.0为ACLK输出
  9. P2OUT=0x01;//使能输出
  10. CCTL0=CM_1+SCS+CAP+CCIE+CCIS_0; //上升沿捕获,选择捕获单元输入为CCI0A(P13),同步捕获,使能捕获中断
  11. TACTL=TACLR;//请计数器的值
  12. TACTL=TASSEL_2+MC_2;//SMCLK 连续増计数
  13. _EINT();
  14. LPM0;
  15. }
  16. #pragma vector=TIMERA0_VECTOR
  17. __interrupt void Timer_A (void)
  18. {
  19. ccr [ i ]=CCR0;
  20. i++;
  21. TACTL=TACLR;//请计数器的值
  22. TACTL=TASSEL_2+MC_2;//SMCLK 连续増计数
  23. if(i==100){
  24. i=0;
  25. CCTL0=CM_1+SCS+CAP+CCIS_0;//LZ的意思是关掉中断使能吗?实际上这段代码没有实现测试频率的过程
  26. }
  27. }
复制代码
上面的代码我帮你理了下结构,但是最后的功能我没有写完,LZ需要的是计数器的计数值。最好测多次后求一个平均
 
个人签名《MCU工程师炼成记》作者之一
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表