请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C1294NCPDT 你好
我正在尝试 使用计时器捕获模式计算输入信号的频率。
但是它运行良好,但有时结果会得到0值。
这怎么可能发生?
如何 消除 此误差?
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/fpu.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
;include "driveript=idt.id小时#id小时#idr32=u.id小时#idr.id小时";
include "idridr.idr.idr.idr.u.idu.idr.idr.id小时#include "u.idr32";include "u.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.
void
SysTickIntHandler (void)
{
//
//更新 SysTick 中断计数器。
//
if (g_ui32Counter>10000000){
G_ui32Counter=0;}
G_ui32Counter++;
}
void
InitConsole (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);
UARTStdioConfig (0、115200、16000000);
}
void EDGE_CAPTURE (void)
{
TimerIntClear (Timer1_base、timer_CAPB_event);
if (flag==false){
START = TimerValueGet (Timer1_base、timer_B);
flag=true;
}
如果(flag=true){
end = TimerValueGet (Timer1_base、timer_B);
时间=结束-开始;
flag=false;
TimerLoadSet (Timer1_base、timer_B、(10000-1));
}
void Configure_timer (void)
{
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
GPIOPinTypeTimer (GPIO_PORTD_base、GPIO_PIN_3);
GPIOPinConfigure (GPIO_PD3_T1CCP1);
TimerConfigure (Timer1_base、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_CAP_TIME_UP));
TimerControlEvent (Timer1_base、timer_B、timer_event_POS_EDGE);
TimerPrescaleSet (Timer1_base、timer_B、(120-1));
TimerLoadSet (Timer1_base、timer_B、(10000-1));
内部寄存器(INT_TIMER1B、EDGE_CAPTURE);
TimerIntClear (Timer1_base、timer_CAPB_event);
TimerIntEnable (Timer1_base、timer_CAPB_EVENT);
IntEnable (INT_TIMER1B);
TimerEnable (Timer1_base、timer_B);
}
int main (void)
{
FPULazyStackingEnable();
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL|SYSCTL_CFG_VCO_480)、120000000);
InitConsole();
CONFIG_TIMER ();
SysTickPeriodSet (ui32SysClock/1000000);
IntMasterEnable();
SysTickIntEnable();
SysTickEnable();
while (1)
{
if (time!=0)
{
calc_freq();
}
}
}
void calc_freq (void)
{
float y;
y=time/1200;
y=1/y;
time=100000 *y;
UARTprintf ("开始:%d\n"、time);
时间=0;
结束=0;
开始=0;
}