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.

[参考译文] TM4C1294KCPDT:关于通用计时器缓慢的寄存器访问

Guru**** 2521030 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1238078/tm4c1294kcpdt-about-slow-register-access-of-general-purpose-timers

器件型号:TM4C1294KCPDT

将通用计时器用作16位计时器(GPTMA)时、从设置计时器计数到启用计时器计数的寄存器访问非常慢、并且计时器控制开销会增加。
1.8μsec 3个步进需要1 μ s (系统时钟为16.0MHz)

TIMER0_ICR.word.UWDATA_LO =(unsigned short) TIMER_ICR_TATOCINT; // GPTMRIS TimerA T/O 清除
HWREG (TIMER0_BASE + TIMER_O_TAILR)=(unsigned long) TIMER_COUNT; // GPTMCC ALTCLK:0 (MOSC)
TIMER0_CTL.word.UWDATA_LO =(unsigned short) timer_CTL_TAEN;  //GPTMCTL TAEN:1

您能告诉我、这样做有什么原因吗?

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

    您好!

    Unknown 说:
    执行以下3步需要1.8μsec (系统时钟为16.0MHz)

    您为什么不想以120MHz 的频率运行您的应用? 在120MHz 时、您将把时间减少7.5倍、等于0.24uS。  

    Unknown 说:
    TIMER0_ICR.word.UWDATA_LO =(unsigned short) timer_ICR_TATOCINT; // GPTMRIS TimerA T/O CLEAR
    HWREG (TIMER0_BASE + TIMER_O_TAILR)=(unsigned long) TIMER_COUNT; // GPTMCC ALTCLK:0 (MOSC)
    TIMER0_CTL.word.UWDATA_LO =(无符号短整型) TIMER_CTL_TAEN;  //GPTMCTL TAEN:1[/报价]

    在16MHz 下、每条指令花费62.5nS。 1.8uS/62.5ns 大约为29个周期。 这意味着上述三行代码的执行大约需要29个周期。 请观察反汇编过程并确认是否执行了这么多的循环。 您也可以单步执行反汇编。  

    我不确定您的编译器优化级别是多少。 能否将优化打开到级别2? 经过更高的代码优化、它将得到改进。 请尝试一下。  

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

    感谢您的评论。
    分解后、我发现有11个处理步骤。 如果我们简单地假设每个步骤平均花费3个状态、则所示的29个周期是一个合理的近似值。
    此外、由于它影响其他进程、因此当前已关闭优化。
    由于很难确认更改优化选项的效果、请尝试设置 PLL 并提高内部处理速度、以查看是否可以改进。

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

    感谢您的评论。
    分解后、我发现有11个处理步骤。 如果我们简单地假设每个步骤平均花费3个状态、则所示的29个周期是一个合理的近似值。
    此外、由于它影响其他进程、因此当前已关闭优化。
    由于很难确认更改优化选项的效果、请尝试设置 PLL 并提高内部处理速度、以查看是否可以改进。