历史上的今天
返回首页

历史上的今天

今天是:2025年07月11日(星期五)

正在发生

2018年07月11日 | msp430学习笔记之中断处理函数

2018-07-11 来源:eefocus


//本平台 msp430f149 

#include

 

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值为改变的原因。


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


推荐阅读

史海拾趣

Grayhill公司的发展小趣事
使用万用表等工具测量电路的输出电压和电流,确保它们符合设计要求。
风华邦科(FH-BK)公司的发展小趣事

在电子科技领域,FlyWin集团不断投入研发资源,致力于新技术的开发与应用。公司成立了专门的研发团队,专注于人工智能、物联网等前沿技术的探索。通过不断的技术创新,FlyWin成功推出了一系列具有自主知识产权的电子产品,如智能传感器、物联网解决方案等。这些产品不仅提升了公司的市场竞争力,也为公司的长远发展提供了强大的技术支撑。

Festo公司的发展小趣事

近年来,Festo在中国的发展步伐进一步加快。2021年4月,Festo济南全球生产中心正式全面投入运营。这个生产中心整合了本地的生产、研发、销售、物流等全价值链,形成了“研产销一体化”的格局。通过引进先进的生产设备和工艺,以及优化生产流程和管理体系,Festo济南全球生产中心在保障产品质量的同时,也大大提高了生产效率和响应速度。这一生产中心的建立不仅为Festo在中国市场的进一步发展提供了强有力的支持,也进一步巩固了Festo在全球气动自动化领域的领导地位。

以上五个故事从不同角度展示了Festo公司在电子行业中的发展历程和成就。作为一家以创新为驱动、以可持续发展为目标的公司,Festo将继续引领电子行业的发展方向,为全球客户提供更加优质的产品和服务。

Cyrix Corp公司的发展小趣事

Cyrix Corp公司成立于1988年,由Jerry Rogers和Tom Brightman创立。这两位创始人都是德州仪器的杰出思想家,他们雄心勃勃地希望挑战当时的芯片巨头英特尔。Cyrix的起步产品是高速x87数学协处理器,其性能比英特尔同类产品高出约50%,同时价格更为亲民。这一策略迅速赢得了市场的认可,Cyrix开始在芯片市场上崭露头角。

Fabrimex AG公司的发展小趣事

近年来,Fabrimex AG在品质管理和环境保护方面取得了显著的成绩。2016年,包括Fabrimex在内的整个WERAP集团均通过了ISO 9001:2015和ISO 14001:2015认证。这些认证不仅证明了公司在品质管理和环境保护方面的实力,还为公司赢得了更多客户的信任和认可。此外,公司还积极参与行业标准的制定和修订工作,推动行业的技术进步和发展。

这些故事只是Fabrimex AG在电子行业发展历程中的一部分,但它们足以展示公司在技术创新、市场拓展和品质提升方面的不懈努力。通过这些努力,Fabrimex AG在电子行业中逐渐崭露头角,成为了一家备受瞩目的企业。

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

问答坊 | AI 解惑

DS18B20头文件!绝对好使!M16 8M 的!

来源:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=657257&bbs_page_no=1&bbs_id=9999 终于调通了!哈哈: 我也拿出来跟大家分享一下! 里面的内容什么都不用该,就该一下前面宏定义就可以了! 只需调用gettemp();就可以了!出口参数 ...…

查看全部问答>

求救!!

我现在正在做这个的数控电源的论文,不知道这个电路和程序是否问题,哪位大侠能帮我看看,有问题话能不能帮我改改 ,谢谢!!!whf-205@163.com [ 本帖最后由 yeloulo 于 2010-1-15 13:27 编辑 ]…

查看全部问答>

求Wince下自制的软键盘源码,evc和C#的都行。

求Wince下自制的软键盘源码,evc和C#的都行。系统自带的控制有些不自由。…

查看全部问答>

Wince界面怎么响应触摸笔划动的操作?怎么做出像IPHONE/M8那样的划屏动态界面效果!

Wince界面怎么响应触摸笔划动的操作?怎么做出像IPHONE/M8那样的划屏动态界面效果!…

查看全部问答>

新手求救

我毕业设计弄MC68HC908GP32的设计  现在我串行输入电路(写人单片机的电路) 弄不出来 那里有啊 请高手指点哈!!!! 谢谢…

查看全部问答>

VXWORKS移植问题,请高手帮忙

我现在手里有一块s3c2410(arm920t,flash:16m,sdrom:64m)的开发板,现在用PPCBOOT2.0.0引导LINUX启动一切正常。我现在想把用这块开发板,运行vxworks,应该如何做呢,请高手帮忙,谢谢!!!!急…

查看全部问答>

请教关于stm32F103VC的fsmc问题

在用stm32f103vc 100pin做项目的时候,遇到一个问题。 我们想用103vc的fmsc挂5个外设。这5个外设的地址有4个只需要2根地址线,另外一个需要10根地址线。它们的数据线都是8位的。 因为用的103vc 100pin的,所以它的A0~A15和D0~D15是复用的, ...…

查看全部问答>

是不是用完TIM2.再用串口DMA接受会有bug?

RT.不知道为什么.如果不用TIM2计时.直接用DMA串口接收.是没问题的.但是用TIM2延时一阵子.就不能收到了... 大家帮帮忙,有必要我就上程序…

查看全部问答>

CPU的单核双核是什么意思?

CPU的单核双核是什么意思?…

查看全部问答>