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.

[参考译文] TMS570LC4357:TMS570LC4357:HAL 代码发生器 example_mibspiDMA 扩展为4 mibSPI、每个都有1个传输组(第一个周期的周期时间与以下所有周期不同)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1057627/tms570lc4357-tms570lc4357-hal-code-generator-example_mibspidma-extended-to-4-mibspis-with-1-transfer-group-each-cycle-time-for-first-cycle-differs-from-all-following-cycles

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

测量所有 MibSPI 从 DMA 传输开始到结束的周期时间显示为1、8ms。 测量从 DMA 传输开始到结束的后续周期的周期时间显示为3、0ms。 请参阅以下代码。 在初始化阶段之后、代码进入一个 while (1)循环。 在此循环中、将 HBC 标志考虑在内、所有4个 MibSP 都将连续启动。 开始时、PWM 信号设置为100%占空比、并且在所有 DMA 通道完成传输后、PWM 信号设置为1%占空比。 100%占空比通过数字存储示波器进行测量。 对于第一个 while 环路周期、可以测量1、8ms。 但对于所有后续 while 环路周期、测量值为3、0ms。 有没有人知道为什么会有这样的差异?

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* USER CODE BEGIN (0) */
/* USER CODE END */
/* Include Files */
#include "HL_sys_common.h"
/* USER CODE BEGIN (1) */
#include "HL_mibspi.h"
#include "HL_sys_dma.h"
#include "HL_het.h"
#include "HL_reg_het.h"
/* example data Pattern configuration */
#define D_SIZE 128
#define BUFFER_SIZE 1024
void loadDataPattern(uint32 psize, uint16* pptr);
void mibspiEnableInternalLoopback(mibspiBASE_t *mibspi);
void dmaConfigCtrlPacket(uint32 sadd,uint32 dadd,uint32 dsize);
void mibspiDmaConfig(mibspiBASE_t *mibspi,uint32 channel, uint32 txchannel, uint32 rxchannel);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好 Raheem、

    我尝试在我的 Launchpad 上测试您的代码、但它在等待 DMA 标志时挂起。 我将在完成测试后返回给您。  

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

    您好 Raheem、

    我注意到您的代码使用 DMA 打包和解包功能。  由于外设速度较慢、因此建议使用数据打包功能、并在 从外设读取数据时务必小心谨慎。

    我将读取元素大小和写入元素大小配置为16、帧大小为128元素、并为每个 MibSPI 传输1个帧。 我的测试表明:

    第一个循环:4174us

     2.第二个循环:4174us

    3.第3个循环:4172us

    4.第4个循环:4173us。

    附件是我用于 TMS570LC43x 器件的有效 CCS 项目:

    e2e.ti.com/.../TMS570LC4357_5F00_MibSPI_5F00_DMA_5F00_Execution_5F00_Time.zip

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

    您好 Qj、

    感谢您的回复。

    我根据您的提示更新了 Projekt。 请在下面找到带有 main()函数的更新文件。 不幸的是、正如您在下面的图片中看到的、我仍然遇到执行时间问题。 我将周期时间记录到名为 cyclesTemp 的数组中。 您可以看到、周期时间从较高的周期通量开始、然后下降到一个 smaler 周期时间、然后以较高的周期时间再次开始、再下降到 smaler 周期时间。 这种行为似乎是循环的。 main()函数中是否有任何原因导致此行为? 我还发现、在 DMA 控制 pakets 的实际配置中、RXDATA 缓冲区中的数据与 TXDATA 缓冲区不匹配。 370行中的编码检查失败。

    测试您的 CCS 项目启动后、它不会传输长度为1024字的 TXDATA 缓冲区的整个内容。 将其更新为将1024字的整个长度 Leeds 传输到上述相同的问题。 您能否扩展项目以传输 TXDATA 缓冲器的整个长度并测量周期时间?

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /* USER CODE BEGIN (0) */
    /* USER CODE END */
    /* Include Files */
    #include "HL_sys_common.h"
    /* USER CODE BEGIN (1) */
    #include "HL_mibspi.h"
    #include "HL_sys_dma.h"
    #include "HL_het.h"
    #include "HL_reg_het.h"
    #include "HL_sys_pmu.h"
    /* example data Pattern configuration */
    #define D_SIZE 128
    #define BUFFER_SIZE 1024
    void loadDataPattern(uint32 psize, uint16* pptr);
    void mibspiEnableInternalLoopback(mibspiBASE_t *mibspi);
    void dmaConfigCtrlPacket(uint32 sadd,uint32 dadd,uint32 dsize);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="499929" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1057627/tms570lc4357-tms570lc4357-hal-code-generator-example_mibspidma-extended-to-4-mibspis-with-1-transfer-group-each-cycle-time-for-first-cycle-differs-from-all-following-cycles/3915053 #3915053"]此外,我还发现,使用 DMA 控制 pakets 的实际配置,RXDATA 缓冲区中的数据与 TXDATA 缓冲区不匹配。

    您的 HALCoGen 项目中是否启用了 Cortex-R5高速缓存?

    在   、缓存被禁用:

    在 MPU 中启用缓存并将 SHAREDRAM 存储器区域标记为可缓存、可能会产生以下影响:

    a.读回与 TXDATA 缓冲区不匹配的 RXDATA 缓冲区。 读取 TRM 我还不确定 DMA 是否支持硬件高速缓存一致性。

    B.周期时间各不相同。

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

    您好 Raheem、

    我将帧计数(F_COUNT)更改为8、以传输具有1024个半字的数据块、我注意到执行时间的差异。  

    如果 F_COUNT = 1、则传输块块1、块2、...的时间 块10)是相同的。

    如果 F_COUNT = 4、则传输时间从块1减少到块4。 块#5的传输时间回到块#1的时间

    如果 F_COUNT = 8、则传输时间从块1减少到块8。 块#9的传输时间回到块#1的时间

    我不确定导致这种行为的原因、稍后我将做更多的研究和测试。

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

    您好 QJ、

    感谢您的回答。 这也正是我观察到的情况。 我很想了解您的发现。 我禁用了高速缓存、因为周期时间仍然不同。

    非常感谢你的帮助。