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.

[参考译文] TMS320F28377D:关于 GPIO 延迟

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1116780/tms320f28377d-about-gpio-delays

器件型号:TMS320F28377D

各位专家、您好!

我的客户使用 F28377D 创建了电路板、但我发现 GPIO 行为不清楚。

问题1:我们注意到 GPIO 输出存在延迟、这是否是预期行为?
问题2:如果以下用法不是问题、是否有任何方法可以消除延迟?
Q3:如果无法缩短延迟时间、您能否分享有关延迟的规格(时间规格)?


[详细信息]
他们通过仅使用在 RAM 上运行的 CPU1而不使用中断来检查这一点。 它们分别使用 GPIO11、12、13来写入设置/清除、切换和 DAT 寄存器、然后读取 EMIF1一次以等待时间(1us)。
随附了总体波形和 GPIO11 =低电平到高电平部分的放大版本。 对于这两个端口、C 源和汇编器输出显示 EMIF1读取前的 GPIO 输出、但波形显示的是按照该顺序在 GPIO 输出前读取 EMIF1。

   

这个结果表明 GPIO 输出始终存在延迟、但是请告诉我是否还有其他需要检查的点或需要添加或更改的条件。

我们还想检查 CPU2和 CLA 是否存在冲突和延迟、但如果您可以先回答上述问题、那将会有所帮助。

此致、
还不错

e2e.ti.com/.../gpio_5F00_test.c

e2e.ti.com/.../gpio_5F00_test.asm.txt

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

    您好!

    根据 F2837xD 数据表(第8.9.6.1节)第74页上 GPIO 的时序规格、将 GPIO 从低电平更改为高电平或从高电平更改为低电平的最大延迟为8ns。 如果您使用闪存运行程序、该时间可能会更长。 这种延迟无法消除、因为微控制器将始终具有一些物理延迟、以便信号从程序存储器传输到外设。

    此致、

    Omer Amir

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

    您好  Omer Amir、

    感谢您的及时响应。 抱歉。 我的解释是不够的。

    我了解到输出开关(低到高、低到高)为8ns。

    但是、这次的问题是、从写入寄存器到它反映在物理输出中有一个延迟。 如图所示、这意味着寄存器操作后至少有146ns 的延迟。 (输出在 EMIF 命令被发送后被切换。)  顺便说一下、对于程序、它在 RAM 中运行。

    您能否再次回答有关 Q1、2和3延迟的问题?

    此致、
    还不错

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

    您好、再说一次、

    如果您正在讨论程序写入寄存器的延迟并查看其中的值、这是一个与代码相关的延迟。 此延迟可能由 CPU 流水线引起(如下所示)。 在_GPIO_TEST 汇编代码的第8行和第9行中,“OR”实际上是一个写操作,它将在流水线中最后发生。  下一条指令“MOV”是读取,即使在“或”之后提取,也会在写入之前发生。  由于您是从外部接口读取数据、因此始终比 CPU 时钟速率慢得多、并且会显示您看到的延迟。

    由于 GPIO 寄存器或 EMIF 地址范围内没有重叠、因此无需管道来保护写入、使其在 XINTF 读取之前执行。 如果要测试此情况、可以插入一些 NOP、大约3个 NOP 应该足够、写入/读取指令之间应允许首先进行写入。

    此致、

    Omer Amir

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

    您好  Omer Amir、

    [~引脚 userid="515979" URL"μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1116780/tms320f28377d-about-gpio-reimes/4140967#4140967"]

    如果您正在讨论程序写入寄存器的延迟并查看其中的值、这是一个与代码相关的延迟。 此延迟可能由 CPU 流水线引起(如下所示)。 在_GPIO_TEST 汇编代码的第8行和第9行中,“OR”实际上是一个写操作,它将在流水线中最后发生。  下一条指令“MOV”是读取,即使在“或”之后提取,也会在写入之前发生。  由于您是从外部接口读取数据、因此始终比 CPU 时钟速率慢得多、并且会显示您看到的延迟。

    由于 GPIO 寄存器或 EMIF 地址范围内没有重叠、因此无需管道来保护写入、使其在 XINTF 读取之前执行。 如果要测试此情况、可以插入一些 NOP、大约3个 NOP 应该足够、写入/读取指令之间应允许首先进行写入。

    [/报价]

    感谢您的回答。 我明白了。

    [引用 userid="402494" URL"~μ C/support/microrims/C2000-microrims-group/C2000/f/C2000-microriers-forum/1116780/tms320f28377d-about-gpio-re延 时"]我们还想检查 CPU2和 CLA 是否存在冲突和延迟、但如果您能先回答上述问题、会有所帮助。

    当发生 GPIO 相关寄存器运行时间争用时、让我确认延迟、延迟时间和优先级的操作。

    该寄存器本身为32位宽、可设置为32个端口。

    Q4:例如、如果 GPIO11的主器件是 CPU1、GPIO12的主器件是 CPU2、那么 CPU1的 GPIO11访问和 CPU2的 GPIO12访问之间是否会发生冲突?

    问题5:例如,如果 GPIO11的主器件是 CPU1,GPIO41的主器件是 CPU2,那么如果寄存器不同,如 GPa*寄存器和 GPB*寄存器,是否没有冲突?

    Q6:或者是否所有到 GPIO_DATA_reg 中所有寄存器的访问都发生冲突?

    如果发生冲突、了解具体的延迟行为、延迟时间和优先级将会很有帮助。

    此致、
    还不错

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

    您好!

    [引用 userid="402494" url="~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1116780/tms320f28377d-about-gpo-dimes/4143881#4143881]Q4:例如、如果 GPIO11的主站是 CPU1、并且 GPIO12的主站和 GPIO12的主站之间存在冲突]

    不、没有冲突、因为每个 CPU 都有自己的数据寄存器。

    [引用 userid="402494" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1116780/tms320f28377d-about-gpo-dimes/4143881#4143881]Q5:例如,如果 GPIO11的主站是 CPU*,并且 GPIOB*寄存器不存在冲突,则 GPIOB*寄存器会与 GPIOB*寄存器发生冲突。]

    否。与 Q4相同。

    [引用 userid="402494" URL"~μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1116780/tms320f28377d-about-gpio-reelses/4143881#4143881"] Q6:或者是否所有到 GPIO_DATA_regs 中所有寄存器的访问都发生冲突?]

    此致、

    Vivek Singh

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

    尊敬的  Vivek Singh:

    [引用 userid="19481" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1116780/tms320f28377d-about-gpio-reaches/4144490#4144490"]否,没有冲突,因为每个 CPU 都有自己的数据寄存器。

    我了解到使用"GPxSET、GPxCLEAR、GPxTOGGLE 寄存器"将不会有冲突。 或者、您所指的寄存器与上面的"他们自己的数据寄存器"不同吗?

    此致、
    还不错

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

    不、我只是指这些寄存器。 您感兴趣的是哪些寄存器?

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

    尊敬的  Vivek Singh:

    您能否再次解释 CPU1访问 GPIO11和 CPU2访问 GPIO12之间没有冲突的原则(换句话说,GP*寄存器不会冲突),如果 GPIO11的主设备是 CPU1,GPIO12的主设备是 CPU2?

    此外、如果您可以使用 TRM 和其他文档中的名称来解释"他们自己的数据寄存器"、那将会很有帮助。

    因为 我们的理解可能存在差异。

    此致、
    还不错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="402494" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1116780/tms320f28377d-about-gpo-dimes/4148036#4148036"]您能否再次解释 CPU1*和 GPIO12*主站之间的 GPIO11访问之间没有冲突的原则,如果 GPIO12*主站和 GPIO12*的 GPIO12*主站之间没有冲突,请解释。

    两个 CPU 都有自己的 GPIO 数据寄存器的物理副本、并且这些寄存器的输出是基于 CPUSEL 的多路复用的、该输出在 GPIO 引脚上被驱动。 由于它们有自己的寄存器物理副本、CPU 写入它们自己的寄存器、因此没有冲突。 请参阅"图8-1。 器件 TRM 中的"单引脚的 GPIO 逻辑"、清楚地显示了这一点(下图是该图的快照)。

    此致、

    Vivek Singh

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

    尊敬的  Vivek Singh:

    感谢您的盛情款待。 我明白了。 如果客户有其他问题、我们将再次与您联系。

    此致、
    还不错