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的中断优先级按...
  • Uncle_GUO
  • Uncle_GUO
  • 2015年01月10日 02:14
  • 3277

Msp430F149按键中断程序

  • 2014年12月27日 10:42
  • 99KB
  • 下载

单片机MSP430 - Timer_A 定时器中断程序

一、利用定时器定时功能,实现定时器单个溢出中断,实现 P3.0 方波输出 #include "cc430x613x.h" void main() { WDTCTL = WDTPW + WDT...
  • u012313335
  • u012313335
  • 2016年11月21日 11:13
  • 3085

关于MSP430中断机制

中断很大程度上体现了一款单片机的性能,从这一点将MSP430在中断方面做得很不错,主要是提供了非常丰富的中断源,基本的有IO中断,定时器中断和一些接口中断(SPI,UART,I2C)等等。     ...
  • kent19900125
  • kent19900125
  • 2013年12月25日 14:41
  • 1303

初学MSP430——按键中断控制小灯翻转

**/* * Copyright (c)... * All rights reserved. * * 文件名称:main.c * 文件标识:NO * 硬件描述:Launchpad G2553开发板上P...
  • sunduoze
  • sunduoze
  • 2015年02月06日 10:53
  • 2650

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

//本平台 msp430f149 #include void select_xt2(void){ unsigned char i; /*------选择系统主时钟为8MHz------...
  • rain1070
  • rain1070
  • 2015年07月09日 21:43
  • 2492

单片机MSP430 - Timer_A 定时器中断程序

一、利用定时器定时功能,实现定时器单个溢出中断,实现 P3.0 方波输出 #include "cc430x613x.h" void main() { WDTCTL = WDTPW + WDT...
  • u012313335
  • u012313335
  • 2016年11月21日 11:13
  • 3085

msp430单片机实现常按键和短按键加去抖功能

pragma vector = PORT1_VECTOR__interrupt void Port1ADISR( void ) { P1IFG &= 0x0f; switch(P1I...
  • moshuiilove520
  • moshuiilove520
  • 2016年05月20日 11:07
  • 1560

MSP430F5438学习笔记 TA1溢出中断加比较匹配中断

// 时钟默认情况 // FLL时钟 FLL选择 XT1 // 辅助时钟 ACLK选择 XT1 32768Hz // 主系统时钟 MCLK选择 DCOCLKDI...
  • xukai871105
  • xukai871105
  • 2013年06月07日 10:25
  • 3604

MSP430(f149)学习笔记——红外遥控发射

最近由于项目需求,研究了一下MSP430,总体感觉MSP430还是非常不错的单片机,不亏是TI的产品。项目中用MSP430实现了红外遥控功能,下面我们先来分析一下红外的发送原理。 红外发送原理 红外发...
  • girlkoo
  • girlkoo
  • 2013年05月27日 10:46
  • 9162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:msp430学习笔记之中断处理函数
举报原因:
原因补充:

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