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.

[参考译文] MSP430F5659:根据 MSP430上 Modbus 协议处理划分 UART 和 USB 中断的优先级

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1326713/msp430f5659-prioritizing-uart-and-usb-interrupts-for-modbus-protocol-handling-on-msp430

器件型号:MSP430F5659

您好、TI 社区:

我目前正在从事一个项目、在这个项目中、我同时使用 MSP430微控制器上的 UART 和 USB 接口来使用 Modbus 协议处理数据。 为有效管理数据接收和发送、我将使用单个发送和接收缓冲区。 但是、在确定 UART 和 USB 之间的中断优先级以确保可靠的数据处理方面我遇到了挑战。

我的目标是根据收到的第一个中断确定中断的优先级。 如果我收到来自 UART 的中断、我想根据 Modbus 功能代码(读取或写入)处理数据接收并为数据提供服务。 在处理数据之后、我打算等待、直到来自 UART 或 USB 的下一个中断。

关于如何在 MSP430微控制器上可靠且高效地实现这一优先级排序、您能否提供指导或建议的方法?

感谢您的帮助。

此致、

基尔

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

    你可以随时在中断处理程序中完成这一切、但是如果你在处理 UART 中断的同时收到一个 USB 中断、你希望发生什么情况呢?

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

    基本器件、

    MSP430不允许中断优先级更改、它是固定的。 因此、根据您选择的 USCI、它的优先级将低于或高于 USB 中断。 现在、当处于另外一个中断(嵌套)中时、MSP430不处理中断。 (除非您精通、否则不建议在 MSP430上嵌套中断。) 这意味着、只有当 UART 和 USB 中断同时发生时、或者如果您第二次获得更高优先级的中断、但仍对同一中断提供服务时、才会发生冲突。 如果您使中断非常短、并在主循环中完成大部分工作、则会将这些情况降至最低。  

    话虽如此、为了处理您确实遇到的情况、您始终可以设置一些"关键代码段"、在这里您禁用中断并手动检查较低优先级中断的中断标志、以便手动提供服务。 之后还需要注意处理更高优先级的中断、因为读取中断寄存器会清除最高挂起的中断。  

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

    在这种情况下、理想情况是首先处理 UART 中断。 并会保持 USB 中断、直到当前中断得到服务。 但我不知道如何处理这种情况。

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

    杰斯,

    您能否 指导我如何禁用 中断并手动检查较低优先级中断的中断标志、以便手动提供服务。  

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

    当您收到 USB 中断时、请检查 UART 中断是否为挂起状态、如果是挂起状态、请立即退出该中断。

    但这种情况只能在两个中断同时发生的情况下发生。

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

    或者、使用优先级高于 USB 中断的 USCI。 我认为 USCIA0具有最高的优先级、但请仔细检查数据表。 (优先级最高的中断是编号较低的中断。)