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.

[参考译文] TM4C123GH6PM:同步模式中的定时器

Guru**** 2478765 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/690405/tm4c123gh6pm-timer-in-synchronize-mode

器件型号:TM4C123GH6PM

您好!

我想同步 tm4c123gh下午6时可用的 timer0、Timer1和 timer2 GPTM、下面是我的代码。 我尝试通过在 while (1)中设置断点来读取计时器的当前值、但我发现计数器未同步。 我的代码是否不正确? 我错过了什么吗?

int main (void){
uint32_t a、b、c;
SysCtlClockSet (SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_5);

SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);

TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
TimerConfigure (TIMER2_base、TIMER_CFG_PERIODICRACASE);

TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()-1);
TimerLoadSet (Timer1_base、timer_A、SysCtlClockGet ()-1);
TimerLoadSet (TIMER2_base、timer_A、SysCtlClockGet ()-1);

TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC|TIMER_1A_SYNC|TIMER_2A_SYNC);


TimerEnable (TIMER0_BASE、TIMER_A);
SysCtlDelay (500);
TimerEnable (Timer1_base、timer_A);
SysCtlDelay (500);
TimerEnable (TIMER2_base、TIMER_A);
SysCtlDelay (500);

while (1)

A=TimerValueGet (TIMER0_BASE、TIMER_A);
B=TimerValueGet (Timer1_base、timer_A);
C=TimerValueGet (TIMER2_base、timer_A);


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

    尊敬的 Asif:

    请参阅 GPTM#01勘误表、我认为这正是您要访问 的内容:www.ti.com/.../spmz849f.pdf

    解决方法包含在勘误表说明中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经读取了 GPTM#01勘误表、执行了给定的权变措施、但未能在同步模式下观察到预期的计时器行为。以下是我的代码:
    int main (void){
    uint32_t a、b、c;
    SysCtlClockSet (SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_5);

    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);

    TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
    TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
    TimerConfigure (TIMER2_base、TIMER_CFG_PERIODICRACASE);

    TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()-1);
    TimerLoadSet (Timer1_base、timer_A、SysCtlClockGet ()-1);
    TimerLoadSet (TIMER2_base、timer_A、SysCtlClockGet ()-1);




    TimerEnable (TIMER0_BASE、TIMER_A);
    SysCtlDelay (500);
    TimerEnable (Timer1_base、timer_A);
    SysCtlDelay (500);
    TimerEnable (TIMER2_base、TIMER_A);
    SysCtlDelay (500);
    TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC|TIMER_1A_SYNC|TIMER_2A_SYNC);
    TimerSynchronize (TIMER0_BASE、0);
    while (1)

    A=TimerValueGet (TIMER0_BASE、TIMER_A);
    B=TimerValueGet (Timer1_base、timer_A);
    C=TimerValueGet (TIMER2_base、timer_A);


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

    器件型号:TM4C123GH6PM

    您好 CB1_MOBILE、

    我按照您的权变措施来同步计时器、但失败了。 以下是代码。

    #include
    #include
    #include" driverlib/sysctl.h"
    #include" driverlib/timer.h"
    #include "inc/hw_memmap.h"
    int main (void){
    uint32_t a、b、c;
    SysCtlClockSet (SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_5);

    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);

    TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
    TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
    TimerConfigure (TIMER2_base、TIMER_CFG_PERIODICRACASE);

    TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()-1);
    TimerLoadSet (Timer1_base、timer_A、SysCtlClockGet ()-1);
    TimerLoadSet (TIMER2_base、timer_A、SysCtlClockGet ()-1);
    TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC|TIMER_1A_SYNC|TIMER_2A_SYNC);


    TimerEnable (TIMER0_BASE、TIMER_A);
    SysCtlDelay (500);
    TimerEnable (Timer1_base、timer_A);
    SysCtlDelay (500);
    TimerEnable (TIMER2_base、TIMER_A);
    SysCtlDelay (500);

    while (1)

    SysCtlDelay (3333);
    TimerSynchronize (TIMER0_BASE、0);
    TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC|TIMER_1A_SYNC|TIMER_2A_SYNC);
    A=TimerValueGet (TIMER0_BASE、TIMER_A);
    B=TimerValueGet (Timer1_base、timer_A);
    C=TimerValueGet (TIMER2_base、timer_A);


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

    我将您的新线程与此线程合并、因为它是同一主题、我们不应运行两个相同的线程。

    对于阅读此帖子的用户、引用 CB1_MOBILE 贡献位置的主题为: e2e.ti.com/.../288250

    关于此问题、我将运行您的代码、并很快查看配置中缺少的内容。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Asif:

    我复制了该问题、现在仍在调试正在发生的情况。 虽然我目前仍在工作、但当天的时间很短、因此我可能需要在周一进行备份。 只是想让您知道、这对我来说是开放和持续的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Asif:

    我可以通过以下代码看到计时器已正确同步:

    int main (void){
    
    uint32_t a、b、c;
    
    SysCtlClockSet (SYSCTL_XTAL_16MHz|SYSCTL_MAIN|SYSCTL_USE_PLL|SYSCTL_USE_PLL|SYSCTL_SYSDIV_5);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);SYSCTPERIPTHREST_SysCtlPeripheralEnable (SYSCTIPTH_1
    )
    ;SysCtlPeripheralTimerTimer1 (SYSCBLE_SysCtlPeripheralTimerTimer1)
    
    TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICRAY);
    TimerConfigure (Timer1_base、TIMER_CFG_PERIODICRAY);
    TimerConfigure (TIMER2_base、TIMER_BASE、
    
    TIMER_A、SysClockGet ()-1);TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet
    ();TimerCtlTimerGet1)
    TimerLoadSet (TIMER2_base、TIMER_A、SysCtlClockGet ()-1);
    
    TimerEnable (TIMER0_BASE、TIMER_A);
    SysCtlDelay (500);
    TimerEnable (TIMER1_BASE、 Timer_A);
    SysCtlDelay (500);
    TimerEnable (TIMER2_base、timer_A);
    SysCtlDelay (500);
    
    TimerSynchronize (TIMER0_BASE、TIMER_0A_SYNC|TIMER_1A_SYNC|TIMER_2A_SYNC);
    TimerSynchronize (TIMER0_BASE、0);
    
    TimerControlStall (TIMER0_BASE、TIMER_A、TRUE); //通过断点处的停止计时器来辅助调试
    TimerControlStall (Timer1_base、timer_A、true);//通过在断点处停止计时器来辅助调试
    TimerControlStall (TIMER2_base、timer_A、true);//通过在断点
    
    处停止计时器来辅助调试 while (1)
    {
    SysCtlDelay (TIMER2_BASE、TIMER_A、TIMERA);Timeret=TIMER1
    
    
    (TIMER_BASE
    
    );Timera=TIMER1 (TIMERA);Timernet (TIMER1) Timeret) Timergalet_timera=TIMER1 (timera=TIMER1)
    

     需要 TimerControlStall API 调用才能在调试模式下查看同步。

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