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.

[参考译文] TM4C129ENCPDT:定时器配置完成、但 T0CCP1捕获计数

Guru**** 2455560 points
Other Parts Discussed in Thread: TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/639818/tm4c129encpdt-timer-configuration-done-but-t0ccp1-does-capture-the-count

器件型号:TM4C129ENCPDT

大家好、团队、

我使用的是 TM4C129ENCPDT 控制器。 已配置 T0CCP0、T0CCP1和 T1CCP1进行频率测量。

我已将 Timer0配置为分离操作、并将 TimerA 和 B 配置为捕获脉冲。 我将获得正确的 T0CCP0和 T1CCP1值、但没有适用于 T0CCP1的数据。

以下是代码:

//Initalisation

void Init_Freq_measure (void)

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOL));
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD));
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0));
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
while (!SysCtlPeripheralReady (SYSCTL_Periph_Timer1));

TimerLoadSet (TIMER0_BASE、TIMER_Both、0xFFFF);
//TimerLoadSet (TIMER0_BASE、TIMER_B、0xFFFF);
TimerLoadSet (Timer1_base、timer_B、0xFFFF);

GPIOPinTypeTimer (GPIO_PORTL_BASE、GPIO_PIN_7);
GPIOPinConfigure (GPIO_PL7_T1CCP1);
GPIOPinTypeTimer (GPIO_PORTD_base、GPIO_PIN_0);
GPIOPinConfigure (GPIO_PD0_T0CCP0);
GPIOPinTypeTimer (GPIO_PORTD_base、GPIO_PIN_1);
GPIOPinConfigure (GPIO_PD1_T0CCP1);

TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_CAP_COUNT_UP|TIMER_CFG_A_CAP_COUNT_UP);
TimerControlEvent (TIMER0_BASE、TIMER_Both、TIMER_EVENT_POS_EDGE);

TimerConfigure (Timer1_base、TIMER_CFG_SPLIT_PAIRGE|TIMER_CFG_B_CAP_COUNT_UP);
TimerControlEvent (Timer1_base、timer_B、timer_event_POS_EDGE);

TimerEnable (TIMER0_BASE、TIMER_Both);
TimerEnable (Timer1_base、timer_B);

//定时器2中断1秒

空 Timer2IntHandler (空)

TimerIntClear (TIMER2_base、TIMER_TINA_TIMEOUT);
START_r = END_r;
start_y = end_y;
start_b = end_b;
end_r = TimerValueGet (TIMER0_BASE、TIMER_A);
end_y = TimerValueGet (TIMER0_BASE、TIMER_B);
end_b = TimerValueGet (Timer1_base、timer_B);
FREQ_r =计算频率(START_r、END_r);
FREQ_y =计算频率(START_y、END_y);
FREQ_b =计算频率(START_b、END_b);

提前感谢您。


此致

Shijin

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

    已解决此问题。

    导致问题的原因是我在顺序中犯了错误。

    我在"TimerConfigure"之前调用了"TimerLoadSet"、因此 Timer0被视为单定时器、Timer B 加载值未更新。

    现在、按照正确的顺序进行整流。

    谢谢你
    此致
    Shijin。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您发布找到的解决方案。 这可能会帮助遇到相同问题的其他人。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果海报的(原始)代码能反映出他的修复、这种帮助将会更好!    (修复程序描述为  、在"TimerLoadSet"之前调用"TimerConfigure"。)

    查看海报(早期)代码显示"尚未"的"解决方案"已达到他的"初始发布"。    (降低校正值- Devil "basks"、如此详细...)  

    红色函数之前调用绿色函数!   (正如 Thread 的发起人所说的-这是海报原始代码的简单复制/粘贴-只是为了避免他人重复海报早期的错误而"突出显示颜色"!)

    TimerLoadSet (TIMER0_BASE、TIMER_Both、0xFFFF);    //必须在绿色的"TimerConfigure"函数之后发生(如下)

    //TimerLoadSet (TIMER0_BASE、TIMER_B、0xFFFF);

    TimerLoadSet (Timer1_base、timer_B、0xFFFF);        //必须在 绿色的"TimerConfigure"函数之后出现(如下所示)

    GPIOPinTypeTimer (GPIO_PORTL_BASE、GPIO_PIN_7);

    GPIOPinConfigure (GPIO_PL7_T1CCP1);

    GPIOPinTypeTimer (GPIO_PORTD_base、GPIO_PIN_0);

    GPIOPinConfigure (GPIO_PD0_T0CCP0);

    GPIOPinTypeTimer (GPIO_PORTD_base、GPIO_PIN_1);

    GPIOPinConfigure (GPIO_PD1_T0CCP1);

    TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_CAP_COUNT_UP|TIMER_CFG_A_CAP_COUNT_UP);   //以 红色显示"TimerLoadSet"之前的 Enter (上面)

    TimerControlEvent (TIMER0_BASE、TIMER_Both、TIMER_EVENT_POS_EDGE);

    TimerConfigure (Timer1_base、TIMER_CFG_SPLIT_PAIRGE|TIMER_CFG_B_CAP_COUNT_UP);    //以红色输入"TimerLoadSet"之前的值(上文)