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.

[参考译文] AM2434:写入比较事件路由器地址空间@0xa30000会导致 R5的数据中止

Guru**** 2442090 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1246188/am2434-writing-to-compare-event-router-address-space-0xa30000-results-in-data-abort-for-the-r5

器件型号:AM2434

您好!

我正在使用 TMDS243GPEVM 开发板评估 AM243x 系列。

在我的应用中、我确实需要将 PRU-IEP 比较事件路由到 R5 intr。 为此、我需要配置 CMP_EVENT_ROUTER。

R5可以在0xa30000处从该地址空间读取、但如果 R5写入一个多路复用器控制寄存器、它将获得一个中止。

我可以通过调试器更改这些寄存器。 相比之下、写入 time_sync_router (0xa40000)不会有问题。

你有什么想法吗? 我使用的是裸机。 目前没有 Linux 和 RTOS。

谢谢、此致

巴斯坦语

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

    尊敬的 Bastian:

    很抱歉在答复中出现延误,请允许我到星期四再谈这件事。

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

    static void Sciclient_CMP_EVENT_ROUTER_IrqSet(void)
    {
        int32_t                             retVal;
        struct tisci_msg_rm_irq_set_req     rmIrqReq;
        struct tisci_msg_rm_irq_set_resp    rmIrqResp;
        rmIrqReq.valid_params           = 0U;
        rmIrqReq.valid_params          |= TISCI_MSG_VALUE_RM_DST_ID_VALID;
        rmIrqReq.valid_params          |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
        rmIrqReq.global_event           = 0U;
        rmIrqReq.src_id                 = TISCI_DEV_PRU_ICSSG0;   
        rmIrqReq.src_index              = 12;
        rmIrqReq.dst_id                 = TISCI_DEV_R5FSS0_CORE0;
        rmIrqReq.dst_host_irq           = 48;
        rmIrqReq.ia_id                  = 0U;
        rmIrqReq.vint                   = 0U;
        rmIrqReq.vint_status_bit_index  = 0U;
        rmIrqReq.secondary_host         = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST;
    
        retVal = Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SystemP_WAIT_FOREVER);
        if(0 != retVal)
        {
            DebugP_log("[Error] Sciclient event config failed!!!\r\n");
            DebugP_assert(FALSE);
        }
        return;
    }
    void IsrFxn(){
        //isr defination make sure to clear compare event
    }
    int main(){
        Sciclient_CMP_EVENT_ROUTER_IrqSet()
        HwiP_Params     hwiPrms;
        HwiP_Object     compHwiObject;
        HwiP_Params_init(&hwiPrms);
        hwiPrms.intNum   = 48;
        hwiPrms.callback = &IsrFxn;
        retVal = HwiP_construct(&compHwiObject, &hwiPrms);    
    }

    参考资料:-

    C:\ti\mcu_plus_sdk_am64x_08_05_00_24\source\drivers\sciclient\include\tisci\am64x_am243x

    技术参考手册9.5.1、9.4.1.2

    要获取 src_id 和 src_index:-

    转到 TRM 的9.5.1、获取与 PRU_ICSSG0_PR1_IEP0_CMP_INTR_REQ_0对应的 IR ID

    红外 ID=16

    查看以下链接以获取 rmIrqREQ.src_id & rmIrqREQ.src_index:- https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am64x/interrupt_cfg.html#cmp-event- introuter0-interrupt-router-input-sources 

    获取 destination_id 和 destination_host_IRQ

    转至 C:\ti\mcu_plus_sdk_am64x_08_05_00_24\source\drivers\sciclient\include\cisci\am64x_am243x 以查找目标 ID

    转至9.4.1.2以查找 Get destination_host_IRQ

     

      

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

    谢谢!

    现在、我能够通过 sci 客户端配置路由器。

    您能否解释一下为何需要 SCI 客户端?

    另一个问题与 sciclient。 如果我使用调试器重新加载程序、

        retVal = Sciclient_rmIrqSet(&rmIrqReq, &rmIrqResp, SystemP_WAIT_FOREVER);
        if(0 != retVal)
        {
            DebugP_log("[Error] Sciclient event config failed!!!\r\n");
            DebugP_assert(FALSE);
        }

    失败、因为仍然配置了 CMP_EVENT_ROUTER。 在开始执行之前、我需要通过调试器清除相应的寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我需要在开始执行之前通过调试器清除相应的寄存器。

    您可以在程序结束时调用此函数:-

    static void Sciclient_CMP_EVENT_ROUTER_IrqRelease(void)
    {
        int32_t                             retVal;
        struct tisci_msg_rm_irq_set_req     rmIrqReq;
        struct tisci_msg_rm_irq_set_resp    rmIrqResp;
        rmIrqReq.valid_params           = 0U;
        rmIrqReq.valid_params          |= TISCI_MSG_VALUE_RM_DST_ID_VALID;
        rmIrqReq.valid_params          |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
        rmIrqReq.global_event           = 0U;
        rmIrqReq.src_id                 = TISCI_DEV_PRU_ICSSG0;   
        rmIrqReq.src_index              = 12;
        rmIrqReq.dst_id                 = TISCI_DEV_R5FSS0_CORE0;
        rmIrqReq.dst_host_irq           = 48;
        rmIrqReq.ia_id                  = 0U;
        rmIrqReq.vint                   = 0U;
        rmIrqReq.vint_status_bit_index  = 0U;
        rmIrqReq.secondary_host         = TISCI_MSG_VALUE_RM_UNUSED_SECONDARY_HOST;
    
        retVal = Sciclient_rmIrqRelease(&rmIrqReq, SystemP_WAIT_FOREVER);
        if(0 != retVal)
        {
            DebugP_log("[Error] Sciclient event reset failed!!!\r\n");
            DebugP_assert(FALSE);
        }
        return;
    }


    您能解释为何需要 sci 客户端吗?

    它们用于将 CMPINTRTR0的任何输入配置为任何 CMPINTRTR0 输出

    您可以通过此链接了解有关 sciclient 的更多信息:-  

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/DRIVERS_SCICLIENT_PAGE.html

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

    好的。 谢谢!