请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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);
下面的代码片段
//为边沿计数设置 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);
}
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 =错误;
}
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;
}
空频率测量任务(空)
{
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;
}