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.

[参考译文] MSP430F6779:ADC 中断问题

Guru**** 2511985 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1061738/msp430f6779-adc-interrupt-issue

器件型号:MSP430F6779

大家好、

对于  MPY32硬件乘法器:

使用由 EnergyMeasurementDesignCenter-1.40.00.03生成的代码。

2. MSP DSP 库:使用 DSPLIB_1_30_00_02。

3.在 ADC SD24中以4K 采样频率捕获中断、在中断中调用 emSwLib 库中的算法函数、并使用 MPY32进行分析。

使用在中断之外执行的函数 MSP_FFT_iq31、从 ADC 为 FFT 收集的数据中获取256个数据。

问题:

通过使用一组 FFT 测试数据、可以发现每次转换后的结果是不同的。 每次执行 FFT 之前、使用_disable_interrupt 关闭中断后的 FFT 结果都是相同的、其他 FFT 算法也是如此。 应该是、MSP_FFT_iq31被 ADC 中断、并且 MPY32在 MPY32过程中被使用、导致 MPY32原始数据损坏、每次发出 FFT 时产生不同的结果。 客户在进入中断计算时尝试备份 MPY32相关寄存器、在退出中断时恢复 MPY32相关寄存器、但问题仍然存在。

客户想知道是否可以通过恢复 MPY32寄存器来解决此问题、或者是否有办法解决此问题? 注意:中断无法关闭、因为在 ADC 中断中执行了一些更重要的操作。

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

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

    详细信息很重要、因此您应该查看用户指南中的示例、网址为25.2.7.1

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

    您好 Cherry、

    使用 MPY32和中断可能比较棘手。 在某些情况下、您必须暂时禁用中断、然后在执行操作后重新启用中断。 在某些情况下、您还需要保存 MPT32寄存器、然后恢复它们。 有关更多信息和指导、请查看第25.2.7节和第25.2.7.1节。  

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

    大家好、

    此问题已解决。 客户已按照您的步骤操作。

    但这里还有一个问题:

    客户也在25.2.7.1中尝试过汇编例程、但失败、如下所示:

    只需复制例程并编译、 但编译失败、并且有几个符号无法找到、但它们确实存在。

    通过 引用寄存器、可以将宏定义替换为实际值来编译宏定义:

    但是当程序运行到 mpy32Backup 时、它不起作用、

    请帮您检查这个问题吗?

    谢谢、此致、

    樱桃

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

    25.2.7.1中的示例用于汇编、而不是像您所做的那样使用。 思考您所做的事情。 您将一组数据压入堆栈、然后您的 C 函数尝试返回。 它会查找您保存的数据、而不是栈上的返回地址。 这将会每次吹扫。

    您可以将这些 asm ()语句放入 ISR 中、但前提是考虑栈。

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

    樱桃

    正如 David 所指出的、实施 C 语言中给出的示例以更好地集成到项目中的最佳方法。