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.

[参考译文] TM4C1294NCPDT:从引脚触发周期定时器

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/597781/tm4c1294ncpdt-trigger-periodic-timer-from-pin

器件型号:TM4C1294NCPDT

我想在对引脚施加电压时在 TM4C 上启动周期性计时器。 具体应用是在到达基于 GPS 的 PPS 信号时启动10Hz 计时器。  我不想通过从 ISR 调用 start()来启动计时器,而是要设置周期计时器,并在边沿到达时准备好在硬件中启动。 我怀疑这很简单、但我找不到。

虽然我更喜欢直接方法、但我可以考虑其他一些方法:

1)测量2 PPS 之间的值、计算下一个 PPS 的到达值、并在(已在运行)自由运行的定时器上设置一个事件、该事件将触发周期定时器的启动。 是否可以在已经运行的计时器上设置事件?  该事件是否可以启动新计时器?

2) 2)将计时器设置为边沿计数器模式、以在1个边沿(PPS)后触发事件、并使用该事件(希望不需要从硬件跳转到软件)启动周期性计时器。 可能吗?

3)其他一些白南、包括测量延迟、模糊、模糊、并在经过几秒调整后在正确的开始时间稳定、

4) 4)等等

我主要在 RTOS 6.16中工作、但我希望需要使用 ROM 库或插入寄存器。

如果有任何建议、无论是具体的解决方案还是指向方法的指示、我都将不胜感激。

谢谢、

Bob  

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

    Robert、

    一种可能的 shenanigan 是尝试等待触发模式... 我从未使用外部信号对其进行过测试...

    想法是:将您的传入 GPS 信号配置为 TIMER_N 的 TCCP 输入引脚、该引脚配置为边沿计数模式、配置为单个边沿。

    将10Hz 计时器配置为在 TIMER_N+1上等待触发。

    我不确定单个脉冲输入将是第一个触发第二个计时器的有效"超时"、但这是可能的。

    我看到的另一个选择是实际测量几个连续 PPS 之间的时钟速率(您确实每秒得到一个、不是)、并执行一系列链计算: 您可以读取 PPS 到达的确切时刻、再次在边沿时间模式下使用 TCCP、或者"假设"您的 MCU 时钟精确(例如120,000,000等于 一秒)、或者对其进行校准。 然后进行一些数学运算并计算同步计时器的到期值(是的、此描述必须说明...)

    哦、另一个:测量 ROM_GPIOPinRead 加 TimerEnable 所花费的周期、并从第一个配置中减去该周期-在第一次运行时轮询 GPIO 信号... (不过、您如何信任您的 MCU 时钟是精确的? 您是否计划在该频率之后具有连续10Hz 脉冲? GPS PPS 和 MCU 最终将不同步、不同步?

    祝您好运!

    布鲁诺

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是另一个怪异而富有创意的示例:
    -在您的 PIN 中配置 GPIO 中断,并将 DMA 与之关联。
    -作为 DMA 的原始字节,创建一个反映启用定时器控制寄存器的常量值。
    -对于 DMA 的命运,定义定时器控制寄存器地址。
    -将 DMA 设置为内存到内存的传输。
    DMA 将由 GPIO 中断触发、并将启用的值加载到计时器中、它应开始运行。
    (不知道这是否可行、理论上应该...)
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    布鲁诺:

    感谢您的建议。 我一直在想、按照您的第一条建议(边沿计数器+等待触发器)、除非我听到其他一些更简单的想法、否则可能会尝试类似的方法。

    无论触发机制如何运作、我都要进行一些计算和校准- GPS 的 PPS 中有一些抖动、我们各种系统上的振荡器不是完全准确。

    我将尝试在制定结果时发布我的结果。

    我一直认为这是对 MCU 计时器的明显要求(但这可能只是工作中的可用性启发法。)

    Bob
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我尤其对 DMA 的想法感到兴奋... 配置并不是太复杂、应该是一个1周期的过程、可能是2...
    稍后可能会尝试。
    我同意外部脉冲触发器应该是定时器的常用功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Robert Cram"]我不想通过从 ISR 调用 start()来启动计时器

    我还读取了这个请求-在通过计时器 API 进行搜索之后-注意到"等待触发"。    (尚未有执行或使用此类操作的经验...)

    然而、我会问:"为什么(显而易见的)"在所选 GPIO 上检测信号边沿-导致 ISR (立即)启用(已完全配置的)计时器)被认为是不可取的?    这种方法肯定会起作用- ISR 可能会被授予最高优先级-有什么异议?

    有人想知道海报是否"错过"了这样一个事实、即所选的定时器可能已完全配置完毕、准备就绪、并等待通过进入(可怕的) ISR 立即启动简单的"执行"!

    事实证明,这种"海报限制"永远没有解释,也没有道理。    (因此最常见-不合理且没有什么优点!)

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

    CB1、

    尽管分配了优先级、但 ISR 的使用是完全不确定的。

    您可以在脉冲期间为另一个 ISR 提供服务-然后、您的计时器运行将仅在完成后发生-在这种情况下不是一个选项。

    布鲁诺

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

    [引用用户="Bruno Saraiva"] ISR 的使用完全是不确定的,

    "情感"是否会导致您"达尔登式"完全"使用?   (如果"血腥手套"不合适、该怎么办?   那么呢?)     请允许我提交此 ARM 文档-它似乎"完全违反"您的"要求!"   (似乎(先前)"正确"获得的经验教训尚未"沉降"。)     "确实如此-确实有含义!"

    请注意、此处提供了这样的"尾链"!    我会发现并展示"占先"、这在这里也很重要...   

    并且-是否可以(真正)将每个竞争方法的标题授予 "确定性?"    海报和您(或我)都没有实施/探索-您的"吸管人"论点可能有漏洞...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    定时器是否不支持捕捉模式? 在 ipps 1处、有很多时间为捕获提供服务。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CB1、它使我确定性不是由 H/W 确定的(因此可以说)、而是由中断禁用和更高优先级中断的存在所限制。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Robert -我"害怕"尝试最终答案- ARM NVIC (尤其是较新的 NVIC -以"自主汽车"为目标)具有极好的确定性(盲目快速)中断响应-正如您所注意到的-高优先级的中断有效(停止)其他(正在进行中) 和"需求"服务-以确定的方式...

    实际上-限制潜在中断的"场"可以简化/加快-但可能并不总是允许-我提供的数据(与"完全"(错误)声明相反)-对中断编号或到达时间不强制执行此类限制...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    (响应 Robert 的查询或 Timer 的"到达边缘或时间"捕获)

    事实上、Robert -他们确实如此-我(甚至)读到/回顾过、昨晚(事件和"时刻")的信号被捕获/锁存。 (简短地说、必须"读取/处理"或将丢失到"下一个"事件。)

    我们的海报缺失链接是"没有任何"自动触发机制"(MCU ADC 的触发除外)。 因此、"除了可怕的 GPIO ISR 方法之外"的潜在优势逐渐下降、但仍然没有"保证工作"的替代方法已经实现、这些岩石海岸也是如此。   (我这个周末航行-码头、鲸鱼、其他船只-都是目标...我"承诺"我不会"再次奔跑"的 CG。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很困惑。 为什么不能将来自 PPS 的脉冲馈入捕捉输入。

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

    [引用 user="Bruno Saraiva"]您可以在脉冲期间为另一个 ISR 提供服务-然后,计时器运行将仅在完成后发生-在这种情况下不是一个选项。

    让我们记录下来、不会为上述行为提供支持!    这是否能成为"好的"-它永远不会成为"引人注目的!"

    现在、数据来自 ARM、这对上述报价产生了高度争议。    此处说明的是"抢占"的概念 、所有 ARM Cortex MCU 都采用了这种概念、强制暂停执行较低优先级的中断、并在6个周期后启动"刚刚到达"的较高优先级中断!     这(可能满足)"确定性"标准。

    有意见是"可以"的-更好的是提出那些具有已证明有效性的意见-以及(一些)独立支持...

    您将注意到更高优先级的中断(IRQ2)"将已经执行的(IRQ1)踢到路边!"    (「路缘踢」指「Kesha」)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当中断被禁用时、该时间会被不确定地添加到中断中。 Cortex 结构、尤其是在内核中启用了大量优先级时、确实可以更轻松地避免这种情况、但在某些情况下、您可能无法避免这种情况。 同样糟糕的是、如果你有多个具有相同优先级的中断。

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

    [引用 user="Robert Adsett"]当中断被禁用时该时间会被不确定地添加到中断中。[/quot]

    虽然我喜欢你的推理能力-这句话对我来说有点"不精确"。    让我们失望-尝试帮助澄清:

    • ...禁用(当时)-  您会说"哪一个"时间?   在本例中、当我们设置并配置(即等待)"高优先级、特殊"信号到达时、不允许"禁用中断"
    • ...已添加...(到中断)-再次出现"哪个"中断?   当然不是、"高优先级、特殊"中断-它已经预先配置了(long)-并且只等待输入(触发)信号到达。

    我们同意(可能)有(大量案例)-但我们的海报没有提到这种情况-我们必须"尝试此案例"并提供事实-"被接受并提供证据"。

    在此处介绍的已知事实下、"最高优先级"用于他的"特殊信号"似乎是提供的最佳/最明亮(且唯一的)可行解决方案...   (有趣,因为它是唯一被拒绝/拒绝的!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    增加了中断被禁用的时间。 高优先级中断添加了是。 虽然 Cortex 内核提供了避免在许多情况下批量禁用中断的方法、但它们并不总是适用的。

    这不考虑从不充分阻尼 NMI。

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

    我参加了2015年在英国举行的基于 ARM 的会议。 提供了一个演示-其中"最高优先级中断信号触发器-且其 ISR (两者均已启用)-并且已确定、"进入该"高优先级"ISR、+ 6个周期"标记了已用时间-直到"监控 led "变为使用状态...  (高优先级 ISR 中的第一个函数)

    我仍然不清楚为什么(任何)预先存在的、已禁用的中断会对这个(已经启用的)高优先级中断造成延迟。

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

    刚刚回顾了定时器的捕获模式、或者 TI 称之为边沿定时器模式。 我不明白为什么不能使用它。

    我没有获取129个文档、所以可能不同、但我所阅读的文档建议24位和48位模式都可用。 48、至少应该足以完成任务。

    Robert

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

    中断禁用本质上会禁用除 NMI 和处理器异常(除零、总线故障)之外的所有中断。 这是拥有指令的重点。 它也在 ARM 架构上以这种方式工作。

    Robert

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

    "具体应用是在到达基于 GPS 的 PPS 信号时启动10Hz 计时器。 我不想通过从 ISR 中调用 start()来启动计时器,而是要设置周期计时器并准备好在边缘到达时在硬件中启动"

    实际上-定时器的边沿时间捕获模式-如果按时间处理-可以捕获每个指定边沿的 TOA (到达时间)-到达该定时器的输入。

    也就是说、海报声称想要"启动10Hz 计时器"、他避免了更多(我认为需要)细节...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我遇到了有关抖动的杂散评论。 我们认为 OP 在进行时钟校准。

    这种捕获在这种情况下也起作用、并缓解了对中断延迟和抖动的担忧。 在捕获中断中、您可以读取捕获和当前时间。 这使您能够在为'10Hz 计时器'设置中断时更正实际延迟。 我过去做过类似的事情。

    我确实同意一些关于海报试图实现的目标的信息、而不仅仅是他们尝试使用的技术、会帮助我们。

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

    [引用用户="Robert Adsett"]我同意一些有关海报所尝试实现的目标的信息,而不仅仅是他们尝试使用的技术,会帮助我们。[/引用]

    帮助那些被人的“Helper Crüe”在他的名单上似乎不是很高。   (虽然在他收到布鲁诺的答复后,可能"已经过去了"。)

    "在捕获中断中、您可以读取捕获和当前时间。"    您/我是否同意存在(两者)"边沿计数捕获和边沿时间捕获"功能、并且这些功能是"单独的?"   通过将输入信号路由到两个定时器输入引脚、可以(同时)实现这两种模式-通过编程来涵盖这两种模式。   不过,我不认为这是你的观点。

    MCU 的外部"定时器引脚"必须满足(同时满足)输入和输出需求(由于增加了(MCU 内部)路由复杂性)这一事实可能会使实际的"信号到达时间"受到(某些)错误的影响?

    我仍然无法完全理解这里真正需要的东西-除非在每个/每个"特殊"信号到达时启动"10Hz 计时器"(从而终止/替换任何现有的10Hz 计时器)。   罗伯特、您的理解是这样吗?

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

    [引用 USER="CB1_MOBILE "]给您,"在捕获中断中,您可以读取捕获和当前时间。"    您/我是否同意存在(两者)"边沿计数捕获和边沿时间捕获"功能、并且这些功能是"单独的?"   通过将输入信号路由到两个定时器输入引脚、可以(同时)实现这两种模式-通过编程来涵盖这两种模式。   不过,我不认为这是你的观点。[/引述]

    都是真的。 我指的是读取捕获寄存器和活动定时器值寄存器。 但从后者中减去前者、我们可以直接衡量自捕获以来已经历了多少时间。 没有必要在采集的同时启动第一个100mS 超时、您可以将其缩短此增量时间。

    [引用 USER="CB1_MOBILE "] MCU 的外部"计时器引脚"必须满足(同时满足)输入和输出需求(由于这增加了(MCU 内部)路由复杂性)这一事实可能会使实际"信号到达时间"受到(某些)错误的影响?[/QUESPLET]

      不过、我希望它小于时钟周期。

    [引用 USER="CB1_MOBILE "]我无法完全理解这里真正需要的内容-除非启动"10Hz 计时器"(从而终止/替换)任何现有的10Hz 计时器-在每个/每个-"特殊"信号到达时。   Robert、您的理解是这样吗?[/引述]

    这可能是尝试的结果、通过定期重新启动来更正计时。 不过、我通常的方法是调整时基、这会更简单、并避免周期性的大变化。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我感谢大家对我的问题的关注,这确实是关于是否存在一个如下所示的具体实施:

    1)已经完成了一些关于时序的计算、其中可能包括各种定时器、边沿捕捉等、但这些只是应用逻辑....
    2) 2)对某些寄存器或 ROM 调用执行极其简单的操作、这将允许...
    3) 3)引脚上的信号、用于启动周期计时器、采用某种硬件化/外设、而不是 ISR 化方式。

    第3步是我的关键点。

    到目前为止,我的理解如下:
    1) 1)此类特殊解决方案不存在。 我真的认为可能(甚至应该)有什么东西,但显然不是。
    2) 2) Bruno 对一些简单但不重要的解决方案有一些好的想法、这些解决方案似乎可以满足上述条件3。 我将深入研究这些。
    3) 3)并非每个人都相信这种解决方案是好的。 这并不奇怪;并非每个人都知道蓝莓华夫饼也是绝对美味的。

    我将报告我所学到的内容、如果我学习到这些内容、以及何时学习这些内容。

    我仍在留意上面第2步和第3步的内容。

    再次感谢所有反馈。

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

    这种情况:

    [引用 user="Robert Cram"] 3)引脚上的信号,用于启动周期性计时器,采用某种硬件化/外设化的方式,而不是 ISR 化的方式。

    令人困惑。 我看到两种可能

    1. 您希望在接收到脉冲后立即在输出引脚上设置、在这种情况下、无需处理器干预。 它只会使事情变得更糟
    2. 您需要启动计时器(或一系列计时器以输出有限的脉冲链)。 在这种情况下、我概述的方法将实现这一目标、而无需任何严格的时间

    您似乎已经拒绝了第三种可能、即您希望使计时更准确。 可能有第四个?

    Robert

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

    海报的"神秘"信号(同时有很多建议):

    • 作品中有一个"书籍交易"
    • 与《反贪局法》一样,我们必须先“通过法案”,然后才能了解法案内容。   (如果这一点会被揭露...)

    我们(即将)有大约30多篇文章"深入到这里"-但海报将不会-让我们摆脱(合并)痛苦...   (不适合我...)

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

    感谢您的回答。 实际上、项目2是我要寻找的(硬件级引脚触发周期性计时器)。 也许我在您的帖子中遗漏了一些内容、但我看不到"您概述的方法"。 是的、我知道您在哪里解释了 PPS 可以应用到捕获引脚进行测量、但不知道 PPS 将如何启动一系列脉冲。

    我希望您能原谅我的消失了一点、因为我需要尝试使事情正常工作、同时让固件升级程序正常工作。 我会回来报告。

    此致、

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

    方法很简单。 更多详细信息

    1. 使用定时器捕捉来捕捉脉冲发生的时间。 这也会触发中断
    2. 在中断中、读取定时器的当前时间(a)以及捕获的时间(b)。
    3. 为您的100mS 边缘设置计时器、从现在开始将发生100ms -(b-a) ms (已确定为 b)。
      • 该单次触发计时器将设置输出并触发中断、以便在 SW 中重新加载输出
    4. 记录一个从 a 开始200ms 的时间 c。在后续中断中使用该时间来设置下一个边沿。
    5. 完成脉冲串后、您可以停止并等待下一个输入。

    100ms 在该处理器上是一段很长、很长的时间。 您有足够的时间设置边沿、无需担心延迟问题。 中断甚至不需要具有高优先级。 应该保护从2到3的序列不受中断的影响、这样它仍然是确定性的、但实际上没有什么其他关键。 即使在速度要慢得多的处理器上、此设置也可能是可行的。

    这假设您每次设置的脉冲数有限。 如果输出连续的10Hz 波形、最好调整时基。 它更接近 连续且更简单。

    Robert

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

    [引用 user="Robert Cram"]实际上,第2项是我要寻找的(硬件级引脚触发周期性计时器)

    这是令人困惑的。 项目1是一个硬件级引脚触发定时器。 项目2是微定时器的内部组件。

    周期性也会建议无限序列的脉冲、而帖子的其他部分则建议有限序列。

    您可以坐下来、以清晰的方式写下您的需求、这可能是值得的。

    Robert