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.

[参考译文] TM4C123AH6PM:定时器同步

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/587248/tm4c123ah6pm-timer-synchronization

器件型号:TM4C123AH6PM

我无法同步 MCU 上的两个计时器。 我尝试了两种方法。 第一个是您认为它会起作用的方式:

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_WTIME0);

//将计时器配置为输入边沿时间模式并对
MAP_TimerConfigure 进行计数(WTIMER 0_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAPTIME_UP | TIMER_CAPTIME_UP);


/ TIMER_TOP_TOP_TOP_TOP_TIME_TIME_TREMENT



(TIME_TOP_TOP_TOP_TOP_TIME_TIME_TRIP_TRIP_TREMENT);/ TREMPTM_BASE (TIMER_TOP_TOP_TOP_TOP_TOP_TOP_TOP_TIME_TRIP_TIME_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_TRIP_


MAP_TimerEnable (WTIMER 0_BASE、TIMER_Both);

MAP_TimerConfigure (WTIMER 1_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PERIODICRACRACY_UP);

//将周期设置为最大
MAP_TimerLoadSet (WTIMER 1_BASE、0xFFFFFFFF);

//将 TIMER_TIMER TOOT_START_LIFTTIMER TOOTH、TIMER1 TOOT_START


(TIMER1);/ TIMER_CONTRAL_TIMER TOOTACT_START) TIMERB、TIMER (TRUNT = TIMER

1、TIMER TOOTH (TRUNT 1、TIMER INTRIF_START)

//启用定时器
MAP_TimerEnable (WTIMER 1_BASE、Timer_B);

//同步时钟
MAP_TimerSynchronize (WTIMER 1_BASE、WTIMER 0A_SYNC | WTIMER 1B_SYNC); 

这样就不会发生任何情况。 时钟正在运行但未同步。 然后、我使用 TIMER0_BASE 尝试了另一种方法。 之前的代码是相同的、只有同步部分发生了变化

MAP_SysCtlPeripheralEnable (TIMER0_BASE);
MAP_TimerSynchronize (TIMER0_BASE、WTIME_0A_SYNC | WTIME_1B_SYNC);
MAP_TimerSynchronize (TIMER0_BASE、0); 

但是、在第一个同步函数上、整个过程会崩溃、从而出现异常。

这就是异常寄存器中的内容:  

SYSEXC_RIS_FPIXCRIS 1浮点不精确异常原始中断状态

那么、问题是、我做了什么错? 还是无法同步时钟?

BR

JHi

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

    您好!
    我需要做一些调查。 我的理解是、如果您使用 WTIMER、则只会将配置应用于 timerA、而不是 timerB。

    [编辑]抱歉、我没有仔细查看您的代码。 我想您尝试使用64位计时器。 我的差。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您是否为 WTIME1启用了外设? 我只能看到 MAP_SysCtlPeripheralEnable (SYSCTL_Periph_WTIME0)、但看不到 WTIME1的相同情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、它也将被启用。 我从两个不同的函数复制了代码、但忘记了复制。 在配置 WTIME0后、将调用计时器将同步的函数。 实际上、WTIMER1A 将与 WTIMER0 A 和 B 同时配置。之后将配置 WTIMER1B。

    JHi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我在第一个帖子中所说的、我的所有计时器都在运行、但问题是它们没有同步。 如果我调用 MAP_TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC)、代码也会崩溃。 如果基址是 TIMER0_BASE、那么我同步哪个计时器无关紧要。 但是、如果基极是其他东西、计时器仍然不会同步。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用 MAP_TimerSynchronize (TIMER0_BASE、WTIME_0A_SYNC | WTIME_1B_SYNC)是正确的做法、因为无论您的应用中是否使用 TIMER0本身、都只能使用 TIMER0_BASE 来同步选定的计时器。 这意味着、即使将 TIMER0用于仅同步 WTIME_0A_SYNC 和 WTIME_1B_SYNC 目的、也应启用 TIMER0。

    另请参阅以下有关计时器同步的勘误表。

    GPTM#01 GPTMSYNC 位需要手动清零
    受影响的修订版本:6和7。
    说明:GPTM 同步(GPTMSYNC)寄存器允许软件同步数字
    计时器。 在将位设置为同步后、该寄存器中的位应自行清除
    所选计时器、但它们不是。
    权变措施:当 GPTMSYNC 寄存器中的位被置位时、软件必须将之前的位清零
    设置它们以进行后续更新。 而不是仅使用 TivaWareTmAPI
    调用 TimerSynchronize()函数一次,软件应再次调用该函数
    将0作为参数的时间、如下所示:
    TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC | TIMER_1A_SYNC);
    TimerSynchronize (TIMER0_BASE、0);

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

    是的、我知道这一点、正如您在我的第一个帖子中看到的那样、但问题是如果我这样做、程序会崩溃、但在第一个帖子中也提到了一个例外。 我还启用了 TIMER0、如第一个 POST MAP_SysCtlPeripheralEnable (TIMER0_BASE)上所示。 问题是、为什么我的程序在同步计时器时崩溃? 还需要启用哪些功能?

    JHi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您的代码对我来说似乎还可以、但我不知道为什么您会遇到异常。 我将通过另一篇文章来了解它是否可以解释任何内容。 您还能看看是否可以同步计时器。 在这篇文章中、我已经说过启用 TIMER0和清除 SYNC 位、这将使其正常工作。 e2e.ti.com/.../1005030
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题已解决。 我从您发布的链接中获取了我的代码、这当然是错误的。 我应该仔细检查它。
    正确的做法是:SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0)、而不是 SysCtlPeripheralEnable (TIMER0_BASE)。

    BR
    JHi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴您的问题得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    JHi 说:
    从您发布的链接中获取了我的代码,这当然是错误的。

    这种评估有点苛刻-不是吗?   您当时是否认为(许多代)供应商的 API 已经到达/离开、并且该代码可能是"正确的"!

    帖子显示高(技术)能力... 外交不是很好   (供应商 Charles 提供的大多数链接都是正确的-您的"当然"不是事实性的、也不是正确的!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果你对我的帖子感到不满、我很抱歉。 我能承认、语言选择不是最好的。 我没有抱怨查尔斯做了一些错误。 我很高兴他试图帮助我。 实际上、我对自己很生气、因为我没有正确检查代码。 实际上 SysCtlPeripheralEnable (TIMER0_BASE)是不可能的、因为在启用系统控制外设时必须使用系统控制寄存器。 但问题现已解决、这一点无关紧要。

    JHi
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢您-供应商代理、"尽他们所能"、他们受到了大量的需求。 AS (在论坛用户中、如果不是最长的用户)、我会尽力提供帮助-在可能的情况下/在何处/何时提供帮助。 实际上、此论坛(由于您等海报)是"顶级座舱"。

    你无疑是熟练的--我强调的这些话是毫无道理的--对查尔斯来说是不公平的。 (可能不是您的"标准"。)

    我可以告诉您、所示代码确实成功-交付了几百个此类 LX4F 板(在 StellarisWare 下运行)-并且大多数板至今仍在成功运行。