1333|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

msp430学习笔记之中断处理函数 [复制链接]

//本平台 msp430f149 
#include<msp430.h>
 
void select_xt2(void){
    
    unsigned char i;
    
    /*------选择系统主时钟为8MHz-------*/
    BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡噿    
    do{
        IFG1 &= ~OFIFG;                 //清除晶振失败标志
        for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振
    }while ((IFG1 & OFIFG));             //晶振失效标志仍然存在_    
    BCSCTL2 |= SELM_2 + SELS;           //MCLK和SMCLK选择高频晶振    
 
}
 
void main(){
    WDTCTL = WDTPW + WDTHOLD;
    select_xt2();
    
    P2DIR = 0x80;
    P2OUT = 0xff
    
    CCTL1 = CCIE;                              // CCR1 中断使能
    CCR1 = 10000;
    TACTL = TASSEL_2 + MC_2 + ID_3;            // SMCLK = 1MHz, 连续计数模式
    _EINT();                                //打开全局中断
    
    while(1){
        
        if(count == 50){
            count = 0;
            P2OUT ^= BIT7;                   //led灯每0.5s变化一次
        }
        
    }
 
}
 
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
    
    CCR1 += 10000;                    // 
    count ++;
 
        
}

昨天写了一段这样的代码,本想用定时器a 每0.5s控制led灯状态,发现程序运行不符合预期效果,仔细检验发现根本就没有进中断,count 值不变。先贴上可用的代码,再仔细分析
修改后的中断处理函数:

#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
    switch(TAIV){
        case 2:
            CCR1 += 10000;                    // 
            count ++;
    }
    
    
}
这两个中断处理函数区别在修改后的多用了switch语句,里面还有TAIV,也就是中断向量值


仔细阅读数据手册,发现TAIFG的中断入口地址是TIMERA1_VECTOR,同时也是TACCR1和//TACCTR2的CCIFG的入口地址。TACCRO单独使用TIMERA0_VECTOR。从官方给出的代码,使用TACCR1事中断函数里面也有switch语句,结合上面这个图,分析中断处理代码,执行

switch(TAIV)
不难发现,TAIV是与CCIFG所在的向量值匹配,也就是查询中断向量,提供一个入口地址,

执行后case语句的代码,现在可以理解未修改之前中断处理函数count值为改变的原因。

以上都是本人结合官方的源码和数据手册做出的分析,如有出入的地方,欢迎指正!

 
点赞 关注

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表