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: EK-TM4C123GXL, TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/689923/tm4c123gh6pm-timer-in-input-edge-time-mode

器件型号:TM4C123GH6PM
Thread 中讨论的其他器件: EK-TM4C123GXL

以下是我在输入边沿时间模式中配置 tm4c123gh下午6的 timer0的代码。 我使用 EK-tm4c123gxl 的板载开关触发事件。 检测到事件、但当我按下按钮时。 但我无法  使用 TimerValueGet () API 读取计时器的当前值。  是否有任何其他可返回计时器当前值的 API。

#include
#include
#include" driverlib/sysctl.h"
#include" driverlib/gpio.h"
#include"driverlib/interrupt.h"
#include" driverlib/timer.h"
#include" driverlib/pin_map.h"
#include "inc/tm4c123gh6pm .h"
#include "inc/hw_memmap.h"
uint32_t a=0、b;
int main (void){
SysCtlClockSet (SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_5);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
GPIOPinTypeTimer (GPIO_PORTB_BASE、GPIO_PIN_6);
GPIOPinConfigure (GPIO_PB6_T0CCP0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOInput (GPIO_PORTF_BASE、GPIO_PIN_4);
GPIOPadConfigSet (GPIO_PORTF_BASE、GPIO_PIN_4、GPIO_Strength _4mA、GPIO_PIN_TYPE_STD_WPU);

SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_A_CAP_TIME_UP);
TimerLoadSet (TIMER0_BASE、TIMER_A、65000);
TimerControlEvent (TIMER0_BASE、TIMER_A、TIMER_EVENT_POS_EDGE);
IntEnable (INT_TIMER0A);
TimerIntEnable (TIMER0_BASE、TIMER_CAP_EVENT);
TimerEnable (TIMER0_BASE、TIMER_A);

while (1){
B=TimerValueGet (TIMER0_BASE、TIMER_A);
SysCtlDelay (100);

空 timer0_ISR (空)

A++;
TimerIntClear (TIMER0_BASE、TIMER_CAP_EVENT);

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

    "但我无法  使用 TimerValueGet () API 读取计时器的当前值。"

    这意味着?

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

    尊敬的 Danny F:

    如 TM4C123GH6PM 的数据表中所述

    在 输入边沿计时模式中、定时器在递减计数时初始化为 GPTMTnILR 和 GPTMTnPR 寄存器中加载的值、在递增计数时初始化为0x0。 在此模式下、GPTMTnR 和 GPTMTnPS 寄存器保存发生选定输入事件的时间、而 GPTMTnV 和 GPTMTnPV 寄存器保存自由运行定时器的值和自由运行预分频器的值。 捕获到事件后、定时器不会停止计数。 它会继续计数、直到 TnEN 位被清零。 当定时器达到超时值时、在递增模式中重新加载0x0、在递减模式中重新加载 GPTMTnILR 和 GPTMTnPR 寄存器中的值。

    由于 TimerValueGet () API 应返回计时器的当前值,因此我将捕获  b 中的该返回值

    while (1){
    B=TimerValueGet (TIMER0_BASE、TIMER_A);
    SysCtlDelay (100);

    尽管 在 TimerValueGet ()处设置了一个断点以观察更新的值,但我始终在 b 中读取0。

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

    确保时基正在运行、捕获已启用、并且输入引脚已按此顺序正确配置。 比较寄存器与数据表、看看是否有任何值是意外的。

    现在就不要再使用 API 了。 始终从寄存器开始。

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