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.

[参考译文] TM4C1294NCPDT:TM4C1294NCPDT:定时器边沿计数捕获显示错误值

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/920852/tm4c1294ncpdt-tm4c1294ncpdt-timer-edge-count-capture-shows-wrong-value

器件型号:TM4C1294NCPDT
我正在尝试测量我设置为400KHz 的传入信号的频率。 我在边沿计数模式下设置一个捕获计时器。
并行地、我每10ms 设置一次 SysTick 中断。 因此、每10ms 我向计数器加载一个已知值、并在10ms 后检查计数值。  
我希望计数值为4000 (1秒内为400000边缘、10 ms 内为4000边缘)。  但计数似乎 减少了33%,我只得到2667。 同样、如果我将传入频率更改为 600kHz、则计数仅为4000 (而不是6000)。  能不能帮我找到错误。  
下面的代码片段
//为边沿计数设置 Timer3
void setupT3CCP0 (void)

   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
   ROM_GPIOPinTypeTimer (GPIO_Porta_base、GPIO_PIN_6);
   GPIOPinConfigure (GPIO_PA6_T3CCP0);
   MAP_GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_6、
                     GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
   ROM_TimerConfigure (TIMER3_base、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_COUNT));   //TIMER_CFG_A_CAP_COUNT
   ROM_TimerControlEvent (TIMER3_base、TIMER_A、TIMER_EVENT_POS_EDGE);
   ROM_TimerPrescaleSet (TIMER3_base、TIMER_A、0);
   ROM_TimerLoadSet (TIMER3_base、TIMER_A、60000);
   ROM_TimerMatchSet (TIMER3_base、TIMER_A、0);
   ROM_TimerEnable (TIMER3_base、TIMER_A);
//Setup Systic for 10ms timing
无效
initSysTick (uint32_t ui32SysClock)

   G_ui32sysCounter = 0;
   SysTickPeriodSet (ui32SysClock/100);n
   psysTimerTicks=false;
   TOGGLE =错误;
在每个 psystic 中断之后,我将运行此函数以检查频率并重新加载计时器。  我正在检查 FreqVal 值。
空频率测量任务(空)

   uint32_t 频率值;
频率计数= ROM_TimerValueGet (TIMER3_base、timer_A);
ROM_TimerLoadSet (TIMER3_base、TIMER_A、60000);
ROM_TimerMatchSet (TIMER3_base、TIMER_A、0);
FreqVal = 60000 - FreqCount;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ramesh、

    我正在将您的数据与我们提供的 Edge Count 示例进行比较、但我现在看不到任何问题。 不过、您已经发布了部分代码、我看不到您的系统时钟设置、中断设置等 您能提供完整的代码吗? 此时、我也可以在我的 LaunchPad 上测试它。  

    您可以执行的另一项测试是、尝试将边缘计数负载设置为4000、然后通过全局变量测量在您单击边缘计数中断之前所做的 SysTick 中断数、以帮助您确定后续情况。

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

    谢谢 Ralph。  我找到了错误。  我错误地将系统时钟编程为80MHz、而不是120。  我更正了、工作正常。

    此致、

    Ramesh