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.

[参考译文] MSP430FR5969:多个中断设置

Guru**** 2534260 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1167814/msp430fr5969-multiple-interrupts-set-up

器件型号:MSP430FR5969

大家好、  

你好。 我代表客户发布此查询。

"我将 MSP430FR5969用于一个项目。 我有几个任务需要在不同的特定时间执行、因此我设置了多个中断、以便以适当的时间间隔执行这些任务。

然后、当其他任务不工作时、我还有另一个任务要完成。
我让模数转换器以256Hz 的频率对信号输入进行采样。 我有一个计时器、它以256Hz 的频率为我提供中断。 此中断服务启动 A/D 转换器、然后从中断返回
当 A/D 转换器完成时、它会生成一个 MEM0中断、我获取该值并将其保存到 FRAM 中
然后、我希望在一个128x128显示屏上显示该信号、所以我只显示每4个 MEM0中断一次。
这将在屏幕上显示大约2秒。 显示128个值后、我将清除屏幕并重新开始。 这种情况"永远"持续下去
同时、我将根据偶尔更新的传入数据计算一个值。 因此、我想在每次更改时显示一行包含该计算值的文本、这一点完全不同步
我想做的是、坐在一个环路中计算该值、该值会异步更改、每当更改时显示该值、并在发生其他中断之一时从代码的该部分中断。"
请提供建议。 感谢您的帮助。
此致、  
Marvin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Marvin、

    这并不是嵌入式编程的常见程序流程、 根据他们的描述、我想 说无需过于考虑。  

    异步/连续操作可在 main 内永无休止的 while 环路内执行。 您还可以设置标志来处理 ISR 中的某些数据、当 while 循环返回给它时、将执行相应的代码。  

        while (1)
        {
            if(flag1){
                //handle condition 1
                flag1 = false;
            }
            else if(flag2){
                //handle condition 2
                flag2 = false;
            }
            ///.... etc.
            
            //Insert code to be performed continuosly
        }
    

    除了设置标志之外、它们还可以在 ISR 内执行其他基本操作、但建议尽可能缩短这些操作以避免时序问题。  

    此致、
    Brandon Fisher

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

    您好、Brandon、  

    感谢您的及时响应。 请参阅我们客户的反馈。

    "响应有点在正确的路径上、但我的问题更多地是在启动中断后如何在主循环中继续处理。

    我将计时器 B0设置为以250Hz 的速率进行中断。 当该中断发生时、该 ISR 仅启动新的 A/D 转换并返回。 完成 A/D 转换后、ISR 会从 MEM0读取该值并将其放入数组中。 最初、我还让 ISR 执行数字化数据的所有处理、但我很确信、在1秒的1/256时间内有太多事情要做。

    由于大部分处理工作只需要每1/2秒完成一次、我现在已经设置了计时器 A0、每0.5秒生成一次中断。 在该 ISR 中、我的目的是在禁用中断的情况下执行所需的最小值、然后启用中断并继续处理。 如果计时器 B0再次中断、没关系-它将启动另一个 ADC 周期、然后是 RTI;ADC 将完成并发生中断并保存 MEM0;我将返回到我的处理。 该数组足够大、可以保存几秒钟的样本。

    在时间 B0和 ADC ISR 结束时、我有以下代码:
    _bis_SR_register (LPM0_bits + GIE);// LPM0、ADC12_B_ISR 将强制退出
    __no_operation();//用于调试器

    如果处理器进入 LPM0但返回到计时器 A0 ISR、它是否会自动退出 LPM0?
    如果可以在计时器 A0 ISR 中允许中断、我该怎么做? 它就像调用一样简单
    _enable_interrupt ();
    __no_operation();"

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

    您好、Marvin、

    TB0中断向量 的优先级高于本器 件中的 TIMA0中断、因此这种方式可以自然地起作用、但这样嵌套* ISR 并不理想、因为在其他 ISR 中花费的时间将增加到 TA ISR 的总执行时间。  

    通过向  __BIC_SR_REGISTER_ON_EXIT  内在函数添加调用,它们可以在主循环中继续(即从 LPM0退出)。 Dennis 在以下主题中提供了有关此功能如何工作的非常好的说明: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1016520/msp430fr2433-inquiry-about-__bis_sr_register-and-__bic_sr_register_on_exit

    我觉得 、如果计时器 A 想要在这些计算发生时计时、我仍然可以选择使用计时器 A、只是为了设置一个标志、使计算在您返回到主循环时开始。 如果在此期间发生 TIMB/ADC 中断、则您将返回到在循环中执行的位置并继续。

    此致、
    Brandon Fisher

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

    您好、Brandon、  

    感谢您的回答。 请参阅我们客户的反馈。


    "根据您分享的信息、下面是我要尝试的基本流程:

    main():
    设置 ADC12以写入 ADC12MEM0
    为256Hz 中断设置 TB0
    启动 TB0
    __ENABLE_INTERRUPTS ()
    __NO_OPERAT()

    while (1){
    while (sample_count = CURRENT_SAMPLE_COUNT)
    等待 ADC 生成另一个值
    对 array[curry_sample_count]中的值执行必要的工作
    CURRENT_SAMPLE_COUNT++
    如果 CURRENT_SAMPLE_COUNT >最大值、则 CURRENT_SAMPLE_COUNT = 0


    TB0 ISR:
    启动 ADC12
    _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS)
    __NO_OPERAT()

    ADC12MEM0 ISR:
    将 MEM0读取到数组[SAMPLE_COUNT)
    SAMPLE_COUNT++
    如果 SAMPLE_COUNT >最大值、SAMPLE_COUNT = 0
    _BIC_SR_REGISTER_ON_EXIT (LPM3_BITS)
    __NO_OPERAT()


    这意味着 MSP 不会进入 LPM0、但我在我的应用中并不担心这一点。 我也许可以在"等待 ADC 生成另一个值"循环期间进入 LPM0。"

    感谢您的帮助。 非常感谢您的支持。

    此致、  

    Marvin

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

    您好、Marvin、

    这对我来说似乎是可行的。 正如他们所说的、当他们不再处理数据时、可以选择进入 LPM。  

    此致、
    Brandon Fisher

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

    您好、Brandon、  

    请参阅我们客户的反馈。  

    "我在 E2E 中查看了响应。 我的计划已经取得了进展,这似乎运作良好。 不过、从 Brandon 获得一些验证是很好的。

    非常感谢您的帮助、感谢 Brandon 为我提供的帮助!"

    非常感谢您的支持。 感谢你的帮助。

    此致、  

    Marvin  

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

    感谢分享他们的反馈 Marvin。 现在我将继续并关闭此主题、但如果需要更多帮助、请随时再次发布。

    此致、
    Brandon Fisher