This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2311:禁用/启用单个计时器中断(TB1CCTL0.CCIE)时出现奇怪/未记录的行为

Guru**** 2386610 points
Other Parts Discussed in Thread: MSP430FR2311, MSP430FR5994
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1069795/msp430fr2311-strange-undocumented-behavior-when-disabling-enabling-individual-timer-interrupts-tb1cctl0-ccie

部件号:MSP430FR2311
《Thread: Test(线程:测试)中讨论的其它部件,MSP430FR5994

大家好,特别是 ·加奥, 和切斯特·吉龙,

我还在禁用/启用 CCIE,似乎遇到了相同的问题,即部件(我的电脑为 MSP430FR2311)在很短的时间后跳到无效 PC (目前为0x020010,但随我更改代码而变化)。  我还怀疑它与计时器运行时禁用/启用 CCIE 有关,这是我在找到您的线程之前的结论(https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/895839/msp430fr5994-strange-undocumented-behavior-when-disabling-enabling-individual-timer-interrupts)。  您似乎已尽可能彻底地调试了该问题(比我所能做的更多!) 但问题没有结论/解决方案,特别是 TI 的官方回应。  我在原 MSP430FR5994上没有看到此问题的勘误表,因此是否有推荐的解决方法?  我还观察到,在 CCIE =0之后添加 NOP 似乎可以解决该问题, 但是,由于在一个或另一个位置添加或删除一行 C 代码似乎也解决了这个问题(一段时间,直到意外弹出),我希望有一个可以保证工作的东西。  我还创建了一个简单的测试项目来演示此问题(在 MSP430FR2311 Launchpad 上运行),但我认为这在目前并不重要,因为另一个线程有非常好的文档,包括具有更好的故障排除功能的示例代码。

如果有任何帮助,我们将不胜感激!  谢谢!

TJ

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,TJ,

    我还在等正式发言一段时间

    但是,我已经用“NOP”运行代码很长时间了,没有任何问题。

    谢谢,

    Filip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速回复!  如果我们能在2年后获得 TI 的官方响应来结束这一线程,那将是非常好的,但如果您使用 NOP 解决方案已经有2年了,那么这似乎是相当强大的。

    只是确认一下 ,您是否做了如下一些事情?  在禁用捕获/比较中断(CCIE)后,是否只需要 NOP?  或者您是否也在重新启用后添加了 NOP?  是否在禁用任何其他外围中断后添加 NOP,就像在这样?

    //disable the TB1 CCR0 capture/compare interrupt
    TB1CCTL0 &= ~CCIE;
    
    //NOP to prevent micro from corrupting PC
    _NOP();
    
    //perform atomic operation on variable(s) modified by TB1 CCR0 ISR
    
    //re-enable the TB1 CCR0 capture/compare interrupt
    TB1CCTL0 |= CCIE;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在内存中,我认为如果您禁用外围设备 int,您始终应该输入 NOP 指令。
    启用时,没有必要。
    我正在使用这些宏:

    #define __EVALUATE_STR__(X) #X
    #define __EVALUATE_STR2__(X) __EVALUATE_STR__(X)
    //#define CLR_BIT_ATOMIC_B(reg, bitn) asm("	BIC.B #" __EVALUATE_STR2__(bitn) ", &" #reg "\r\n	.global " #reg)
    //#define CLR_BIT_ATOMIC_W(reg, bitn) asm("	BIC.W #" __EVALUATE_STR2__(bitn) ", &" #reg "\r\n	.global " #reg)
    
    // Use these to disable peripheral interrupts, since NOP is MANDATORY after each peripheral int disable (not documented MSP "feature") :
    // e2e.ti.com/.../895839
    #define CLR_BIT_ATOMIC_B(reg, bitn) asm("   BIC.B #" __EVALUATE_STR2__(bitn) ", &" #reg "\r\n   NOP\r\n   .global " #reg) 
    #define CLR_BIT_ATOMIC_W(reg, bitn) asm("   BIC.W #" __EVALUATE_STR2__(bitn) ", &" #reg "\r\n   NOP\r\n   .global " #reg)
    
    #define SET_BIT_ATOMIC_B(reg, bitn) asm("	BIS.B #" __EVALUATE_STR2__(bitn) ", &" #reg "\r\n	.global " #reg)
    #define SET_BIT_ATOMIC_W(reg, bitn) asm("	BIS.W #" __EVALUATE_STR2__(bitn) ", &" #reg "\r\n	.global " #reg)
    

    但是,如果这太多,只需在禁用 INTS (包括计时器 CCR)后插入__NO_operation()编译器内部函数。 什么都适合您。

    编译器不应在任何级别的优化中优化 ASM 或内部代码。

    此致,
    Filip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢!  我将等待一两天,看看我们是否得到了 TI 的官方回应。  如果没有,我会将您的回复标记为解决方案。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,TJ,

    此处有任何更新,您仍需要支持吗?

    谢谢!

    此致

    约翰逊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,约翰逊,

    我们似乎有一个解决方法,但如果 TI 能够确认程序计数器(PC)损坏的根本原因(有关许多故障排除和可疑的根本原因,请参阅原始线程),这将是很好的。  TI 还应说明 在禁用外围中断后添加 NOP 是否是一个有保证的解决方案(只有您能够检查 Verilog)。  一个开放式问题是,此问题是否仅适用于此特定外围中断(计时器 A/B CCIE)或所有外围中断(其他计时器中断,ADC,RTC,eUSCI 等)。  另一个未决问题是哪些部件受到影响(如果通用解决方案是在禁用外围中断后添加 NOP,则可能不重要)。  我还认为,如果需要 NOP,则应将其作为所有受影响部件的勘误表列出,或者应更新数据表以说明此要求。  如果编译器添加 NOP 将会更好,但我不知道这是否可行。

    如果这一问题在2年前得到解决,那么至少一周的故障排除和挫折将为我带来帮助(我确实阅读了数据表和勘误表!)。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,TC,  

    感谢您的反馈,我将尝试分析问题。 如果有任何流程,我会更新。

    谢谢!

    此致

    约翰逊