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:TimerMatchSet() 问题

Guru**** 2695575 points

Other Parts Discussed in Thread: ALP

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1583265/tm4c1294ncpdt-timermatchset-problem

器件型号: TM4C1294NCPDT
主题中讨论的其他器件: ALP

您好的团队、  

您将找到 C 代码源和日志文件。

TimerCounter.zip 

为了驱动电机、我们使用:

  • 执行软启动的第一个计时器(每 5ms 中断一次)
  • 第二个计时器/计数器、用于对视距仪发送的脉冲进行计数
  • 使用光学开关来确定初始位置

 

从初始位置、我们尝试进行 8 种 45°旋转。 每次旋转都从软启动(由第一个计时器驱动)开始、并一直持续到第二个计时器中断来执行软停止。
电机启动、之后、全部由中断驱动。

当 45°完成或到达初始位置时、应用正在等待发布信标。 我们在读取它复位的值时遇到问题(变为 0 而不是实际读数)。  

此致、

Luke

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

    您好 Luke  

    >>我们在读取它复位的值时遇到问题(变为 0,而不是实际读数)。  

    我是否知道在什么情况下(电机位置) 、用户读取的值(计时器计数器)是 0?  

    请指出 DDI_歧 管_ALP_1.c 中的代码行#

    谢谢!

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

    您好:

    该软件使用 FreeRTOS 进行构建。

    当 从中断处理程序读取定时器/计数器(向上计数)并使用 TimerMatchSet() 重新启动时、该值会正确递增。
    然后、当我们达到 sopt 计数时、我们只禁用计时器中断。
    然后、当任务读取计时器的值时、它已被复位、但继续从 0 开始计数。

    迹线样本:


    ALPTimerIntHandler 步骤 1 计时器 94
    ALPTimerIntHandler 步骤 2 计时器 98
    ALPTimerIntHandler 步骤 3 计时器 102
    ALPTimerIntHandler 步骤 4 计时器 106
    ALPTimerIntHandler 步骤 5 计时器 110
    ALPTimerIntHandler Nb45 度 2 计时器 113

    然后从任务读取值:

    58:MANI ALP 结束位置 113 -> 1
    58:第 1015 行计数 66:1 总计 0

    计数器已被重置、只需再读取一个脉冲!

    我不理解为什么计数器被重置为零。 我需要从一开始就累加的值。

    感谢你的帮助。

    此致。

                         FWX。

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

    你好

    我查看了器件数据表 13.3.3.1 单次触发/周期计时器模式

    我认为计数器 (递增计数) 模式上的“计数器被重置为零“应该是正常行为。  

    如果我的理解正确、请您发表评论。

    谢谢!

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

    您好、

    我的 timer/counterA 刚刚配置了:

    TimerConfigure (ALP_MOT_TACHY_TIMER_BASE、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT_UP | TIMER_CFG_B_PWM);
    我不指示计时器 A 是周期性的还是单次触发。

    但行为与 doc 中描述的不完全相同:计数器从最后一个值开始计数;每次从中断处理程序调用 TimerMatchSet () 时、计数器不会重置为零。 如我上一篇文章所示,计数器如果在中断之间更新: 94 , 98 , 102 .. 这对我来说很有用。 但我不知道为什么,这位传教士稍后会被重置。

    但也许我不能像这样使用计时器。

    感谢您发送编修。

    此致、

               FWX。

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

    你好

    请查看 SW-TM4C  用于 C 系列的 TivaWare 软件

       C:\ti\TivaWare_C_Series-2.2.0.295\examples\peripherals\timer 上有 OneShot_16bit 和 PERIODY_16bit

    您能帮助比较您的代码和此示例代码吗?

    谢谢!

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

    您好、
    我使用计时器 A
    配置如下:
    TimerConfigure (ALP_MOT_TACHY_TIMER_BASE、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT_UP | TIMER_CFG_B_PWM);
    它没有说明我必须指定 TIMER_CFG_ONE_SHOT 或 TIMER_CFG_PERIODENT 。
    在我的例子中、当计数器值与限值匹配时、我应该喜欢调用中断处理程序、然后继续计数、直到计数器值与新限值匹配、依此类推。
    计时器/计数器似乎遵循此行为、但有时值会复位为零。 这是否与禁用中断有关? 配置问题?
    感谢你的帮助。

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

    你好

      C:\ti\TivaWare_C_Series-2.2.0.295\examples\peripherals\timer 上的 OneShot_16bit 和 PERIODLE_16bit 基于 TIMER0B

    TM4C1294 上的计时器 A 和计时器 B 是相同的。

    因此、请尝试运行此示例代码并引用它。

    谢谢!