msp430学习笔记之中断处理函数

原创 2015年07月09日 21:43:31

//本平台 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//TACCTR2CCIFG的入口地址。TACCRO单独使用TIMERA0_VECTOR。从官方给出的代码,使用TACCR1事中断函数里面也有switch语句,结合上面这个图,分析中断处理代码,执行

switch(TAIV)

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

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

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




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

msp430的中断优先级和中断嵌套(及容易理解错误的说明)

msp430的中断优先级和中断嵌套(及容易理解错误的说明) 标签: 杂谈 分类: MCU单片机 msp430的中断优先级和中断嵌套      MSP430的中断优先级按...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...

CT图像重建技术

由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术 1.引言 计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串  find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|xargs g...

Radon变换入门matlab CT原理

http://hi.baidu.com/hi9394/blog/item/0d492b8bfd714700c8fc7aa9.html 简介 图像投影,就是说将图像在某一方向上做线性积分(或理解为累...

Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法

上午新建excel工作表时,发现新建完之后居然打不开 提示: 尼玛这坑爹的,难道我的Excel坏了?? 排查问题之后发现 只有新建“Microsoft Excel 工作表”时...

js弹出框、对话框、提示框、弹窗总结

js弹出框、对话框、提示框、弹窗总结 一、JS的三种最常见的对话框 [javascript] view plaincopy //=...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:msp430学习笔记之中断处理函数
举报原因:
原因补充:

(最多只允许输入30个字)