Thread 中讨论的其他器件:EK-TM4C1294XL、 TM4C123
大家好、
我很难让简单的 PWM 周期测量程序正常工作、需要一些帮助。
我正在为端口 PL0提供320Hz PWM、我想使用捕捉事件来测量两个上升沿之间的时间。
我以16MHz 的时钟频率运行系统、因此我假设计时器脱离系统时钟运行。 因此、我希望测量2个上升沿之间的50000个计数/周期。
1个周期@ 16MHz = 0.0000000625秒、因此、50000计数为0.003125s = 320Hz。 我的输入非常稳定。 我已经在范围上检查过它。
我将代码放在下面(计时器初始化代码和中断服务例程以捕获周期)、运行时为我提供34464和50000的替代输出、而不是一致的50000。 我出了什么问题?
最后、我计划测量2Hz 到20Hz 之间的波形的周期。 如何减慢计时器时钟的速度? 我尝试使用 TivaWare 库中的 TimerPrescale 函数、但该函数不起作用。
空 InitTimer (空)
{
UARTprintf ("初始化 Timer0 a\n");
//启用和配置 Timer0外设。
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0))
{
}
//配置定时器读取的引脚(PL0)
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOL))
{
}
//配置定时器读取的引脚(PL0)
GPIOPinConfigure (GPIO_PL0_T0CCP0);
GPIOPinTypeTimer (GPIO_PORTL_BASE、GPIO_PIN_0);
TimerDisable (TIMER0_BASE、TIMER_A);//配置定时器前将其禁用
TimerConfigure (TIMER0_BASE,(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP));//初始化计时器 A 以在边沿计时模式中递增计数
TimerClockSourceSet (TIMER0_BASE、TIMER_CLOCK 系统);//系统设置为16MHz
// TimerPrescaleSet (TIMER0_BASE、TIMER_A、0x20);//目前不确定这是如何工作的
TimerControlEvent (TIMER0_BASE、TIMER_A、TIMER_EVENT_POS_EDGE);// Timer A 记录位置边沿时间
TimerLoadSet (TIMER0_BASE、TIMER_A、0xFFFF);// LoadSet 指定定时器计数的最大值
//将引脚设置为使用内部上拉电阻。 从示例项目复制
MAP_GPIOPadConfigSet (GPIO_PORTL_base、GPIO_PIN_0、
GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);
//注册一个在计时器 A 遇到上升沿事件时调用的中断函数
TimerIntRegister (TIMER0_BASE、TIMER_A、Timer0CCP0IntHandler);
TimerIntClear (TIMER0_BASE、TIMER_CAP_EVENT); //确保清除中断
IntEnable (INT_TIMER0A); //在中断控制器中启用指定的中断。
TimerIntEnable (TIMER0_BASE、TIMER_CAP_EVENT); //启用指示的定时器中断源。
}
//当到达正边沿时,记录这些值并找到差异,输出到 Putty
空 Timer0CCP0IntHandler (空)
{
TimerIntClear (TIMER0_BASE、TIMER_CAP_EVENT);
如果(gFLAG = 0)
{
gEnd = TimerValueGet (TIMER0_BASE、TIMER_A);
gLength = gEnd - gStart;
UARTprintf ("\ngEnd =%d\n"、gEnd);
UARTprintf ("\nLENGTH =%d\n"、gLength);
gFLAG = 1;
}
否则{
gStart = gEnd;
gEnd = TimerValueGet (TIMER0_BASE、TIMER_A);
gLength = gEnd - gStart;
UARTprintf ("\ngEnd =%d "、gEnd);
UARTprintf ("length =%d\n"、gLength);
}
}