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.

[参考译文] RTOS/MSP430F5528:RTOS 在退出 LPM4后不运行

Guru**** 2537250 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/719494/rtos-msp430f5528-rtos-is-not-operating-after-exiting-from-lpm4

器件型号:MSP430F5528

工具/软件:TI-RTOS

您好!  

我已成功将 CPU 放入 LPM4。  我通过使用系统上的一个硬件按钮来生成中断来退出 LPM4。  我已经验证了正在使用调试器执行 ISR。  从中断返回之前执行的最后一条语句是 __BIC_SR_REGISTER_ON_EXIT (0xF0);  

从中断返回后出现问题。  我的.cfg 具有  与名为 bearBeatFxn()的函数相关联的 timer0 (用 XGCONF 实例化)。   这段时间为25mS、在 RETI 之后从未执行过。  此时 SR 的值为0x040C。  我还验证 了 TA0 正在运行。

 退出 LPM4后、我是否需要执行一些操作来使 RTOS 运行?

谢谢你

罗伊

  

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

    在进入 LPM4之前、您是否检查了该函数是否正确?

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

    您好、Nathan、

    在进入 LPM4之前,BeatFxn()工作正常。

    但是,退出 ISR 后,它永远不会恢复。

    罗伊  

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

    您是否看到计时器中断发生? 我假设这就是你调用 betBeatFxn()的方式。

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

    我尚未查找中断。 我确定是否调用了 betBeatFxn()的方法是在函数内设置一个断点。 我认为 TA0与我在 XGCONF 中的时钟0计时器相关联。 我注意到、当我暂停调试器时、在退出 LPM4后、我看到没有为 TA0启用中断、并且中断标志被置位。

    在哪里查找与 TA0相关的 ISR?

    罗伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nathan、
    我对 SYS/BIOS 定时器实现的研究表明,一个硬件(我认为它正在使用 TA0)定时器被配置为针对时钟0、时钟1等产生时钟周期 TA0应该在向上计数模式下持续运行、并且每1000us 生成一个 Hwi。 我想这是在调用 Clock_tick()函数时发生的。
    系统中的 clock0配置为最多可计数25个时钟周期,然后调用 betBeatFxn()。

    退出 LPM4后,BeatbeatFxn()永远不会被调用。 但是、使用调试器、我可以看到 TA0正在运行。 在进入 LPM4之前、我注意到的一件事是每次我暂停调试器时 TACCR0都会发生变化。 退出 LPM4后、当我暂停调试器时、我看到 TACCR0不再被更改。

    我认为退出 LPM4后、SYS/BIOS 定时器模块的情况并不正确。

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

    罗伊

    我发现您的问题已存在5天、进展不顺利。

    我没有5528来重现您的问题、但我有非常相似的 MSP-EXP4305529LP。 集成到您的芯片中。

    我不同意您的第一个陈述:我已成功将 CPU 放入 LPM4。

    如果我们无法正确退出 LPM4、我们无法说我们已准备好进入 LPM4。

    您几乎不提供有关您的环境和代码的信息、例如:

    - CCS 版本、编译器版本、定制板或 LP、

    -您的 ISR 代码以及如何将其与 TI-RTOS 链接在一起,您是否使用了 hwi()、零延迟、自定义中断?

    您说:这段时间为25mS、在 RETI 之后从未执行过。  此时 SR 的值为0x040C。

    对于像我一样没有5528的支持者来说、解码 SR 值最多需要30分钟。

    请帮我帮助您。

    如果您没有进入 LPM4、您能否检查 ISR 是否正常工作?

    请检查您的时钟系统是否已正确配置为支持您的 MCU 的 LPM4、并确认。

    如果时钟系统配置正确、我建议转到 ISR 详细信息。

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

    我认为您的将低级内在函数规则与 TI-RTOS 中断要求混用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../1641.SPI_5F00_UCB0.ce2e.ti.com/.../misc_5F00_stuff.he2e.ti.com/.../3716.main.ce2e.ti.com/.../I2C_5F00_UCB1.ce2e.ti.com/.../6305.empty_5F00_min.cfge2e.ti.com/.../display.cHiTomasz、

    我  认为我进入 LPM4、因为当我暂停调试器时、我得到的 SR 值为0x00FB。  这表示 SCG1、SCG0、OSCOFF、CPUOFF 位都被置位。

       CCS 版本:  7.3.0.00019、 编译器: TI V16.9.4 LTS、 我正在使用定制 PCB

       3. ISR 是通过 Hwi 段下的.cfg 文件和 XGCONG 实现的。  我的 ISR 函数名为 switches_ISR (请参阅随附的.cfg 文件)。   switches_isr ()位于 main.c 中

    如果我使用 ISR,当您要求我验证 RTOS 是否正常时,当我以正常方式( 不在 LPM4中)运行时 ,RTOS 崩溃。  我发现在我的 ISR 上使用_interrupt 关键字是不正确的。  将关键字取出后、编译器会在语句__BIC_SR_REGISTER_ON_EXIT (0xF0)上选择; 为了使运行状态变得更好、我注释掉了这条语句。  编译器正常工作、在正常运行期间使用 switches_isr()时不会使 RTOS 崩溃。

    但是、如果使用 ISR 退出 LPM4、则 RTOS 仍然无法正常工作。  

    在哪里放置  __BIC_SR_REGISTER_ON_EXIT (0xF0)   函数?

    我的代码流如下:

                       每25mS clock0就会超时调用 bearBeatFxn(), 请参阅.cfg 和 main.c  

                       BeatBeatFxn()发布 HES_SEM

                       HES_TASK ()执行、  请参阅 I2C_UCB1.c

                       此任务发布 LCD_SEM

                       program_lcd_task()被执行、请见 SPI_UCB0.c

                        几秒钟后 ,调用 exp_sleep_prep()(请参阅 display.c) 为 LPM4做好准备  

                      然后执行_bis_SR_register (0x00F0)、将 CPU 置于 LPM4中

     一个硬件开关被用来退出 LPM4

    非常感谢你的帮助

    罗伊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    罗伊
    我的时间是凌晨2点。
    我将在周六返回您的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../HwiFuncs.cHiTomasz

    我进一步深入探讨了在哪里放置 __BIC_SR_REGISTER_ON_EXIT (0xF0)  函数。

    我已附上 HwiFuncs.c 文件

    我认为它必须放置在中断存根的第444行中。

    一个问题是退出函数必须有条件地执行、具体取决于  它是来自常规操作的中断还是来自 LPM4的中断。

    因此、需要将代码写入中断存根 中、以确定这一点。  我不确定这是否正确,如果是,我不知道如何作出这一决定。

    此外,  每次执行清理和编译时,对中断存根的修改不会丢失?  

    感谢你的帮助。

    罗伊

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

    e2e.ti.com/.../1727.HwiFuncs.cHiTomasz、

    作为实验、我将__BIC_SR_REGISTER_ON_EXIT (0xF0)语句 放入 HwiFuncs.c 中的中断存根中

    当系统处于 LPM4中时、我使用开关2将其唤醒、RTOS 在退出 LPM4后似乎正在工作。

    请参阅第461行中随附的文件。

    我仍然缺少的是有条件执行__BIC_SR_REGISTER_ON_EXIT ()的正确方法。

    感谢你的帮助。

    罗伊