MSP430的I/O中断和看门狗定时器能同时使用吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MSP430的I/O中断和看门狗定时器能同时使用吗?相关的知识,希望对你有一定的参考价值。

我用定时器A和I/O配合能正常工作,用看门狗和I/O之后就不能正常工作了。

可以:
MSP430中断嵌套机制[推荐] DC,2006-11-15 155507
作者:0510302516 由本论坛会员xzj提供
(1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT。
(2)当进入中断程序时,只要不在中断中再次开中断,刚总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行。
(3)若在中断A中开了总中断,刚可以响应后来的中断B(不管B的优先级比A高还是低),B执行完现继续执行。注意:进入中断B生总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后中跳出中断程序进入A程序时,总中断会自动打开。
(4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来才起做用!中断服务不执行抢先原则。
(5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TATB定时器的比较捕获中断,只要访问TAIVTBIV,标志位倍被自动清除;对于多源中断要手动清标志位,比如P1P2口中断,要手工清除相应的标志,如果在这种中断用“EINT();”开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断必须先清标志现打开中断开关。
参考技术A 你可以在IO中断子程序开始时让看门狗停止计数,子程序结尾时再开始对看门狗计数 参考技术B 可以,不过你要在他们的中断服务程序中打开总中断才行 参考技术C 中断嵌套、。。。。容易出问题 参考技术D 可以 小心看门狗复位

[看门狗]内部看门狗和外部看门狗

1. 芯片内部看门狗

内部看门狗通常为芯片内部某个特殊定时器,用户可以通过手动初始化、设置timeout、使能、失能该看门狗,然后在线程中定时去喂狗,从而达到检测应用程序跑飞、跑死的情况。

在Linux系统中,可以在uboot中打开看么狗,把喂狗时间设置长度超过kernel启动时间,从而当kernel正常启动后,喂狗任务由uboot交给了应用程序,这样达到了监控kernel启动bootsup和应用程序的双重功效。

2. 芯片外部看门狗

外部看门狗具有独立性,可以更加安全的确保芯片的正常运行。

外部看门狗如何工作?

外部看门狗非常简单,没有所谓的初始化、失能等等,就是电源、地、WDI喂狗引脚、RESET引脚,当WDI每次检测到边沿跳变,则重新置位看门狗计数,如果在超出timeout,则拉低RESET引脚一段时间,周而复始。

那外部看门狗的使用也带来一些问题:

  • 在超长启动时间的系统中,如何确保外部看门狗的喂狗
  • 在ICT、FCT、程序烧录阶段中,如何确保这些动作不被外部看门狗打断,循环复位

解决思路

在电路设计中,针对第二个问题,可以设计电路的JTAG中Reset的优先级最高,当Jtag插上,程序不运行,Reset也就失效了。

增加跳线,在生产阶段,将跳线跳开,完毕后,将跳线跳上,但是此法增加Factory阶段的复杂度。

ISP:In-system programing 在线系统编程; IAP: In-application programing 在应用编程; ICP: In-circuit programing 在电路编程。ISP和IAP都是在板进行编程,也就是不用拆除芯片。ISP的意思就是应用程序本身有和PC上位机之间的接口,当上位机有更新程序的需求时,应用程序会进入更新程序的逻辑,知道更新结束。而IAP则是BootLoader+Application的结构,在Boot阶段,如果接收到上位机的更新需求,则进行更新,更新结束跳到application。

以上是关于MSP430的I/O中断和看门狗定时器能同时使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

MSP430-GRACE 实战:定时器中断

求解msp430 WDTCTL = WDTPW + WDTHOLD是怎么实现关看门狗的

MSP430-GRACE 实战:按键中断

ESP32看门狗

MSP430 - 如何将定时器A1中断用于不同目的?

关于MSP430