历史上的今天
返回首页

历史上的今天

今天是:2025年02月05日(星期三)

正在发生

2020年02月05日 | 关于MSP430中断机制

2020-02-05 来源:eefocus

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

现在我就谈谈关于MSP430中断的一些特性,主要是在项目经历中感觉比较有用的问题,跟大家分享下。

第一,MSP430中断的优先级。
MSP430支持中断优先级,但是优先级的高低怎么获知呢?它的用手手册上有个很有意思的说法,我原文引用过来“The nearer a module is to the CPU/NMIRS, the higher the priority”,翻译过来就是说离CPU/NMIRS越近,优先级就越高。那我们怎么知道那个模块离CPU近啊,看datasheet给的框图?总觉得这不可能让一个做电子的人放心,比如框图在中距CPU一样进,那怎么区分呢?所以我们有另外一个更可靠的办法,IAR为每一款型号的430都提供了对应的头问题,只靠看中断向量地址就可以知道了。430的中断向量表从地址值0xFFC0开始至0XFFFF结束,一共有32个表项(每个中断向量对应2byte),0XFFCO对应的中断向量的优先级是最顶的,0XFFFE对应的中断向量的优先级是最高的,也就是从0xFFCO开始至0xFFFF,32个中断优先级由低至高。这样就很容易弄清楚各中断的优先级了。

第二,MSP430中断的响应过程。
首先,当然是中断发生对应的标志为置1。这个时候的过程我详述下,其实是翻译的用户手册但是还是了解下好。
1.CPU会执行完当期的指令。
2.指向下一条指令的PC被压栈。
3.状态寄存器SR压栈。
4.选择最好优先级的中断进行服务。
5.单源中断的中断标志位会被自动清零,这个地方需要小心下P1,P2这样的中断标志位不会自动清零,因为P1、P2的IO中断属于多源中断,就是说P1或者P2的8个IO对应到了一个中断向量上,单片机知道是P1或者P2发生了中断,无论是P1的哪一个IO发生的都会指向P1的中断向量,P2也是一样的,所以需要在代码中手动清零。6.状态寄存器SR被清零,将会终止任何低功耗状态,并且全局中断使能被关闭(GIE)。这个地方与51很是有些不同,430响应了中断后会关闭全局中断使能,不会响应任何其他的中断包括优先级高的,就是说默认状态下是没有中断嵌套的,若用到中断嵌套的话需要使用_EINT()打开全局中断。
7.中断向量被装载到PC,开始执行中断服务函数。


以上是整个中断的接收过程,比较重要的地方我用彩色字体标出了。

中断返回就相对简单些,中断服务函数会由RETI这条指令返回,SR被弹出,单片机恢复到中断前的状态,PC也被弹出,继续执行指令。


第三,开中断和中断服务函数。
这个是让我在项目中纠结过的地方,也请各位小心。
MSP430一旦开了外设的中断,比如SPI的接收中断。
在SPI的接收中断被使能,单片机一旦发现SPI接收标志置位,就会装载中断向量,但是我们如果没有用到SPI的接收中断,会怎样呢?由于没用到,所有就没有写SPI接收中断的服务函数,此时中断向量里指向中断服务函数地址值是啥?是全0。CPU从0-01FFh取指令,只会发生一件事。PUC,上电清零。接着PC会装载0xFFFE中断向量的内容,也就是复位向量,程序会跳转到给IAR我们做的启动代码。程序再往下执行会执行到我们编写的代码的main()的第一句。这样悲剧就诞生了,荡机了!!!!


所以我在这希望初学430的朋友对于中断,未使用的就不要使能。使能的就一定要写中断服务函数,哪怕是空函数!


1.中断嵌套,优先级 

430总中断的控制位是状态寄存器内的GIE位(该位在SR寄存器内),该位在复位状态下,所有的可屏蔽中断都不会发生响应。可屏蔽中断又分为单中断源和多中断源的。单中断源的一般响应了中断服务程序中断标志位就自动清零,而多中断源的则要求查询某个寄存器后中断标志位才会清零。由于大多数人接触的第一款单片机通常是51,51单片机CPU在响应低优先级的中断程序过程中若有更高优先级的中断发生,单片机就会去执行高优先级,这个过程已经产生了中断嵌套。而430单片机则不同,如果在响应低优先级中断服务程序的时候,即使来了更高优先级的中断服务请求,430也会置之不理,直至低优先级中断服务程序执行完毕,才会去响应高优先级中断。这是因为430在响应中断程序的时候,总中断GIE是复位状态的,如果要产生类似51的中断嵌套,只能在中断函数内再次置位GIE位。 

2.定时器TA 
TimerA有2个中断向量。TIMERA0,TIMERA1 
TIMERA0只针对CCR0的计数溢出 
TIMERA1再查询TAIV后可知道是CCR1,还是CCR2,亦或TAIFG引起的,至于TAIFG是什么情况下置位的,则要看TA工作的模式 
具体看用户手册。还有一点TA本身有PWM输出功能,无须借用中断功能。在这个问题上经常出现应用弯路的是如何结合TA和AD实行定时采样的问题,很多人都是在TA中断里打开AD这样来做。这是不适宜的,因为430 的ADC10,ADC12(SD16不熟悉,没发言权)模块均有脉冲采样模式和扩展采样模式。只要选择AD是由TA触发采样,然后把TA设置成PWM输出模式,当然输出PWM波的都是特殊功能脚,但是在这里它是不需要输出的,所以引脚设置不必理会。值得关心的就是PWM的频率,也就是你AD的采样率。 

3.看门狗复位 
看门狗有2种工作模式:定时器 ,看门狗 
定时器工作模式下WDTIFG在响应中断服务程序有标志位自动复位,而在看门狗模式下,该标志位只能软件清零。但是怎么判断复位是由于WDT工作在看门狗模式下的定时溢出引起的,还是看门狗写密钥错误引起的呢?……………………………… 
答案是没有方法,至少我没见过有什么方法,也没见过周边的人有什么方法。若有人知道方法谢谢分享。 

4.经常有人会问这个语句的MOV.B  #LPM0,0(SP)的作用。假如你在进入中断函数之前,430是在LPM0下待机,若要求执行完中断函数之后进入LPM3待机,在中断函数里写MOV.B  #LPM3,SR是无效的。因为在进入中断时430会把PC,SR压栈,( SR内保存着低功耗模式的设置)即使你写了MOV.B  #LPM3,SR,在退出中断出栈时SR会被重新设置成低功耗0,要达到这样的目的,只能更改堆栈内SR的设置:MOV.B  #LPM0,0(SP)。 

5中断向量: 
430的中断向量是FFE0H—FFFFH,一共32个字节也就是FLASH的最后一段,430的FLASH有大有小,但是最后地址肯定是FFFFH(大FLASH超过64K的除外)所以它们的起始地址是不一样的,而一般IAR默认编译都是把程序放在FLASH开始的位置(不包括信息段)。 


有个值得弄清楚的问题是:什么是中断向量?中断向量实际就是保存中断函数入口地址的存储单元空间。就像FFFEH+FFFFH这2个字节是复位中断向量,那么它存储的就是主函数在FLASH内的起始地址,假如主函数保存在以0x1100为起始地址的FLASH块内 ,那么你会发现FFFFH 内保存的是0x11, FFFE内保存的是0x00.其他什么TimerA,ADC12,所有的都一样。只是你每次写的程序长短不一,中断函数放的位置不一样。IAR编译器都会给你定好,然后在你用JTAG烧写程序的时候,把这个地址,烧写到相应的中断向量。因为中断函数所处地址可以由用户自定义,也可以让IAR自动编译,所以这个地址除了源代码开发人员知道,其他人是不知道的,BSL就是应用这32个字节的中断向量内的内容的特殊性设置的密码。但是有几个东西在430是不变的,就是触发中断的条件满足后,它到哪个地方去寻址中断服务函数的入口地址,是TI 在做430时就固化好,定死的。比方说上电复位的时候,它知道去FFFE,FFFF单元找地址,而不去FFE0,FFE2找地址,这个映射关系是430固化不变的。可有的时候你就是需要改变“中断向量”,这怎么办?430FLASH程序自升级里有时就会碰到这个问题,方法是在430原来默认的中断向量表内做一个跳转操作,同样以上电复位为例: 
ORG  0x2345 
PowerReset: mov.w  &0xFCFE,PC 
………………………… 
………………………… 
ORG  0xFFFE 
DW   PowerReset 
这样的话0xFCFE就相当是0xFFFE的映射了。这个在430程序自升级的TI应用报告里就有。

推荐阅读

史海拾趣

Hamamatsu公司的发展小趣事

Habia Cable公司电子行业发展的五个故事

故事一:聚四氟乙烯的先驱

Habia Cable的故事始于1941年,由Carl Herbert Jacobsson在瑞典斯德哥尔摩创立。起初,公司是一家聚合物制造商,专注于胶木部件的生产。然而,Jacobsson的远见卓识使Habia成为欧洲首批使用聚四氟乙烯(PTFE)的公司之一,并在1946年在美国推出了第一款商业聚四氟乙烯产品。这一创新不仅为Habia奠定了技术基础,也使其迅速在电线电缆领域崭露头角。随着时间的推移,Habia成为最早制造聚四氟乙烯电线和电缆的公司之一,这一技术突破为公司后续的发展奠定了坚实的基础。

故事二:国际扩张的征程

自1957年Habia制造其第一条电缆以来,公司便踏上了国际扩张的征途。1969年,Habia在荷兰布雷达开设了其第一家国际销售办公室,这标志着公司正式进入全球市场。随后,Habia在70年代至80年代经历了迅速的国际扩张,工厂和销售办事处相继在法国、德国、英国、西班牙、比利时和美国等地成立或收购。这一时期的快速扩展不仅增强了Habia在全球范围内的市场竞争力,也为其后续的发展积累了宝贵的经验和资源。

故事三:技术创新的引领

Habia Cable一直以来都是技术创新的引领者。在2000年,公司收购了德国Norderstedt的高温电线和电缆制造商Isotec Kabel GmbH,这一举措使德国成为Habia最大的市场,并为其在欧洲的进一步发展提供了强有力的支持。此外,Habia Cable还不断投资于新技术和新设备的研发,以满足市场对高性能电缆和线束的需求。例如,在2016年,Habia Cable投资独特设备制造含氟聚合物电线和电缆的长截面和大截面产品,以满足离岸部门等苛刻应用的需求。

故事四:亚洲市场的布局

随着全球化进程的加速,Habia Cable也开始将目光投向亚洲市场。2000年,Habia Cable在中国常州设立工厂,生产同轴电缆,这标志着公司正式进入亚洲市场。此后,Habia在亚洲的扩张步伐不断加快,不仅在中国建立了多个生产基地,还在韩国、香港和日本等地设立了销售办事处。这些举措不仅提升了Habia在亚洲市场的知名度,也为其在全球范围内的业务增长提供了新的动力。

故事五:定制解决方案的提供

Habia Cable一直致力于为客户提供定制化的解决方案。公司拥有一支知识渊博的销售团队和设计工程师团队,他们能够与客户紧密合作,根据客户的独特需求开发满足其要求的电缆和线束产品。Habia Cable的制造灵活性、低订单数量要求和短交货周期等特点使其在市场上具有很强的竞争力。无论是电信、核电、国防还是海洋和工业领域,Habia Cable都能为客户提供高质量、高性能的电缆和线束产品,满足其苛刻的应用需求。

FUJI公司的发展小趣事

在电子行业中,虽然直接名为“FUJI”的公司可能不是最为人所熟知的(注意:富士通实际上使用的是“Fujitsu”而非“FUJI”,但考虑到FUJI可能与富士电机等相关联,以下将基于这些相关公司进行阐述),但富士电机及其关联企业,如富士通和富士施乐,在电子行业的发展历程中都有着举足轻重的地位。以下是五个与这些公司相关的故事:

1. 富士电机的诞生与多元化发展

故事概述:富士电机控股公司(FUJI ELECTRIC HOLDINGS CO., LTD.)成立于1923年,是古河电器工业与德国西门子资本技术合作的产物。起初,公司以电气机器制造为主,后逐渐扩展到电机系统、电子设备和零售终端设备等多个领域。富士电机不仅在电机领域保持领先地位,还积极拓展至自动贩卖机等领域,并在该领域占据日本国内第一的市场份额。其发展历程展现了日本重电机制造商的多元化战略和全球视野。

2. 富士通的通讯与计算机技术崛起

故事概述:富士通(Fujitsu)的前身可以追溯到1875年成立的Furukawa Denko公司,后与西门子合作成立富士电机制造株式会社。富士通在通讯和计算机技术方面的崛起尤为显著。1935年,富士通信机制造公司成立,标志着富士通在通讯领域的正式起步。随后,公司不断推出创新产品,如FACOM系列计算机、第一台出口海外的计算机等,奠定了其在全球计算机市场的地位。富士通对通讯和计算机技术的持续投入和创新,使其成为电子行业的重要力量。

3. 富士施乐的打印机与复印技术革新

故事概述:富士施乐(Fuji Xerox)成立于1962年,是富士胶片和美国施乐合资成立的企业。自成立以来,富士施乐在打印机和复印技术方面取得了显著成就。公司不仅推出了多款具有创新性的打印和复印产品,还积极应对市场变化,不断调整业务结构。例如,在数字化浪潮中,富士施乐推出了多款支持网络打印和多功能一体的产品,满足了市场的新需求。其技术革新和市场策略调整,使富士施乐在打印和复印技术领域保持领先地位。

4. 富士通与FANUC的工业机器人合作

故事概述:富士通与FANUC的合作是电子行业与工业机器人技术结合的一个典型案例。FANUC作为富士通的子公司之一,自上世纪70年代成立以来,便致力于工业机器人的研发和生产。富士通与FANUC的紧密合作,不仅推动了工业机器人技术的快速发展,还促进了电子行业生产线的自动化和智能化升级。两家公司的合作成果广泛应用于汽车制造、电子组装等多个领域,为工业生产带来了革命性的变化。

5. 富士电机在绿色能源领域的探索

故事概述:随着全球对绿色能源和可持续发展的重视,富士电机也开始在绿色能源领域进行积极探索。公司不仅致力于高效能电机的研发和生产,还积极推动可再生能源技术的应用。例如,富士电机在太阳能和风能领域推出了多款创新产品和技术解决方案,为可再生能源的普及和应用做出了积极贡献。其绿色能源战略不仅符合全球发展趋势,也为公司未来的可持续发展奠定了坚实基础。

以上五个故事分别展现了富士电机及其关联企业在电子行业不同领域的发展历程和成就。这些公司凭借持续的技术创新和市场拓展,成为了电子行业的重要参与者和推动者。

Emerson公司的发展小趣事

1954年至1973年,Emerson在总裁帕森斯的领导下,开始实施多元化战略。公司通过一系列并购活动,成功收购了包括威诺、美国电气电机、里奇工具等在内的36家公司,进一步拓宽了业务范围。同时,Emerson还注重研发和创新,通过不断推出新产品和技术,巩固了其在电气行业的领先地位。在此期间,公司的规模迅速扩大,从最初的2家工厂、4000名员工和5600万美元产值发展到82家工厂、31000名员工和8亿美元产值。

敦泰(FOCALTECH)公司的发展小趣事
压缩机启动电路故障通常涉及启动器和压缩机线圈。如果启动器损坏,可以购买同型号的新启动器进行更换。如果压缩机线圈断路,则可能需要更换整个压缩机。这些维修工作较为复杂,建议由专业维修人员进行操作。
COTO TECHNOLOGY公司的发展小趣事

COTO TECHNOLOGY的故事始于1917年,当时它在美国罗德岛州的普罗维登斯以Coto Coil Incorporated的名字诞生,专注于线圈绕组的设计与制造。这个初创公司凭借对技术的深入理解和对质量的执着追求,逐渐在电子行业中崭露头角。它的线圈绕组产品以高精度、高稳定性而受到市场的青睐,为公司的初步发展奠定了坚实的基础。

CONTEC公司的发展小趣事

2008年,对于CONTEC公司来说是具有里程碑意义的一年。这一年,公司建成了康泰产业园(一期),并进一步加强了研发和生产能力。同时,公司技术中心被省发改委等部门确定为省认定企业技术中心,这标志着公司在技术研发和创新方面得到了官方认可和支持。随着产业园的投入使用,公司的生产规模和效率得到了显著提升。

问答坊 | AI 解惑

关于深圳DSP培训

本人具备一定的单片机开发经验现想学习使用C2000系列DSP,应用于UPS设计,请问深圳现在有相应的DSP培训班吗?…

查看全部问答>

关于非时钟引脚总是在pin planner里出现的问题

现象:       计数分频的方式产生了一个时钟ld1_clk,然后对原时钟clk_24和分频时钟ld1_clk都进行了时钟约束,但是并没有将ld1_clk作为output,奇怪的是,编译完后pin planner里就出现了ld1_clk,手动删掉了之后,再编译还是会 ...…

查看全部问答>

基于单片机的电动自行车调速系统

如题,这是我毕设的题目哪位大侠给点资料 或者建议啊…

查看全部问答>

请教GPIO设置问题

我现在用的是IXP420芯片,想对GPIO2进行读写操作,来控制LED灯。我向相应的寄存器设置了输出为1,并输出使能,但无法对LED灯进行操作。不知道遗漏了什么,GPIO模式要选择么,我在数据手册上没有找到,如何设置?…

查看全部问答>

USB驱动问题

我要做一个东西,主要功能是PC应用程序和一个USB设备通讯,该USB设备的cpu自带了USB接口,通讯时候需要写驱动么?是不是通用的系统自带的USB驱动就能搞定了? 新手,请高手们不吝赐教…

查看全部问答>

ARM高手请进(求推荐ARM9开发板)

小弟想把LINUX2.6移植到ARM9上去,通过这个学习 驱动编程以及系统移植 现在基础:能看懂驱动,系统的大概 还请路过的大侠能推荐个性价比比较高的三星的2410的板子给ME, 硬件懂的不多,所以以及焊也没那精力 现在考虑的 U龙的 质量有个保证,但是据 ...…

查看全部问答>

MTK6225 手机开发板(含源代码)

MTK6225 手机开发板(含源代码) 有诚意者请联系 Qq:296662705 硬件特性: 1、 CPU:mtk6225 2、 TFLASH 卡接口 3、 176X220 2.6寸TFT LCD,最高支持320*240*16的TFT LCD 4、 4线触摸屏接口 5、 双声道音频输出 6、 一个Camera 130万像素 ...…

查看全部问答>

頂一下我的編程網吧

頂一下我的編程網吧 www.kingofcoders.com…

查看全部问答>

三端变色发光二极管的封装问题.!

型号有2EF302、2EF312、2EF322.. 谁能帮我找下它的尺寸封装. 是不是和三极管一个大小?按三极管来封装就OK了吗?…

查看全部问答>