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.

[参考译文] EK-TM4C123GXL:可能的最短"WAIT"时间?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/598805/ek-tm4c123gxl-shortest-possible-wait-time

器件型号:EK-TM4C123GXL

大家好、有一个关于使用 TM4C123G 可以"等待"最短时间的问题。  处理器可配置为以80MHz 的最大速度运行、方法如下:

(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);

...我知道的最短的"等待"方式是使用:

SysCtlDelay(1); 

因此、如果处理器以80MHz 的频率运行、这意味着每周期12.5纳秒。  但是、显然一行代码需要多个周期才能执行、如果我理解正确、汇编指令需要多个周期才能执行。  对于 SysCtlDelay(1)代码行的汇编是值得的:

SysCtlDelay(1);
0000057a:2001   MOV R1、#1
0000057c:F000F958 BL  #0x830

SysCtlDelay():
00000830:1E40   subs r0、r0、#1
00000832:D1FD   bne SysCtlDelay
00000834:4770   BX  LR

我为代码段计时的方式是切换连接到逻辑分析仪的引脚。  示例代码:  

while (1)

  GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_7、0x80);
  SysCtlDelay(1);
  GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_7、0x00);
  SysCtlDelay(1);

^这只是简单地将 PA7引脚设置为高电平、然后通过尽可能短的等待时间将其设置为低电平。  使用我的逻辑分析仪测量该值时、我看到引脚处于高电平280纳秒、然后处于低电平360纳秒。  我想这似乎是对的、同意吗?  这意味着上面的小组装块、加上打开/关闭引脚所需的任何组装大约需要几百纳秒、或者按周期计算、~300/12.5 =~24个周期。

只是想知道我这里的分析是否正确、以及是否有其他方法等待几百纳秒以上的较短时间?

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

    抱歉、我错误地嵌入了上面的前两段代码片段、似乎我无法编辑。  这两个代码片段是:

    (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);

    SysCtlDelay(1);

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

    [引用用户="Terence D"]…… 打开/关闭插针...  是否还有其他方式等待更短的时间...? [/报价]

    我将你们的两句话合并在一起、以说明我认为不清楚的地方。    您可能会寻求:

    • 可实现的最高 GPIO 切换速度
    • 或创建最短的"等待(延迟)"

    最高切换速度是由于在其 PWM 输出模式中使用 MCU 定时器而产生的-这应该接近"F_System_Clock"的1/2。

    为了实现一致和(甚至)更短的"延迟"、通常设置为"单次触发"或"周期模式"的计时器似乎最能满足这一需求。

    请注意、如果您"背靠背"您之前的"4个函数调用"-例如乘以系数5 (因此会产生20个代码行)、则"while"的影响将会降低、切换率会提高...

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

    CB1 -感谢您的快速回复!  抱歉、我应该更清楚。  让我对我所追求的目标进行正确的切面。

    如果您愿意、请回想 一下最近的这个主题、您非常亲切地向我提供了有关 LCD 显示屏的建议、并推荐 了 NHD-14432WG-ATFH-V#T-ND 、我在几天前就立即购买并收到了该主题、现在正尝试开始工作。

    我目前正在努力解决 的是数据表第8页所示时序图上的时序问题。  "使能脉冲宽度"、"Tpw"的宽度仅为140纳秒。  我是不是误解还是误解了这一点?  我不确定我应该如何实现这样一个简单的低电平到高电平从低电平转换。

    有什么想法吗?

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

    [报价 USER="Terence D">目前我所遇到的困难是 数据表第8页所示时序图上的时序。  "使能脉冲宽度"、"Tpw"的宽度仅为140纳秒。  我是否误解或误解了这一点?[/引述] NHD-14432WG-ATFH-VT 数据表中的时序表令人困惑、因为它们缺少列标题以指示哪个列是最小值、典型值或最大值:

    传统上、第一列数字是最小值、第二列是典型值、第三列是最大值。

    如果您按照 ST7920控制器数据表的链接操作、 ST7920数据表将时序显示为:

    这意味着"使能脉宽"脉冲的宽度需要大于或等于140纳秒。 即、您可以生成超过140纳秒的"启用脉冲宽度"。

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

    不要推翻这里的其他评论,因为这些评论与"真正的问题"更为相关,只需添加一个直接的答案:

    保证 SysCtlDelay()的 ROM_版本需要3个 CPU 周期。

    当然、它仍然是不确定的、因为您永远不能确定您的处理器是否正在执行其他操作、例如在这段时间内提供 ISR。。。。 (嗯、实际上、你可以关闭全局中断-但这最终会在其他地方引起问题)。

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

    [引用用户="Chester Gillon"]

     NHD-14432WG-ATFH-VT 数据表中的时序表令人困惑、因为它们缺少列标题、以指示哪个列是最小值、典型值或最大值:

    这意味着"使能脉宽"脉冲的宽度需要大于或等于140纳秒。 即、您可以生成超过140纳秒的"启用脉冲宽度"。

    [/报价]

    哦!  谢谢、Chester。  我查看了 ST7920数据表、但错过了文档末尾(第40页、共49页)附近的表格。

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

    [引用用户="Bruno Saraiva]Terence、

    不要推翻这里的其他评论,因为这些评论与"真正的问题"更为相关,只需添加一个直接的答案:

    保证 SysCtlDelay()的 ROM_版本需要3个 CPU 周期。

    当然、它仍然是不确定的、因为您永远不能确定您的处理器是否正在执行其他操作、例如在这段时间内提供 ISR。。。。 (嗯、实际上、你可以关闭全局中断-但这最终会在其他地方引起问题)。

    布鲁诺

    [/报价]

    谢谢、Bruno。  我想知道您在哪里找到此信息?  此外、我想知道您或其他人可能建议使用哪些书籍或其他文档来更好地了解 ARM Cortex-M4的工作原理?

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

    [引用 user="Terence D">谢谢您,Bruno。  我想知道您在哪里找到此信息?

    SW-TM4C-DRL-UG (用户指南)的输入"26.2.2.10 SysCtlDelay"、第493页、可在 TivaWare 安装的/docs 文件夹中找到。

    这是708页非常有趣的内容。 完成此操作后、请阅读 utils 指南以及同一文件夹中的其他文档-比阅读"再次出色"的最佳卖家要好得多...