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.

[参考译文] Linux/OMAP-L138:从 Linux 启动 DSP

Guru**** 2589245 points
Other Parts Discussed in Thread: OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/590897/linux-omap-l138-starting-dsp-from-linux

器件型号:OMAP-L138

工具/软件:Linux

我在确定如何从运行 Linux 的 ARM 内核启动自定义 DSP 应用方面遇到了一些困难。 我已经构建并能够运行所有 Syslink 示例、但没有成功运行我自己的应用程序。
当前的目标是将 Slaveloader 功能与 MCASP Loopthrough 示例集成。 如果 ARM 上未加载 Linux、我可以通过 CCSv7加载 DSP 程序。
当我尝试从 Linux 启动 DSP 时、Syslink 会报告从设备成功启动、但 DSP 似乎没有执行任何操作。
据我所知、CCS 正在生成 ELF 可执行文件。

我正在使用以下命令通过 Linux 加载程序:

insmod /lib/modules/3.3.0/kernel/drivers/dsp/syslink.ko trace=1 TRACEFAILURE =1 TRACECLASS = 3
/slaveloader 启动 DSP MCASP_AudioExampleProject.out MCASP_AudioExampleProject.map

之后、似乎 DSP 程序计数器自动递增而不会停止、就好像没有加载任何代码一样。 这至少是我单步执行反汇编时的样子。

从 CCS 启动 DSP 时、如果我在 ARM 上运行 Linux、我会通过控制台获取以下消息:
ARM9_0:输出:目标已连接。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:存储器映射被清除。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:存储器映射设置完成。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:GEL:执行 OnTargetConnect ()时出错:读取0x01C10800时发生页错误
AT (*(unsigned int *)((0x01C10000+0x800)+(4*LPSC num)))和0x1F)[OMAP-L138_LCDK.gel:868]
在 PSC0_LPSC 使能(0、0)[OMAP-L138_LCDK.gel:509]
在 PSC_ALL_ON ()[OMAP-L138_LCDK.gel:244]
在 OnTargetConnect()

处于此状态的 DSP 的行为是处于空闲循环中、而不会看到 MCASP 中断。 我假设页面故障是由于 Linux 内核已加载。

当我不加载 Linux (中断 U-boot、然后通过 JTAG 加载程序)时、我会在控制台上看到以下输出:
ARM9_0:输出:目标已连接。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:存储器映射被清除。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:存储器映射设置完成。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:PSC 启用完成。
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:针对内核:300MHz、EMIFA:25MHz 完成 PLL0初始化
ARM9_0:输出:DDR 初始化正在进行中....
ARM9_0:输出:针对 DDR:150MHz 完成 PLL1初始化
ARM9_0:输出:使用 DDR2设置
ARM9_0:输出:完成150MHz 的 DDR2初始化
ARM9_0:输出:-------------------------------------------------------
ARM9_0:输出:DSP 唤醒完成。
ARM9_0:输出:-------------------------------------------------------

此时、程序按预期启动。

无论是哪种方式、对于 DSP 控制台、消息都是相同的:

[C674x_0]
EDMA 驱动程序初始化通过。

以下是目标和平台:
程序目标:TI.targets.elf.c674
计划平台:平台:ti.platforms.evmOMAPL138:dsp

这似乎是内存映射问题、或者我无法跟踪的一些模糊配置设置。  我在 Linux 内核中禁用了 I2C 和 MCASP 外设、但没有看到任何改进。

如果我可以提供任何其他信息来帮助、请告诉我。

Jeff

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

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

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

    我将查看这一点并返回我的反馈。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    n`t 在我们当前的 SDK 产品中、我们没有现成的示例可以使用 SYSLINK 启用 MCASP 示例。

    DVSDK 有一个现有示例、介绍了启用该示例所涉及的步骤。 您可以在下面提供的 wiki 链接中进行参考:
    processors.wiki.ti.com/.../Audio_Soc_example

    此外,请参考我在这里的备注:
    e2e.ti.com/.../217699

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢大家! Rahul、我将查看这些内容、并向您返回我的调查结果。 到目前为止,它看起来很有希望。

    在我看来、我可能需要为 Linux 中的 DSP 保留 EDMA 通道、因此我将首先尝试此操作。

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

    通过以下代码在"board-omapl138-lcdk.c"中保留 EDMA 通道0和1似乎不起作用:

    静态常量 S16 da850_dma0_RSV_chans[][2]={
    /*(偏移量、数字)*/
    {0、2}、//添加2017年4/26/Jeff Limbocker -保留 McASP DMA 通道(0和1)
    {8、6}、
    {24、4}、
    {30、 2}、
    {-1、-1}
    }};
    
    静态 const S16 da850_dma0_RSV_SLOTS [][2]={
    //(偏移、数字)*/
    {0、2}、//添加了2017年4月26日 Jeff Limbocker -保留 McASP DMA 参数插槽(0和1)
    {8、6}、
    {24、
    {30}、{30}、 50}、
    {-1、-1}
    }}; 

    尽管这应该是缺失的步骤之一。  这次软件加载时、我确实听到了一个弹出消息、因此这是一个改进!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最新的结果是、当在 Linux 处于活动状态时加载代码(或者在 GEL 文件未加载时)、McASP 似乎处于复位状态。 如果我不引导 Linux、则可以加载 ARM 内核的 GEL 文件、DSP 代码会成功执行。
    工作时、McASP GLBLCTL 寄存器为0x00001C18。 当不起作用时、寄存器为0x00000000。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    发现可能的问题。 McASP 示例代码和 Linux 配置之间的 ASYNC3_CLKSRC 位设置存在差异。 这似乎表明了为什么 McASP 寄存器未被正确设置-外设时钟可能未被正确设置。 我正在尝试找出这对其他系统组件的影响。

    导致这一发现的原因是通过 JTAG 加载 Linux、然后加载 DSP 应用。 然后、我单步执行代码并找到它将跳转到空闲循环的所有位置。 它们似乎都与访问时钟配置有关。

    它看起来会导致问题吗? 至少似乎解释了这两种设置之间的差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是潜在的问题、因为该位选择是使用 PLL0_SYSCLK2还是 PLL1_SYSCLK1为 MCASP 状态机计时。

    要查看时钟关系发货、请参阅此处提供的时钟电子表格:
    processors.wiki.ti.com/.../AM18xx

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用电子表格(对于 PLL0、PLL1和 McASP)检查时钟结构后、进入器件的时钟似乎没有问题。 PLL1_SYSCLK2和 PLL0_SYSCLK2在两种测试设置中都产生相同的时钟速率。 Linux 和独立 DSP 代码都以相同的方式配置 PLL。 所以我认为这不是问题。

    我发现 PSC 未正确设置。 这首先被忽略、因为并非所有模块状态寄存器都在 CCS 的"register"视图中可见。 现在 PSC 设置正确、但设备仍无法传递数据。 尽管如此、似乎 DSP 实际上是在启动的、因此我可以认为这个主题已经结束了。