#include #include #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/timer.h" #include "driverlib/pin_map.h" #include "inc/tm4c1294ncpdt.h" #include "driverlib/interrupt.h" #include "inc/hw_types.h" #include "inc/hw_memmap.h" #include "driverlib/fpu.h" #include #include "driverlib/pwm.h" #include "frequency.h" // start a pwm test signal void start_signal() { // configure M0PWM2, at GPIO PF2, BoosterPack 1 header C1 pin 2 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypePWM(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3); GPIOPinConfigure(GPIO_PF2_M0PWM2); GPIOPinConfigure(GPIO_PF3_M0PWM3); GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD); // configure the PWM0 peripheral, gen 1, outputs 2 and 3 SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0); // use system clock without division PWMClockSet(PWM0_BASE, PWM_SYSCLK_DIV_1); PWMGenConfigure(PWM0_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC); gPWMPeriod = roundf((float)gSystemClock / PWM_FREQUENCY); set_pwm_period(gPWMPeriod); PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT | PWM_OUT_3_BIT, true); PWMGenEnable(PWM0_BASE, PWM_GEN_1); } void set_pwm_period(uint32_t period) { PWMGenPeriodSet(PWM0_BASE, PWM_GEN_1, gPWMPeriod); PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, roundf((float)gPWMPeriod * 0.4f)); PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, roundf((float)gPWMPeriod * 0.4f)); } void start_frequency_scan() { // config GPIO PD0 as timer input T0CCP0 at BoosterPack Connector #1 pin 14 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_0); GPIOPinConfigure(GPIO_PD0_T0CCP0); SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); TimerDisable(TIMER0_BASE, TIMER_BOTH); TimerConfigure(TIMER0_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP); TimerControlEvent(TIMER0_BASE, TIMER_A, TIMER_EVENT_POS_EDGE); // use maximum load value TimerLoadSet(TIMER0_BASE, TIMER_A, 0xffff); // use maximum prescale value TimerPrescaleSet(TIMER0_BASE, TIMER_A, 0xff); TimerIntEnable(TIMER0_BASE, TIMER_CAPA_EVENT); TimerEnable(TIMER0_BASE, TIMER_A); } uint32_t previous; void capture_handler() { TimerIntClear(TIMER0_BASE, TIMER_CAPA_EVENT); uint32_t current = TimerValueGet(TIMER0_BASE, TIMER_A); uint32_t delta = current - previous; gPeriod = delta; previous = current; }