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.

[参考译文] AM2432:bsp_send_command_to_firmware 函数中的 HwiP_disable

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1590579/am2432-hwip_disable-in-bsp_send_command_to_firmware-function

器件型号: AM2432

你(们)好

我注意到在 bsp_send_command_to_firmware() 中使用了 HwiP_disable()、并想询问使用背后的原因。 我们使用中断来运行 RT、而不想禁用中断。

我们可以改用 bsp_global_mutex_lock () 吗?

谢谢您、
Sahar Schwartz

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

    您好、 Sahar Schwartz、

    您能否澄清一下功能 ( bsp_send_command_to_firmware ) 用于以太网模块?

    此致、

    Anil.

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

    你(们)好

    是的。 这是可以在 tiescbsp.cpp 中找到的函数:

    void bsp_send_command_to_firmware(PRUICSS_Handle pruIcssHandle,
                                      uint32_t command,
                                      uint16_t param1, uint16_t param2)
    {
        volatile t_host_interface *pHost2PruIntfc = (volatile t_host_interface *)
                ((((PRUICSS_HwAttrs *)(pruIcssHandle->hwAttrs))->baseAddr) +
                 PRUICSS_DATARAM(0));
        {
    #ifdef ENABLE_PDI_TASK
            SemaphoreP_pend(&semcmdlow_object, SystemP_WAIT_FOREVER);
    #else
            uintptr_t key1 = HwiP_disable();
    #endif
            bsp_pruss_cmd_intfc_write_word(command, &pHost2PruIntfc->cmdlow);
            bsp_pruss_cmd_intfc_write_word(param1, &pHost2PruIntfc->param1low);
            bsp_pruss_cmd_intfc_write_word(param2, &pHost2PruIntfc->param2low);
    #ifdef SUPPORT_CMDACK_POLL_MODE
            bsp_pruss_cmd_intfc_write_word(1, &pHost2PruIntfc->cmdlow_ack);
    #endif
            PRUICSS_sendEvent((g_bsp_params.pruicss_handle), ARM_PRU_EVENT1);
            ASSERT_DMB();
            ASSERT_DSB();
            {
    #ifdef SUPPORT_CMDACK_POLL_MODE
                volatile uint16_t ack;
    
                do
                {
                    ack = bsp_pruss_cmd_intfc_read_word(&pHost2PruIntfc->cmdlow_ack);
                }
                while(ack);
    #ifndef ENABLE_PDI_TASK
                HwiP_restore(key1);
    #endif
    #else
                uint32_t evtoutNum = HOST_CMD_LOW_ACK_EVENT - 20;
    #ifndef ENABLE_PDI_TASK
                HwiP_restore(key1);
    #endif
                PRUICSS_waitEvent((PRUICSS_Handle)(g_bsp_params.pruicss_handle), evtoutNum);
    #endif
            }
            bsp_pruss_cmd_intfc_write_word(0xFF,    &pHost2PruIntfc->cmdlow);
    #ifdef ENABLE_PDI_TASK
            SemaphoreP_post(&semcmdlow_object);
    #endif
        }
    }

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

    尊敬的 Sahar:

    请让我与开发团队核实、了解有关此问题的更多详细信息。 这是工业通信 SDK 的一部分。 请告知我们 SDK 的特定版本以及您所使用的操作系统选择、这可以帮助我们检查是否有替代方案。  

    谢谢。此致、
    Teja。

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

    你(们)好

    SDK 版本为 09.01.00.03、我们的操作系统为 RTOS

    谢谢你
    Sahar

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

    尊敬的 Sahar:

    HwiP_disable 和 HwiP_restore 之间的部分被认为很关键、因为我们不想部分更新 PRUICSS 输入字段、并切换到不同的上下文、这会导致不良行为。

    我将与开发团队核实删除此职能中关键部分的可行性。 您能否详细解释一下您的用例、以便我们可以建议更好的方法来实现您的目标?

    谢谢。此致、
    Teja。

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

    感谢您的回答。

    一个用例是出于调试目的尝试读取 ESC 寄存器 0x0440、我看到当我干扰其他尝试读取的任务时、应用程序出现问题。

    第二件事就像我说过的、我们正在使用中断来运行 RT、不能让任何其他任务干扰我们的时序。

    谢谢、

    Sahar  

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

    您好、

    我已将其交给我们的内部团队、并且正在进行审核。 请给我们 2 天时间来调查问题、并建议后续步骤。

    感谢您的耐心。

    此致、
    Teja。