您好!
我正在尝试测量频率。
范围:高达12MHz
我尝试了3种方法
固件会轮询输入 GPIO 引脚、对时钟进行计数、这种方法可以测量大约5~6 MHz 的频率输入。
将 GPIO 设置为中断、当频率超过2MHz 时、系统挂起。
使用 ccp 引脚和计时器对时钟进行计数、在100~2.1mHz 范围内良好
当输入频率超过2.2mHz 时、计数器不工作。
来自 TimerValueGet (TIMER3_base、TIMER_A)的返回值未出现故障。
系统时钟为120MHz
有人可以就此提供任何建议吗?
uint32_t elapsedHi-us、elapsedLoStart_us、elapsedLoEnd_us;
uint32_t nStopTime_us、nCycCount = 0;
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER3);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
等待(10);
GPIOPinConfigure (GPIO_PD4_T3CCP0);
GPIOPinTypeTimer (GPIO_PORTD_base、GPIO_PIN_4);// PD4
TimerDisable (TIMER3_base、timer_A);
TimerConfigure (TIMER3_base、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_A_CAP_COUNT);
TimerControlEvent (TIMER3_base、TIMER_A、TIMER_EVENT_POS_EDGE);
TimerLoadSet (TIMER3_base、TIMER_A、65000);
TimerMatchSet (TIMER3_base、TIMER_A、0);
TimerLoadSet (TIMER3_base、TIMER_A、65000);
ROM_IntMasterDisable();
SysTimeStamp* PTS=SysTimeStamp::GetPtr();
PTS->RESET();
PTS->GetTimeStamp (&elapsedHi-us,&elapsedLoStart_us);
TimerEnable (TIMER3_base、TIMER_A);
操作
{
PTS->GetTimeStamp (&elapsedHi-us,&elapsedLoEnd_us);
} while ((elapsedLoEnd_us-elapsedLoStart_us)<10001); // 10ms
nCycCount = TimerValueGet (TIMER3_base、timer_A);
nCycCount =(uint32_t) 65000 - nCCount;
TimerDisable (TIMER3_base、timer_A);
ROM_IntMasterEnable();
*freq =nCycCount*100;