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.
各位专家、您好!
我的客户使用 F28377D 创建了电路板、但我发现 GPIO 行为不清楚。
问题1:我们注意到 GPIO 输出存在延迟、这是否是预期行为?
问题2:如果以下用法不是问题、是否有任何方法可以消除延迟?
Q3:如果无法缩短延迟时间、您能否分享有关延迟的规格(时间规格)?
[详细信息]
他们通过仅使用在 RAM 上运行的 CPU1而不使用中断来检查这一点。 它们分别使用 GPIO11、12、13来写入设置/清除、切换和 DAT 寄存器、然后读取 EMIF1一次以等待时间(1us)。
随附了总体波形和 GPIO11 =低电平到高电平部分的放大版本。 对于这两个端口、C 源和汇编器输出显示 EMIF1读取前的 GPIO 输出、但波形显示的是按照该顺序在 GPIO 输出前读取 EMIF1。
这个结果表明 GPIO 输出始终存在延迟、但是请告诉我是否还有其他需要检查的点或需要添加或更改的条件。
我们还想检查 CPU2和 CLA 是否存在冲突和延迟、但如果您可以先回答上述问题、那将会有所帮助。
此致、
还不错
您好!
根据 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 和其他文档中的名称来解释"他们自己的数据寄存器"、那将会很有帮助。
因为 我们的理解可能存在差异。
此致、
还不错
两个 CPU 都有自己的 GPIO 数据寄存器的物理副本、并且这些寄存器的输出是基于 CPUSEL 的多路复用的、该输出在 GPIO 引脚上被驱动。 由于它们有自己的寄存器物理副本、CPU 写入它们自己的寄存器、因此没有冲突。 请参阅"图8-1。 器件 TRM 中的"单引脚的 GPIO 逻辑"、清楚地显示了这一点(下图是该图的快照)。
此致、
Vivek Singh
尊敬的 Vivek Singh:
感谢您的盛情款待。 我明白了。 如果客户有其他问题、我们将再次与您联系。
此致、
还不错