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.

[参考译文] CCS/TM4C129XNCZAD:如何设置计时器中的20ms 计时器值

Guru**** 2392445 points
Other Parts Discussed in Thread: TM4C129XNCZAD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/955281/ccs-tm4c129xnczad-how-to-set-timer-value-of-20-ms-in-timer

器件型号:TM4C129XNCZAD

工具/软件:Code Composer Studio

您好!

我正在使用自定义的 tm4c129xnczad 控制器。 我需要将计时器设置为20ms。您能不能建议我如何为 系统时钟设置计时器25MHz、请告诉我如何计算以设置中的计时器值  

 TimerLoadSet (TIMER0_BASE、TIMER_B、ui32SysClock / 1000);

我要在这里附加程序

ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_OSC)、25000000);

TimerLoadSet (TIMER0_BASE、TIMER_B、ui32SysClock / 1000);

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

    您好 Chandana、

    您在这里发布的内容是:

    TimerLoadSet (TIMER0_BASE、TIMER_B、ui32SysClock / 1000); 

    将计时器设置为在1毫秒运行。

    它的工作方式是计时器脱离系统时钟运行、因此每个时钟周期的计时器计数都会递增。 通过加载系统时钟/1000的值、您可以告诉它您希望定时器在(系统时钟/1000)的周期内触发。 然后、实际周期(将系统时钟转换为秒)将为[(系统时钟/ 1000)*(1 /系统时钟)]= 1/1000秒、即1毫秒。

    要达到20毫秒、您需要更频繁地触发计时器、这意味着您希望计时器内部的计数按比例减小。

    因此、您需要将系统时钟除以更大的值。 因此、在20毫秒内、您需要以下内容:

    TimerLoadSet (TIMER0_BASE、TIMER_B、ui32SysClock / 20000); 

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

    您好!

    感谢您的回复。

    我尝试通过如下设置来设置1ms 的计时器值(TIMER0_BASE、TIMER_B、ui32SysClock / 1000); 当中断处理程序发生时、我们尝试将 LED 引脚设为高电平、并且我们已在中断处理程序中递增计数器值、因此当计数器值为偶数时、我们将 LED 引脚设为高电平、当计数器值为奇数时、LED 引脚将变为高电平 低电平、因此、通过这样做、每个周期将获得脉冲。 因此、当我们在示波器中进行检查时、我们得到的是7.5ms 作为一个周期、而不是1ms。因此 、我在这里附加了代码、所以请告诉我问题是什么以及如何实现1ms 和20ms。

    e2e.ti.com/.../timer12.txt

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

    您好 Chandana、

    我还没有弄清楚为什么、但当您以这种方式配置系统时钟时、计时器看起来是从不同的时钟运行的。 它似乎以16MHz 的频率运行、这让我认为它是从 PIOSC 运行的。

    解决此问题的最简单方法是改用 PLL、这也可以为您提供性能更好的系统时钟。 尝试使用此工具、看看您是否可以使计时器准确工作:

    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000); 

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

    您好!

    感谢您的回复、很抱歉您的回复较晚。

    我尝试通过 类似这样的方式进行更改。

    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    
    TimerLoadSet (TIMER0_BASE、TIMER_B、ui32SysClock /1000); 

    但对于该负载设置、我仍然得到2ms 的时间。 但它应该达到1ms。
    请告诉我如何解决此问题。 请告诉我、我们必须在计时器加载设置中为20ms 设置什么值。 请帮我解决这个问题。
    我正在连接 CRO 输出。请告诉我如何解决此问题。

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

    您好 Chandana、

    在我看来、o 示波器配置不是很好、因为我看到频率随附 的是?  它表示测量中的不确定性。  

    我在结尾再次验证了这些变化、并创建了一个可通过逻辑状态分析器看到的统一1ms/1kHz 波形。

    20毫秒的时间内运行

    TimerLoadSet (TIMER0_BASE、TIMER_B、ui32SysClock /20000); 

    正如我在上一个帖子中报告的那样。