#include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_ints.h" #include "driverlib/debug.h" #include "driverlib/gpio.h" #include "driverlib/pwm.h" #include "driverlib/sysctl.h" #include "rit128x96x4.h" #include "driverlib/interrupt.h" #include "driverlib/systick.h" void PWMInit(void); void ButtonInit(void); float PulseWidth = 0.075; int t=0, iVal=0, i=0; void PWMInterrupt(void) { PWMGenIntClear(PWM_BASE, PWM_GEN_1, PWM_INT_CNT_ZERO); } void PWMInit(void) { SysCtlPWMClockSet(SYSCTL_PWMDIV_64); SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD); GPIOPinConfigure(GPIO_PB0_PWM2); GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_0); PWMGenConfigure(PWM_BASE, PWM_GEN_1, PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 2500); //20ms = 50Hz PWMGenIntTrigEnable(PWM_BASE, PWM_GEN_1, PWM_INT_CNT_ZERO); IntEnable(INT_PWM2); PWMIntEnable(PWM_BASE,PWM_INT_GEN_1); PWMOutputState(PWM_BASE, PWM_OUT_2_BIT, true); PWMGenEnable(PWM_BASE, PWM_GEN_1); } void ButtonInterrupt(void) { iVal=GPIOPinIntStatus(GPIO_PORTE_BASE,true); if(iVal == 4) { t=1; // linker Switch wurde aktiviert } if(iVal == 8) { t=2; // rechter Switch wurde aktiviert } GPIOPinIntClear(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3); } void ButtonInit(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3); GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIOIntTypeSet(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3, GPIO_FALLING_EDGE); GPIOPinIntEnable(GPIO_PORTE_BASE, GPIO_PIN_2 | GPIO_PIN_3); IntEnable(INT_GPIOE); } void main(void) { SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); PWMInit(); ButtonInit(); while(1) { if(t==1 && i< 1) { while(PulseWidth>=0.045) // = 0,9 ms // langsam nach links fahren { PulseWidth = PulseWidth-0.000001; PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 2500 * PulseWidth); } while(PulseWidth<=0.075) // langsam wieder zurück fahren { PulseWidth = PulseWidth+0.000001; PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 2500 * PulseWidth); } i++; } else if(t==2 && i< 50000) { PulseWidth = 0.105; // = 2.1 ms // sofort nach rechts fahren i++; } else { PulseWidth = 0.075; // = 1,5 ms t=0; i=0; } PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 2500 * PulseWidth); } }