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.

[参考译文] RTOS/TMS320C6657:EDMA3_DRV_CREATE ()失败

Guru**** 2585275 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/632820/rtos-tms320c6657-edma3_drv_create-fails

器件型号:TMS320C6657

工具/软件:TI-RTOS

大家好

我仍在为 EDMA 的实现带来问题。 我的代码如下所示:

静态无符号 int edma3InstanceId = 0、edma3RegionId = 1;
extern EDMA3_DRV_GblConfigParams sampleEdma3GblCfgParams[]; //还尝试:extern EDMA3_DRV_GblConfigParams sampleEdma3GblCfgParams;
extern EDMA3_DRV_InstanceInitConfig sampleInstInitConfig[][EDMA3_MAX_region];//还尝试:extern EDMA3_DRV_InstanceInitConfig;

//在同一源文件中: void EDMA_CONFIG (EDMA_T * EdmaObj) { EDMA3_DRV_Result edma3Result = EDMA3_DRV_Sok; //将全局配置设置为样本参数中的默认值(位于 BIOS_EDMA&3_DRV_SAMPLE_C6455_cfg.c 中);//将全局配置设置为默认值(位于 BIOS_DRMADCMOS_DR3中 ); //在 DRM37_DRMP.param 命令中指定 DR3;//创建 DRM3_DRM37_DRMP.param 命令= DR3;/DRM3GPBLDMA3+ DRMADDR3; //用于 EDMA3_DRV_open() API 和中定义的 initCfg 结构 EDMA3_DRV_initconfig initCfg; //位于 BIOS_EDMA3_drv_SAMPLE_C6455_cfg.c EDMA3_DRV_InstanceInitConfig * instanceConfig =&sampleInstInitConfig;//[edma3InstanceId]+ edma3RegionId; //声明初始化 initCDV.ID 所需的配置结构 ;initedionId.DRV=initId=uedInd//用户必须指定区域(LLD/DRV 不支持"全局"区域) initCfg.drvSemHandle =(void*)&os_sem;// os_sem 在 semaphore.c 中创建 initCfg.drvInstitConfig = instanceConfig;//特定于设备的配置-区域 edma3jc 拥有的资源 ,initCfg.drvInstInitConfig = instanceConfig;//特定于区域调用 cyberrbleb 控制器错误,例如从区域 cyberrbleb 控制器返回到通道 cybleb;//区域控制器错误 //超过队列阈值等。 initCfg.gblerrData = NULL;//错误回调函数 miscParam.isSlave = false 所需的任何数据; // arm + dsp,指定谁是主控方,单芯片=使用 false // EDMA3驱动程序创建(对于每个 EDMA3硬件实例只调用一次) edma3Result = EDMA3_DRV_create (edma3InstanceId,globalConfig,(void *)&miscParam); if (edma3Result!= EDMA3 log_info0 ("e@EDMA_config:EDMA3_DRV_CREATE ()"); 返回; }

返回值不是 EDMA3_DRV_Sok。 上下文 ma 很重要、因此下面是整个项目(CCS7.3、PDK_2_0_7、EDMA3_LLD_2_12_05_29)的 zip:

e2e.ti.com/.../gpio_5F00_edma1.zip

我在 main.c 中进行了相同的清理、因此只有 EDMA3功能仍然存在、但还有更多的源文件。

如果有人给我小费、那对我会很有帮助。

此致、

Pablo

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

    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

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

    你好

    问题的原因实际上非常愚蠢:我将此函数调用编码在一个循环中、并且相应的"释放"位于外部。

    我希望没有人在这方面花了太多时间。 此致、

    第页

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

    对于具有 PDK 2.0.7的 C6657、有一个 McBSP 示例。 在 sample_init.c 中,它调用 edma3init()---- >EDMA3_DRV_CREATE ()。 您可以使用该代码查看是否可以创建 EDMA 实例(它应该会创建)、然后比较代码中的不同之处。

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

    感谢 Eric 为我举个例子。 我在那里找到了很多答案。 还有一个问题:

    该示例包含 EDMA3_RM_GblConfigParams[]数组的完整定义。 它是针对该特定示例(McBSP)调整的定义吗? 还是使用 EDMA3-LLD 的任何应用都通用的 C6657属性? 在我之前的代码中、我声明了数组 extern、尽管实际定义出现在我链接的 EDMA-LLD 库之一中(链接器没有给出错误)。 可能有多个定义、但我很惊讶它们具有相同的名称。 您手头上是否有对 C6678有效的类似定义?

    此致、

    Pablo

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

    EDMA3_RM_GblConfigParams[]是全局数组。 在 McBSP 样本中、它在 McBSP\examples\c6657\MCBSPDigLpbk\sample_c6657_cfg.c 中定义 EDMA LLD \ti\sdo\EDMA3\drv\samples\src\platforms\sample_c6657_cfg.c 中也定义了相同的内容(内容完全相同)。 当两者都在应用中定义时、源代码中的一个将被链接、而不是库中的另一个。 我在示例中看不到需要单独 sample_c6657_cfg.c 的原因。

    对于 C6678的相同定义、您可以在 EDMA LLD:packages/ti\sda\EDMA3\drv\samples\src\platforms 下找到它

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

    你好

    谢谢! 我喜欢最终了解一些细节。

    我希望我仍然可以在这里再提出一个小问题:我想了解以下两个数组代表的内容(来自 SAMPLE_C6657_INT_REG.c、第67-73行):

    ccXferHostInt[NUM_EDMA3_Instances][NUM_DSP]={{0U、20U};
    edma3ErrHostInt[NUM_EDMA3_Instances][NUM_DSP]={{1U、21u}}; 

    其他数组似乎取自 CIC0-Input-Event 表。 它们是否是 CIC0/1表的手动选择事件?

    谢谢、此致、

    第页

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

    这些是主机中断,正如您看到的,它们在函数 CpIntc_enableHostInt()中使用。 因此、它们是从 C6657主 Corepac 中断表中手动挑选的。

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

    你好

    我在该示例中无法理解几个方面。 请告诉我是否应该为这些问题打开单独的主题。

    [1]

    区域编号。 我在教程中看到、区域0 (零)是主管的、LLD 不支持该区域。 我使用了区域1。 但该示例使用内核编号作为区域。  因此、第一个内核是监控器? 该示例确实使用了 LLD,而 main()中的前几行基本说明内核数为零。

    [2]

    全局结构 EDMA3_RM_GblConfigParams EDMA3_RM_InstanceInitConfig。 我们已经讨论过、该示例提供了它们的定义。 在我看来、库提供的定义是恒定的、用户程序不能修改它。 或者可以吗? 此示例修改两个结构的内容(源 mcbspMasterDigLpbk.c、第946-957行)。 看起来 DMA 通道应该手动启用。 我知道这些行假定 EDMA 实例0和区域0、但我不理解这里的下标"1":

    uint32_t temp;
    
    //...
    
    /*将 dmaChannel McBSP 事件启用到 EDMA (36-40)*/
    |temp=sampleEdma3GblCfgParams[0].dmaChannelHwhtMap[1];
    sampleEdma3GblCfgParams[0].dmaChannelInt EvtMap[1]=;samples[0*/Insta03]+InstaCf1*=0*[tintres1]0
    
    ;Insta0*Insta03*[tintres1]0;Insta0[tintres[tintres1]Insta0*0]Insta0*[sumeTrumeTrintraneTrumeTrintres[0]+Insta0]0;Insta0*0]&Insta0*#tines[tingsinc0]0
    
    
    
    
    
    
    
    
    
    

    我想知道、信道36-40是什么特别的、还是像其他人一样只是一个选择(我认为后者是正确的)。

    谢谢、此致、

    Pablo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    啊,啊,啊。
    在 pdk_c665x_2_0_7提供的示例中、有两个同名变量(sampleEdma3GblCfgParams)但类型不同。 一个是 EDMA3_DRV_GblConfigParams、另一个是 EDMA3_RM_GblConfigParams。
    与实例配置(samplpleInstInitConfig)的情况相同。
    不用说,我不理解这一技巧。
    此致、
    第页