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.

[参考译文] AM5716:SPI 读取功能花费的时间太长

Guru**** 2696775 points

Other Parts Discussed in Thread: AM5716

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1592908/am5716-spi-read-func-costs-too-long-time

器件型号: AM5716

尊敬的 TI 专家:

我们使用一个测试任务、该任务在 AM5716 的 DSP (C66) 内核中运行。 我们调用 SPI 读取来读取 16 字节、ocmc-ram、非 DMA 模式、SPI 总线时钟为 12MHz。 该公司的费用为 225us。 时间太长了、您能找出原因吗?

cdcb14f323a53ace79481bdbf246084e.png

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

    你好、 liying 、

    在我们提供帮助之前、能否说明正在使用的软件和版本? 我假设您在这里使用的是 TI RTOS?

    -Josue

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

    您好、Josue、

    RTOS SDK:processor_sdk_rtos_am57xx_6_03_00_106

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

    您好 Josue、

    RTOS 中运行两个任务:
    1.一个任务负责初始化 SPI1 和 W5500、并设置 1ms 计时器。


    2.另一个任务等待计时器中断发布信标、然后通过 SPI1 从 W5500 读取寄存器。
    SPI 模块使用 DMA 库:/root/ti/pdk_am57xx_1_0_17/packages/ti/drv/spi/lib/am571x/c66/release/ti.drv.spi.dma.ae6

    SPI 使用的 TX 和 RX 缓冲区地址如下:

    #define CSL_DSP_OCMC_RAM1_REGS (0x40300000U)
    Uint8_t *txBuffer =(uint8_t *)(CSL_DSP_OCMC_RAM1_REGS +0x1000);
    uint8_t * rxBuffer =(uint8_t *)(CSL_DSP_OCMC_RAM1_REGS +0x6000);

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

    LIN、  

    我必须将您的问题推迟到我们的 TI-RTOS 工程师。 请共享您的 C66 配置。 因为这很可能是其中一个因素。

    此致、

    Josue

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

    测试代码:

    void spiw5500_recvtestTaskFxn (UArg arg0UArg arg1){
      信标_pend (w5500_init_done、bios_wait_forever);//阻塞等待信号量
      set_local_netinfo()

      INT START = 0
      INT END=0
      Types_Freq 频率
      timestamp_getFreq (&freq);

      while (1){
        信标挂起 (w5500_dataSem、bios_wait_forever);
        GPIO_WRITE (161);
        start =Timestamp_get32 ();
        uint8_t GW[4]SN[4]、sip[4]
        //uint8_t mac[6];
        //getSHAR(Mac );
        getGAR (GW); getSUBR (SN); getSIR (sip);getGAR (GW);
        end =Timestamp_get32 ();
        GPIO_WRITE (160);
        printf(“TIMER ISR、time =%d、c %d\n“(end-start)/(freq.lo/1000000)IRQ_COUNT)
    //  printf(“MAC:%02x:%02x:%02x:%02x:%02x:%02x:%02x\r\n“、Mac[0]、Mac[1]、Mac[2]、Mac[3]、 MAC[4]、MAC[5]);
    //  printf(“GW:%d.%d.%d\r\n“、 GW[0]、GW[1]、GW[2]、GW[3]);
    //  printf(“Sn:%d.%d.%d\r\n“、 SN[0]、SN[1]、SN[2]、SN[3]);
    //  printf(“sip:%d.%d.%d.%d\r\n“、sip[0]、sip[1]、sip[2]、sip[3]);
      //TASK_SLEEP (1);
      }
    }μ s
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你 Lin。  

    TI-RTOS 工程师可尽快为您提供帮助。

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

    嗨、zekun、Josue、

    当前状态为 DMA 模式。 此时读取 4B 数据需要 69 微秒、并且没有其他任务同时运行。


    目标是将读取 24B 数据的时间减少到 50 微秒、并将当前任务设置为最高优先级、使其不会被其他中断或其他任务中断。 请帮助检查是否有方法来优化 SPI 库。

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

    您好 Lin、
    我正在处理这个问题 、我将会回复您。

    此致、

    Karthik

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

    您好、Karthikean S、

     任何更新?

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

    您好 Lin、

    很抱歉、延迟的回复。

    目标是将读取 24B 数据的时间减少到 50 微秒、并将当前任务设置为最高优先级、使其不会被其他中断或其他任务中断

    您能否确认是否尝试过在 RX 路径上使用轮询而不是中断? 如果可行、请尝试采用轮询方式、并告知我们观察到的时间。

    此致、

    Karthik