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.

[参考译文] CCS/TMS320C6748:C6748 McASP0 CPU 访问时间

Guru**** 2609955 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/583501/ccs-tms320c6748-c6748-mcasp0-cpu-access-time

器件型号:TMS320C6748

工具/软件:Code Composer Studio

降级器、

我正在使用配置为 I2S 格式的 McASP0开发实时应用(基本 C 和 ASM 代码、没有系统 BIOS、没有 Linux)。

我的代码运行良好、达到 了3GFLOPS 性能 、但我对 CPU 访问时间有疑问、可以读取 McASP Rx/Tx 缓冲区的数据或将其写入到 McASP Rx/Tx 缓冲区中。  我使用控制总线访问串行器地址、SYSCLOCK2设置为228MHz、McASP HF 时钟设置为24MHz。

代码使用 McASP 事件为执行读取和处理数据的 CPU 中断提供服务(示例方法)。

问题 是:指针

  1. CPU 将时间写入 R/W McASP 串行器( 代码中的一个指针地址 R/W 指令)
  2. 控制 并将其减少到最短时间的方法是什么?

我使用 GPIO 引脚设置/取消设置和 示波器测量了访问时间。 在运行频率为456MHz 的 C6748上、GPIO 设置/取消设置标志持续时间约为20ns。

因此、当我测量 McASP 中断例程中一个 RXbuff 的读取过程时、我发现150ns!!! 当我 µs 4个串行器并写入2个其他串行器时、R/W 的总时间约为1 μ s、与采样周期(小于10µs μ s)相比太长。

例如、我通过相同的过程测量了 SPI1写入、发现小于60ns 对我来说很好。

请问 如何缩短 McASP 串行器的访问时间?

此致

Benoit

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

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

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

    C674x DSP 内核在执行指令和访问其 Megamodule 边界内部 L1/L2存储器内的数据时非常高效。 当它超出该边界时、需要更多的时钟周期来访问外设和外部存储器。 外设(控制)总线的效率低于存储器总线、因为它旨在确保在下一个操作发生之前完成每个操作-不会发生流水线、因此性能会变慢。

    EDMA3被添加到系统中以处理外设和存储器访问、并且它可以在不降低 DSP 速度的情况下完成所有这些操作。

    您已经通过基准测试回答了自己的问题#1、尽管 GPIO 标志操作实际上会影响总时序、因为它们也使用非流水线外设总线。 我实际上感到惊讶的是、您生成了一个20ns 的 GPIO 脉冲。 这听起来很快速。 如果您连续尝试切换引脚10次、您会很感兴趣地看到得到什么结果。

    对于#2、答案是使用 EDMA3设置与 McASP 之间的传输。 最有效的方法是将多个样本读入一个或多个缓冲区、并在缓冲区被填满时向 DSP 发送中断。 然后、在 DSP 处理第一个缓冲区中的数据时、EDMA3将开始填充第二个缓冲区。

    CSL 库应包含您可以测试的示例、以了解如何使 DMA 通道适用于您的应用。 您可能还需要在 TI.com 上搜索"C6000嵌入式设计技术讲座"(无引号)并浏览其中的材料。 使用 SYS/BIOS 或最新的 TI-RTOS 不会影响您的处理代码的性能-当您不需要时、它会妨碍您的工作、并且为您提供了一种设置某些系统功能(如中断)的简单方法。 它不是使用 CSL 所必需的、但是一个使事情快速工作的好工具。 如果您对非操作系统代码满意、当然也没关系。

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

    尊敬的 Randy

    感谢您的回答。

    我的问题#1是关于使用 CTRL 或数据总线进行 McASP 访问可访问的最短访问时间。 我的测量值大约为150ns、这个值让我感到惊讶(太大)。 您确认这些值 是因为这些总线是低速交换总线。

    我在中断子例程(C 代码、当然不是流水线型)中执行了切换10次 GPIO 引脚设置/取消设置的测试。 结果是  脉冲方波、其上电 时间为26ns、下电时间为26ns。 GPIO 置位/未置位指令消耗26ns、即 40MHz CPU 时钟 (我宣布20ns)。

    我注意到使用 EDMA3加快 McASP 和 CPU 代码之间的数据传输。 我将尽快对此进行测试、以检查我的应用中的整体时间增益。

    在我的应用中、整体输入/输出延迟至关重要、可减少到一个或两个样本(10µs μ s 采样周期的目标小于50µs μ s)。 为此、我选择执行每个样本的采样处理(如旧的 DSP 代码)。 我知道这种方法不是实际推荐的方法、因为它会将每个样本的 I/O 任务相乘、 但我认为这是减少延迟的唯一方法。 使用带有 EDMA 的缓冲器将减少为一个样本、我将测试 EDMA 是否也通过这种方式有效。

    我还选择使用非 RTOS 或 SYS/BIOS 来最大限度地增加 CPU 资源以用于我的处理、但开发时间很长(6个安装版本)、无法了解所需的所有内容。 最终代码是通过明智的代码实施(以指导编译器进行流水线)、 使用 pragma 和快速 L2/L1存储器映射、使用带有 关键任务流水线的 ASM 函数在 C 语言中开发的。 结果是在我的程序内核中快速执行代码、其性能接近2.5GFLOPS ( 需要算术和存储器 R/W 指令之和 除以执行时间)。

    我将向您通报 EDMA 在我的案例中的使用结果。

    此致

    Benoit