msp430学习笔记之中断处理函数
来源:互联网 发布:tushare 数据不全 编辑:程序博客网 时间:2024/05/18 11:12
//本平台 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 = 0xffCCTL1 = 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值为改变的原因。
以上都是本人结合官方的源码和数据手册做出的分析,如有出入的地方,欢迎指正!
0 0
- msp430学习笔记之中断处理函数
- msp430学习笔记之时钟
- msp430学习笔记之uart
- 中断处理学习笔记
- msp430学习笔记之定时器A
- eCos学习笔记之中断处理代码分析
- PowerPC-MPC603e内核学习笔记之中断处理
- 学习笔记中断处理过程
- Linux中断处理学习笔记
- 中断+异常处理【学习笔记】
- MSP430学习笔记1
- MSP430学习笔记:UART
- MSP430学习笔记:UART
- MSP430学习笔记-USART
- MSP430学习笔记-时钟
- MSP430学习笔记-看门狗
- MSP430中断c函数模板大全
- stm32学习笔记之USB中断配置初始化函数
- C语言学习笔记:23_枚举类型
- 在main函数之前执行一些函数
- 机器学习中的数学-强大的矩阵奇异值分解(SVD)及其应用
- Python进阶二:模块和包
- #171 Excel Sheet Column Number
- msp430学习笔记之中断处理函数
- PHP 时间与日期
- GDAL 2.0版本RPC校正速度测试
- Windows下编译fast rcnn
- velocity初步认识
- 苹果APNs机制
- 由单页应用引出的胡言乱语
- 模式 - KVO
- 【数字图像处理之三】拉普拉斯边缘检测算法